在redis中,redis允许用户更改设置最大内存maxmemory,在每次写入或更新等操作时候,redis会检查使用的内存,当内存达到最大值得时候,就会进行数据淘汰策略,从而换取内存出来
redis数据淘汰策略有6种:
- volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据
redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF
持久化)和从机(主从连接)。
如果设置了过期时间,在达到内存最大的时候,建议可以使用第一种volatile-lru淘汰策略
如果没有设置过期时间,在达到内存最大时候,建议使用allkeys-lru淘汰策略
使用的2种算法: http://blog.youkuaiyun.com/zdy0_2004/article/details/44685615 这个博客感觉不错,对于我们这些新手理解起来可能比较容易!