Redis中缓存策略

  • volatile-lru:从数据集中,将设置了过期时间的key,按最近最少使用的数据淘汰。
  • volatile-ttl:从数据集中,只将设置了过期时间的key,按即将过期时间的最短的优先淘汰。即ttl key,结果最小的优先淘汰。
  • volatile-random:从数据集中,只将设置了过期时间的数据按随机淘汰
  • allkeys-lru:从数据集中(不管有没有设置过期时间)按最近最少使用的数据淘汰
  • allkeys-random:从数据集中(不管有没有设置过期时间)随机淘汰数据.
  • no-enviction:禁用淘汰策略

默认的缓存策略为:

# The default is:
#
# maxmemory-policy noeviction

示例

127.0.0.1:6379> keys *
 1) "heloo719999sfsadf"
 2) "heloo71"
 3) "heloo712"
 4) "heloo89"
 5) "heloo713"
 6) "heloo717"
 7) "heloo732"
 8) "heloo731"
 9) "heloo715"
10) "heloo719999"
127.0.0.1:6379> CONFIG SET maxmemory-policy noeviction
OK

noeviction

127.0.0.1:6379> set he wolsdkfasldkf
(error) OOM command not allowed when used memory > 'maxmemory'.

allkeys-random

127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-random
OK
127.0.0.1:6379> set he123123 wolsdkfasldksdf21342134
OK

可以看到,这种策略,一般是不会出现OOM的。因为它会不断的淘汰原有的key,释放内存给新的key.

allkeys-lru

127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lru
OK
127.0.0.1:6379> set he123123123 wolsdkfasldksdf21342134123
OK

可以看到,这种策略,一般是不会出现OOM的。因为它会不断的淘汰原有的key,释放内存给新的key.只是这个是以最近最少使用为原则.

volatile-random

127.0.0.1:6379> CONFIG SET maxmemory-policy volatile-random
OK
127.0.0.1:6379> set sdfhe123123123123 wolsdkfasldksdf21342134sdfasdfasdfsafasfasfsadfsdfsdfsdasdfsdfsdfsafsdf
(error) OOM command not allowed when used memory > 'maxmemory'.
127.0.0.1:6379> EXPIRE sdfhe123123123123 360
(integer) 1
127.0.0.1:6379> set h1 wl2
OK

其他的两个volatile-xxx的,也同理,只是一个是最近最少使用,一个是按ttl最短来淘汰.