Redis的resp协议

2019-02-20
阅读 3 分钟
2.1k
resp协议 redis客户端和服务端交互使用的是redis作者制定的一个协议,叫resp(REdis Serialization Protocol)。 具体分如下几个层次 基于tcp 请求响应模式,但在两种情况下不再是简单的请求和响应模式(下文介绍) 支持五种类型的数据,分别是简单字符串,错误,整型,bulk strings ,数组 客户端发给服务端的命令都会序列化...

Redis有序集合指令学习

2019-02-20
阅读 19 分钟
2.5k
ZADD ZADD key [NX|XX] [CH] [INCR]score member [score member ...] 将元素及对应分值添加到一个有序集合中 NX:不更新已经存在的key,只增加新元素 XX:只更新已经存在的key,不增加新元素 CH:abbr:changed.不指定时只返回新增的元素个数,指定时返回新增的和更新的元素个数之和 INCR:参考zincrby {代码...} {代码...} ZINC...

Redis单机版本框架

2019-02-20
阅读 2 分钟
1.8k
Redis主流程伪代码 {代码...} Redis main函数调用流程图及关键节点 一条简单的set命令的执行流程 serverCron函数的功能 Q&A 1.bgsave执行时再次执行bgsave如何处理? 直接返回,返回信息会通知正在执行. 如果在aof rewrite时执行bgsave,会直接返回不能执行. 看代码此处应该有bgsave schedule命令,如果此时在执行aof r...

Redis 懒删除(lazy free)简史

2019-02-20
阅读 8 分钟
2.9k
下图为Redis5.0启动之后的效果。LWP为线程ID,NLWP为线程数量。可以看到,5.0的redis server共有四个线程,一个主线程48684,三个bio(background IO,后台io任务)线程,三个后台线程分别执行不同的io任务,我们重点考察删除一个key时的io线程执行。

Redis scan命令原理

2019-02-20
阅读 4 分钟
11.6k
scan类型命令 {代码...} scan:迭代当前库 sscan:迭代一个 set 类型 hscan:迭代一个hash类型,并返回相应的值 zscan:迭代一个sorted set,并且返回相应的分数 redis是单进程单线程模型,keys和smembers这种命令可能会阻塞服务器,所以出现了scan系列的命令,通过返回一个游标,可以增量式迭代. scan类型命令的实现 scan,sscan...

NGINX HTTP2 处理流程

2019-02-20
阅读 7 分钟
7k
二进制协议 http1.1请求行和请求头部都是纯文本编码,即可以直接按ascii字符解释,而http2是有自己的编码格式。并且nginx中http2必须建立在ssl协议之上。

NGINX 4xx 5xx 状态码构造

2019-02-20
阅读 5 分钟
2.4k
nginx配置 {代码...} {代码...} 4xx系列 400 NGX_HTTP_BAD_REQUEST {代码...} 401 NGX_HTTP_UNAUTHORIZED {代码...} 403 NGX_HTTP_FORBIDDEN {代码...} 404 NGX_HTTP_NOT_FOUND {代码...} 405 NGX_HTTP_NOT_ALLOWED {代码...} 5xx系列 500 NGX_HTTP_INTERNAL_SERVER_ERROR {代码...} {代码...} 501 NGX_HTTP_NOT_IMPLEME...

codis proxy处理流程

2019-02-20
阅读 7 分钟
3.1k
proxy启动 cmd/proxy/main.go文件 解析配置文件之后重点是proxy.New(config)函数 该函数中,首先会创建一个Proxy结构体,如下: {代码...} 然后起两个协程,分别处理11080和19000端口的请求 {代码...} 我们重点看s.serveProxy()的处理流程,即redis client连接19000端口后proxy如何分发到codis server并且将结果返回到客户...

Redis中查找大key

2019-02-18
阅读 4 分钟
9.4k
首发于 [链接] redis-cli提供的方法 注意以下所有试验基于redis 5.0.3版本 redis-cli 提供一个bigkeys参数,可以扫描redis中的大key {代码...} 执行之后输出如下所示: {代码...} 原理比较简单,使用scan命令去遍历所有的键,对每个键根据其类型执行"STRLEN","LLEN","SCARD","HLEN","ZCARD"这些命令获取其长度或者元素个数...

Redis中的lru算法实现

2019-02-18
阅读 7 分钟
3.9k
lru(least recently used)是一种缓存置换算法。即在缓存有限的情况下,如果有新的数据需要加载进缓存,则需要将最不可能被继续访问的缓存剔除掉。因为缓存是否可能被访问到没法做预测,所以基于如下假设实现该算法: