Redis原理分享,从使用到会用( 四 )


(2)惰性清理 。键过期了就过期了 , 不管 。当读/写一个已经过期的key时 , 会触发惰性删除策略 , 直接删除掉这个过期key
(3)定期清理 。每隔一段时间 , 对expires字典进行检查 , 删除里面的过期键 。
4. 缓存容量
缓存的容量有限 , 则容易引起Redis自身的缓存被淘汰淘汰策略 。
5. 缓存故障
缓存节点故障 , 也会引起缓存失效 , 所以业内比较典型的做法就是通过一致性Hash算法来均衡分布缓存 , 或者通过集群采用节点冗余的方式 。
6、监控Redis缓存操作命令
首先可通过info命令来分析缓存的率是否满足业务 , 如果太低那么就可以采用monitor命令或者第三方工具(如:redis-faina)分析操作key的访问频率 , 进而动态更改业务场景需要访问key的类型 。
三、优化服务器内存内存可以说是服务器最宝贵的资源运行地 , 所以对于Redis使用过程中 , 应该来优化Redis的内存 , 从而使其发挥出更大的性能 。
那这个Redis的内存应该如何优化呢? 首先存储任何的缓存都是基于Redis的数据类型进行选择 , 但Redis设置key的时候选择对应的类型就显得的很重要 。设置key和value的时候也不要过长等
就应该从Redis缓存的组成结构 , 淘汰缓存上做到避免无用数据占用缓存、内存碎片、数据类型使用内存上等问题来做分析
如下一些常用的思路
Redis主进程的内存消耗:

  • Redis自身使用的内存:消耗很少 , 3MB多点
  • 对象内存
  • 缓冲内存
  • 内存碎片
3.1对象内存:所有key对象长度 + 所有value对象长度
  • 每次创建键值对时 , 至少创建两个类型对象:key对象、value对象 , 应该使用短键名
3.2缓冲内存:
  • 每个客户端的输入、输出缓冲内存:
  • 输入缓冲最大1G , 超出则关闭该客户端连接;
  • 输出缓冲:16KB的固定缓冲区、动态缓冲区 , 动态缓冲区可通过client-output-buffer-limit配置参数限制(根据客户端类型normal、slave、pubsub , 分开设置)
  • client-output-buffer-limit normal 0 0 0
  • client-output-buffer-limit slave 256mb 64mb 60 //超过256MB时 , 或者持续超过64MB达60秒 , 关闭连接
  • client-output-buffer-limit pubsub 32mb 8mb 60
  • 复制积压缓冲内存:用于主从复制的部分复制 , 所有客户端共享该缓冲区 , 默认1MB , 可通过repl-backlog-size调整 , 适当调大 , 可有效避免全量复制;
  • AOF缓冲内存:用于保存在AOF重写期间的写命令 , 便于重写完毕后把缓冲的命令追加到AOF文件中;
3.3内存碎片:
  • 当存储的数据长短差异较大时 , 就容易出现大量内存碎片 , 应该尽可能地保持数据对齐或使用固定长度的字符串;
  • 内存碎片只能通过完全重启Redis来清除;
3.4内存回收策略: