Redis占用内存大小
1、通过配置文件配置
通过在Redis装置目录上面的redis.conf配置文件中增加以下配置设置内存大小
//设置Redis最大占用内存大小为100Mmaxmemory 100mb
redis的配置文件不肯定应用的是装置目录上面的redis.conf文件,启动redis服务的时候是能够传一个参数指定redis的配置文件的
2、通过命令批改
Redis反对运行时通过命令动静批改内存大小
//设置Redis最大占用内存大小为100M127.0.0.1:6379> config set maxmemory 100mb//获取设置的Redis能应用的最大内存大小127.0.0.1:6379> config get maxmemory
Redis的内存淘汰
既然能够设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还持续往Redis外面增加数据不就没内存可用了吗?
实际上Redis定义了几种策略用来解决这种状况:
- noeviction(默认策略):对于写申请不再提供服务,间接返回谬误(DEL申请和局部非凡申请除外)
- allkeys-lru:从所有key中应用LRU算法进行淘汰
- volatile-lru:从设置了过期工夫的key中应用LRU算法进行淘汰
- allkeys-random:从所有key中随机淘汰数据
- volatile-random:从设置了过期工夫的key中随机淘汰
- volatile-ttl:在设置了过期工夫的key中,依据key的过期工夫进行淘汰,越早过期的越优先被淘汰
当应用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key能够被淘汰,则和noeviction一样返回谬误
如何获取及设置内存淘汰策略
获取以后内存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy
通过配置文件设置淘汰策略(批改redis.conf文件):
maxmemory-policy allkeys-lru
通过命令批改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
LRU在Redis中的实现
近似LRU算法
Redis应用的是近似LRU算法,它跟惯例的LRU算法还不太一样。近似LRU算法通过随机采样法淘汰数据,每次随机出5(默认)个key,从外面淘汰掉最近起码应用的key。
能够通过maxmemory-samples参数批改采样数量:
例:maxmemory-samples 10
maxmenory-samples配置的越大,淘汰的后果越靠近于严格的LRU算法
Redis为了实现近似LRU算法,给每个key减少了一个额定减少了一个24bit的字段,用来存储该key最初一次被拜访的工夫。
Redis3.0对近似LRU的优化
Redis3.0对近似LRU算法进行了一些优化。新算法会保护一个候选池(大小为16),池中的数据依据拜访工夫进行排序,第一次随机选取的key都会放入池中,随后每次随机选取的key只有在拜访工夫小于池中最小的工夫才会放入池中,直到候选池被放满。当放满后,如果有新的key须要放入,则将池中最初拜访工夫最大(最近被拜访)的移除。
当须要淘汰的时候,则间接从池中选取最近拜访工夫最小(最久没被拜访)的key淘汰掉就行。
本文由猿必过 YBG 公布