信步踏轻歌
笑着过....
  • 过期集合:redis会将每个设置了过期时间的key放入到一个独立的字典中,定时遍历这个字典来删除到期的key,还可
                      结合惰性策略来删除过期二代key.
  • 定时扫描策略:Redis默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的key,而是采用了一种简单的贪心策略.
                      1.从过期字典中随机20个key.
                      2.删除这20个key中过期的key.
                      3.如果过期的key比率超过1/4,那就重复1.
                      另外为保证过期扫描不会出现循环过渡,导致线程卡死现象,算法还增加了扫描时间的上限,默认不超过25ms.
                      大量key同时过期导致服务器卡顿,采用过期时间随机化解决该问题.
  • LRU:当Redis内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换(Swap),交换会让Redis的性能急剧下降.
              Redis提供了配置参数maxmemory来限制内存超出期望大小.当实际内存超出maxmemory时,redis提供了几种可选
              策略(maxmemory-policy)来让用户决定该如何腾出新的空间以继续提供读写服务.
    • noeviction: 不会继续服务写请求(DEL请求可继续服务),读请求可以继续进行.这样可以保证不会丢失数据,但是会让线
                           上的业务不能持续进行.这是默认的淘汰策略.
    • volatile-lru:尝试淘汰设置了过期时间的key,最少使用的key优先被淘汰.没有设置过过期时间的key不会被淘汰,这样可以
                           保证需要持久化的数据不会突然丢失.
    • volatile-ttl: 设置了过期时间的key根据剩余寿命ttl的值,ttl越小越优先被淘汰.
    • volatile-random: 随机.
    • allkeys-lru: 所有keylru.
    • allkeys-random: 所有key随机.

           一般做缓存的话,使用allkeys-xxx策略;如果使用其持久化策略的话,volatile-xxx策略.

  • 懒惰删除:lazy free.删除指令del会直接释放对象的内存,大部分情况下,这个指令非常快,没有明显延迟.不过如果删除的key是一个非常大
                      的对象,则删除操作就会导致单线程卡顿.为解决这种卡顿问题,引入unlink指令,它能对操作进行懒处理,丢给后台线程来异步回收
                      内存.flush async参数同理.
posted on 2019-05-11 21:13  信步踏轻歌  阅读(609)  评论(0编辑  收藏  举报