一、redis内存

配置文件中设置redis内存的参数:。
该参数如果不设置或者设置为0,则redis默认的内存大小为:

32位下默认是3G
64位下不受限制
一般推荐Redis设置内存为最大物理内存的四分之三,也就是0.75

命令行设置config set maxmemory <内存大小,单位字节>,服务器重启失效
config get maxmemory获取当前内存大小
永久则需要设置maxmemory参数,maxmemory是bytes字节类型,注意转换
在这里插入图片描述

info memory:查看redis内存情况
当redis内存满的时候同样会报OOM

  删除策略是预防redis内存占满情况,淘汰策略是在redis内存占满的情况下的处理措施。

二、过期key的删除策略

  • 定时策略:在设置键的过期时间的同时,创建⼀个定时器。当键的过期时间来临时,⽴即执⾏对键的删除操作。
  • 惰性策略:每次获取键的时候,判断键是否过期,如果过期的话,就删除该键,如果没有过期,则返回该键。
  • 定期策略:每隔⼀段时间,对键进⾏⼀次检查,删除⾥⾯的过期键 。Redis中过期的key是由主线程删除的,为了不阻塞⽤户的请求,所以删除过期key的时候是少量多次。 举例如下:
    1. 每秒进⾏10次过期扫描,每次从过期字典中随机选出20个key
    2. 删除20个key中已经过期的key
    3. 如果过期key的⽐例超过1/4,则进⾏步骤⼀
    4. 每次扫描时间的上限默认不超过25ms,避免线程卡死

定时删除策略对CPU不友好,当过期键⽐较多的时候, Redis线程⽤来删除过期键,会影响正常请求的响应。

惰性删除读CPU是⽐较有好的,但是会浪费⼤量的内存。如果⼀个key设置过期时间放到内存中,但是没有被访问到,那么它会⼀直存在内存中。

定期删除策略则对CPU和内存都⽐较友好

三、Redis缓存淘汰策略

noeviction: 不会驱逐任何key,默认值

volatile-ttl: 删除马上要过期的key

allkeys-lru: 对所有key使用LRU算法进行删除

volatile-lru: 对所有设置了过期时间的key使用LRU算法进行删除

allkeys-random: 对所有key随机删除

volatile-random: 对所有设置了过期时间的key随机删除

allkeys-lfu: 对所有key使用LRU算法进行删除

volatile-lfu: 对所有设置了过期时间的key使用LRU算法进行删除

lru:Least recently used,最近最少使用,LinkedHashMap自带该算法。

lfu:Least Frequently Used ,最近最少频率使用算法,如果一个数据在最近一段时间很少被访问到,那么可以认为在将来它被访问的可能性也很小。因此,当空间满时,最小频率访问的数据最先被淘汰。

可以通过命令行进行设置:config set maxmemory-policy allkeys-lru,但当数据库重启之后会失效,若想永久有效,需要对配置文件信息进行修改,如下图所示:
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐