技术架构
数据类型
字符串
内部编码
- int
- 对应8个字节的长整型
- embstr
- 对应小于39个字节的字符串
raw
当对只读的embstr进行修改时,会自动转换为raw,转换过程不可逆
- redis规定转换时只能从小内存编码转换成大内存编码
- 即使申请的大内存空间只存储了少部分数据,也会为了保证性能、内存对齐而浪费一部分空间
所以推荐key长度在8个字节以内,value也可压缩到8个字节以内
列表
内部编码
ziplist
- 压缩列表
- 使用时间复杂度换空间存储
- 将key/value依次连续存储在一个字符串中,节省空间存储,但提高了算法时间复杂度
- 推荐在list元素数量小于512,对象大小都不足64字节的场景中使用
linkedlist
避免在一个key中添加大量的数据,防止大key操作
有序集合
非功能性使用
- 最大连接数的设置
- 超时时间的设置
- Redis常见告警
- 入流量过大
- 主从同步,要注意同步的时延
- 出流量过大
- 单分片热key现象
- 某个链接被刷了或商品在秒杀
- 无法发挥集群多分片抗读的作用
- 推荐使用服务实例的本地缓存解决
- 单分片热key现象
- 连接数过高
- 请求超时重试导致
- 要留意cpu使用率
- 请求超时重试导致
- 内存使用率过高
- 可能是数据分布不均
- 删除数据
- 运维扩容
- 可能是数据分布不均
- 入流量过大