关于空间预分配和空间惰性释放
最佳实践:因为对字符串的增长或缩短操作都有可能需要执行内存重分配,所以修改相同键使用SDS类型保存的值时保持修改前后长度一致。
rehash步骤
负载因子=哈希表已保存节点数量/哈希表大小 Redis使用MurmurHash2算法来计算键的哈希值
升级步骤
最佳实践:为了避免添加新元素时产生升级操作,应向同一整数集合添加相同类型的整数
不同类型和编码的对象
类型 | 编码 | 对象 |
---|---|---|
REDIS_STRING | REDIS_ENCODING_INT(整数值) | 使用整数值实现的字符串对象 |
REDIS_STRING | REDIS_ENCODING_EMBSTR(小于32字节字符串) | 使用embstr编码的简单动态字符串实现的字符串对象 |
REDIS_STRING | REDIS_ENCODING_RAW(大于32字节字符串) | 使用简单字动态字符串实现的字符串对象 |
REDIS_LIST | REDIS_ENCODING_ZIPLIST(默认配置下,所有元素长度小于64字节且元素数量小于513,查看命令:CONFIG GET list-max-ziplist*) | 使用压缩列表实现的列表对象 |
REDIS_LIST | REDIS_ENCODING_LINKEDLIST | 使用双端链表实现的列表对象 |
REDIS_HASH | REDIS_ENCODING_ZIPLIST (默认配置下,所有元素长度小于64字节且元素数量小于513,查看命令:CONFIG GET hash-max-ziplist*) | 使用压缩列表实现的列表对象 |
REDIS_HASH | REDIS_ENCODING_HT | 使用字典实现的哈希对象 |
REDIS_SET | REDIS_ENCODING_INTSET(默认配置下,所有元素都是整数值且元素数量小于513,查看命令:CONFIG GET set-max-intset-entries) | 使用整数集合实现的集合对象 |
REDIS_SET | REDIS_ENCODING_HT | 使用字典实现的集合对象 |
REDIS_ZSET | REDIS_ENCODING_ZIPLIST(默认配置下,所有元素长度小于64字节且元素数量小于128,查看命令:CONFIG GET zset-max-ziplist*) | 使用压缩列表实现的有序集合对象 |
REDIS_ZSET | REDIS_ENCODING_SKIPLIST | 使用跳跃链表和字典实现的有序集合对象 |
备注
最佳实践:为了最大程度的节省内存,应将简单字符或重复率较高的字符串对应成0-9999范围内的数字。
惰性删除:当读取的键是一个过期键时才会将该键删除并返回空。 定期删除:在规定的时间内分多次遍历每个数据库,从expires字典中随机检查一部分键的过期时间(也即每次执行定期删除并不一定能把所有的过期键都删除)。 最佳实践:主从模式下从服务器在读取到过期键时不会主动删除且会当成正常键返回数据,当数据中包含较多的过期键时主服务器的定期删除策略可能需要较长时间才能将该过期键删除,因此Redis的主从模式不同于Mysql的主从模式(主写从读),如果使用类似Mysql主从的用法时需注意过期数据在一定时间内可能是脏数据。
命令请求步骤
服务器启动步骤
MOVED错误表示所请求的键负责权已经转移到另一节点,ASK错误则只是槽正在转移时的一种临时性错误
Redis创建Lua执行环境步骤
源地址 By佐柱