type 表示类型比如 列表 字符串 字典等 ptr 实际对象的地址 encoding 实现对应对象的方式 比如列表对象包含少量元素的时候使用压缩列表作为底层实现 当元素变多时使用双端链表
String对象 编码 int embstr raw
List对象 编码 ziplist linkedlist 命令LPUSH RPUSH LPOP RPOP
Hash对象 编码 ziplist hashtable
Set对象 编码 intset hashtable
有序集合对象 ziplist skiplist
命令执行 先判读只对象的类型,再根据具体编码执行命令
redisObject (refcount)应用计数内存管理 lru 最后一次被访问时间
db (redisDB)数组 dbnum 数组长度
SELECT 切换数据库
redisClient 对象db记录当前目标数据库
redisDB dict保存所有键值对 expires 保存所有过期字典
redisDB watched_keys 保存watch命令监视端key
过期键删除策略
1 定时删除 内存友好 cpu不友好,存在大量key过期(需要限定数量和时间)
2 惰性删除 内存不友好
redis结合两种策略实现
从服务器不会删除过期键,只会通过主服务器同步删除
saveParam 保存数据保存策略
dirty距上一次save后执行链多少次修改
lastsave上一次save时间
clients 保存所有的客户端
redisClient
fd 套接字
queryBuf 客户端的请求
argv argv[0]是命令其他是参数
argc 解析后的argv长度
cmd 指向对应的指向命令
发布订阅
pubsub_channels 保存所有频道的订阅关系
文件事件
套接字-》IO多路复用程序-》文件事件队列-》事件处理器
时间事件
初次同步
部分同步
服务器会一次性执行多个命令,而不会中断去执行其他的命令
MULTI
将客户端切换到事务状态,通过在redisclient中flags属性来完成
EXEC
服务器端会立即执行客户端端事务队列
WATCH
是一个乐观锁,可以在EXEC执行之前监视任何键,在执行EXEC时发现有变化,则拒绝事务
服务器端没执行完命令后会更新客户端的REDIS_DIRTY_CAS,服务器根据这个标志决定是否执行事务
redis事务不具有回滚机制
slowlog-log-slower-than 事件
slowlog-max-len 数量
SLOWLOG GET 查看日志
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。