Redis内存

本文详细介绍了Redis的内存配置,包括如何通过configsetmaxmemory设置内存大小及maxmemory参数的永久生效方式。当Redis内存达到上限时,会触发淘汰策略,包括LRU和LFU等。此外,讨论了过期键的三种删除策略:定时、惰性和定期,以及它们对CPU和内存的影响。最后,提到了Redis的缓存淘汰策略,如noeviction和LRU,并展示了如何通过命令行设置这些策略。
摘要由CSDN通过智能技术生成

一、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,但当数据库重启之后会失效,若想永久有效,需要对配置文件信息进行修改,如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值