Redis淘汰机制

说到Redis的内存淘汰机制,突然我联想到之前上大学时候的手机内存不够用的问题。记得那时候买的是16G的5s,🍎手机都知道,非常耐用,用了四年都不卡,所以手机里存了大量的东西,导致手机经常提示内存不够用。我就经常删除手机里的图片,当时我的策略就是将手机里最不重要的照片以及很少会用到的照片删除掉,现在想想当初买手机的时候真应该买内存大一些的了。其实这里我删除手机照片的思考方式就有点类似Redis的内存淘汰机制了。

删除策略

  • 定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期 时间来临时,立即执行对键的删除操作。
  • 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过 期,如果过期的话,就删除该键;如果没有过期,就返回该键。
  • 定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要 删除多少过期键,以及要检查多少个数据库,则由算法决定。

淘汰策略

Redis的内存淘汰机制就是为了淘汰掉一些数据,保证Redis的正常服务。可以通过在配置文件中添加maxmemery-policy选择不同的淘汰策略,具体的策略有以下几种:

  • noeviction 不进行任何淘汰操作,当内存不够时写命令会报错
  • allkeys-lru 在所有的key中查找最近最少使用的key进行淘汰
  • volatile-lru 在设置过期时间的key中查找最近最少使用的key进行淘汰
  • allkeys-random 在所有的key中随机移除某个key
  • volatile-random 在设置了过期时间的key中随机移除某个key
  • volatile-ttl 在设置了过期时间的key中,删除过期时间最早的key
  • allkeys-lfu 在所有的key中查找最近访问频率最低的key进行淘汰(4.0版本)
  • volatile-lfu 在设置过期时间的key中查找最近访问频率最低的key进行淘汰(4.0版本)

备注
这里删除的key其实只删除一个,这是因为Redis在执行具有申请内存的命令时,会先判断内存是否超过maxmemery,如果超过了就会基于设置的maxmemery-policy策略删除key。

阅读全文 »

Vim命令

今天在公司领导问了个vim的命令,当时脑子一片空白,一时间语无伦次,场面甚是尴尬,真是书到用时方恨少啊!😰
作为一名后端开发,在日常开发的过程中肯定会接触到使用vim快捷命令,基本上都是用到的时候直接度娘,虽然会接触到一些常用的vim命令,毕竟不是运维,过段时间基本上会再次忘掉,下次在遇见的时候再度娘。期间难免会耽搁不少时间,但是我觉得特地学一下vim,又感觉有点力不从心,上班不比上学,不是每天都可以划水。最后想了下觉得应该把用到的vim命令记录下来,方便下次查阅,后面有时间的时候也翻一下,就当做记单词了吧。

阅读全文 »

Redis高可用

Redis的高可用实现方案有哪些,为什么要选择官方的哨兵模式,自己开发自动化故障转移脚本有什么问题。redis cluster重定向有几种?redis数据分区...

阅读全文 »