技术架构

redis.png

数据类型

数据类型.png

字符串

内部编码

  • int
    • 对应8个字节的长整型
  • embstr
    • 对应小于39个字节的字符串
  • raw

    • 对应大于39个字节的字符串

      存储空间

  • 当对只读的embstr进行修改时,会自动转换为raw,转换过程不可逆

  • redis规定转换时只能从小内存编码转换成大内存编码
  • 即使申请的大内存空间只存储了少部分数据,也会为了保证性能、内存对齐而浪费一部分空间
  • 所以推荐key长度在8个字节以内,value也可压缩到8个字节以内

    列表

    内部编码

  • ziplist

    • 压缩列表
    • 使用时间复杂度换空间存储
    • 将key/value依次连续存储在一个字符串中,节省空间存储,但提高了算法时间复杂度
    • 推荐在list元素数量小于512,对象大小都不足64字节的场景中使用
  • linkedlist

    • 双端链表
    • 插入和删除时不需要移动其他元素

      哈希

      集合

  • 避免在一个key中添加大量的数据,防止大key操作

增量同步.png

有序集合

非功能性使用

  • 最大连接数的设置
  • 超时时间的设置
  • Redis常见告警
    • 入流量过大
      • 主从同步,要注意同步的时延
    • 出流量过大
      • 单分片热key现象
        • 某个链接被刷了或商品在秒杀
        • 无法发挥集群多分片抗读的作用
        • 推荐使用服务实例的本地缓存解决
    • 连接数过高
      • 请求超时重试导致
        • 要留意cpu使用率
    • 内存使用率过高
      • 可能是数据分布不均
        • 删除数据
        • 运维扩容