在Redis中,允许用户设置最大使用内存的大小server.maxmemory
,在内存限定的情况下是很有用的。
当Redis内存数据集大小上升到一定大小的时候,就会试行数据淘汰策略,redis提供了6种数据淘汰策略。
在redis.conf
配置文件中说明了,redis在到达最大内存容量时便会移除元素。
- volatile-lru:从设置过期时间的数据集中,移除最近最久未使用的元素。
- allkeys-lru:从redis所有数据中,移除最近最久未使用的元素。
- volatile-random:从设置过期时间的数据集中,随机选择一个数据进行释放。
- allkeys-random:从redis所有数据中,随机选择一个数据进行释放。
- volatile-ttl:从设置过期时间的数据集中,选择一个将要过期的数据释放。
- noeviction:
[ɪˈvɪkʃn] 以为可神、驱逐
,不删除任何数据,直接返回异常。
默认的淘汰策略为noenviction
,类似于lru算法。默认情况下,Redis会随机挑选5个键,并且从中选取一个最近最久未使用的key进行淘汰,在配置文件中,可以配置maxmemory-samples
的值来设置redis需要检查key的个数,但是检查的越多,耗时越久。
一般推荐的淘汰策略是volatile-lru
。我们再应用程序中识别Redis中保存数据的重要性。
- 针对于不变的,重要的数据(例如配置数据),不应该设置有效期,这样Redis永远不会淘汰这些数据;
- 针对于哪些不是很重要,并且可能会发送改变的数据,我们应当设置有效期,这样在内存不足的情况下,可以淘汰这部分数据。