1.Redis内存满了怎么办?

1.1查看Redis最大占用内存

打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。

1.2redis默认内存多少可以用?

如果不设置最大内存大小或者最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存。

1.3一般生产上如何配置

一般推荐Redis设置内存为最大物理内存的四分之三,也就是0.75

1.4如何修改redis内存设置

  • 通过修改文件配置:redis.conf maxmemory 123456
  • 通过命令修改:config set maxmemory 123456

1.5说明命令查看redis内存使用情况

info memory

1.6redis内存使用超出了设置的最大值会怎样

没有加上过期时间就会出现:OOM command not allowed when used memory > 'maxmemory'

2.redis缓存淘汰策略

2.1redis过期键的删除策略,三种不同的删除策略

  • 定时删除:对CPU不友好,用处理器性能换取存储空间(拿时间换空间)
  • 惰性删除:对memory不友好,用存储空间来换取处理器性能(拿空间换时间)
  • 定期删除(上面两种方案都走极端):
    定期删除策略是前两种策略的折中:
    • 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少操作对CPU时间的影响。
    • 周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度。
    • 特点一:CPU性能占用设置有峰值,检测频度可自定义设置
    • 特点二:内存压力不是很大,长期占用内存的冷数据会被持续清理
      总结:周期性抽查存储空间(随机抽查,重点抽查)

定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成定时删除策略,以至于将CPU时间过多地消耗在删除过期键上面。如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率。

2.2内存淘汰策略

过期键删除策略中,定时删除和惰性删除处于两个极端,通常采用定期删除策略,由于定期删除策略采取周期性随机抽查的方式扫面并删除过期的键,存在没有被抽查到的过期键存储在内存中,此时需要一种兜底方案,以解决内存不够时候,redis释放内存的机制(内存淘汰策略)

  • noeviction:不会驱逐任何key
  • allkeys-lru:对所有key使用LRU算法进行删除
  • volatile-lru:对所有设置了过期时间的key使用LRU算法进行删除
  • allkeys-random:对所有key随机删除
  • volatile-random:对所有设置了过期时间的key随机删除
  • volatile-ttl:删除马上要过期的key
  • allkeys-lfu:对所有key使用LFU算法进行删除
  • volatile-lfu:对所有设置了过期时间的key使用LFU算法进行删除

2.3如何配置修改

命令:config set maxmemory-policy allkeys-lru
配置文件:maxmemory-policy allkeys-lru

posted on 2021-03-22 10:46  whn051799  阅读(47)  评论(0编辑  收藏  举报