Redis内存
我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。
通过在Redis安装目录下面的redis.conf配置文件中进行设置。
如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存
Redis内存淘汰
当Redis内存用完的时候,再对其中添加数据不就没有内存了嘛?
Redis提供了几种策略来处理这种情况:
-
noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
-
allkeys-lru:从所有key中使用LRU算法进行淘汰
-
volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
-
allkeys-random:从所有key中随机淘汰数据
-
volatile-random:从设置了过期时间的key中随机淘汰
-
volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰
可以通过对配置文件的修改设置不同策略。
近似LRU
Redis采用的是近似LRU算法,就是通过随机采样法淘汰数据,每次随机出5(默认)个key,从里面淘汰掉最近最少使用的key。也可以对这个随机值进行设置,越大,越接近严格的LRU算法。
LFU
LFU算法是Redis4.0里面新加的一种淘汰策略。它的核心思想是根据key的最近被访问的频率进行淘汰,很少被访问的优先被淘汰,被访问的多的则被留下来。
LFU算法能更好的表示一个key被访问的热度。假如你使用的是LRU算法,一个key很久没有被访问到,只刚刚是偶尔被访问了一次,那么它就被认为是热点数据,不会被淘汰,而有些key将来是很有可能被访问到的则被淘汰了。如果使用LFU算法则不会出现这种情况,因为使用一次并不会使一个key成为热点数据。
LFU一共有两种策略:
-
volatile-lfu:在设置了过期时间的key中使用LFU算法淘汰key
-
allkeys-lfu:在所有的key中使用LFU算法淘汰数据