其他

Redis 内存管理

2022-08-31  本文已影响0人  右耳菌

1. Redis内存分配

  • Strings类型: 一个String类型的value最大可以存储512Mo
  • Lists类型: list的元素个数最多为2432-1个,也就是4294967295个。
  • Sets类型: 元素个数最多为2432-1个,也就是4294967295个。
  • Hashes类型: 键值对个数最多为2^32-1个,也就是4294967295个
#最大内存控制
maxmemory 最大内存阈值
maxmemory-policy 到达阈值的执行策略

2. 内存压缩

大小超出压缩范围,溢出后Redis将自动将其转换为正常大小


3. 过期数据的处理策略

主动处理(redis主动触发检测key是否过期)每秒执行10次。过程如下:

  1. 从具有相关过期的密钥集中测试20个随机密钥
  2. 删除找到的所有密钥已过期
  3. 如果超过25%的密钥已过期,请从步骤1重新开始

被动处理:

  1. 每次访问key的时候,发现超时后被动过期,清理掉

4. 数据恢复阶段过期数据的处理策略

RDB方式
过期的key不会被持久化到文件中。
载入时过期的key,会通过redis的主动和被动方式清理掉。

AOF方式
当redis 使用AOF方式持久化时,每次遇到过期的key redis会追加一条DEL命令到AOF文件,
也就是说只要我们顺序载入执行AOF命令文件就会删除过期的键。

注意: 过期数据的计算和计算机本身的时间是有直接联系的!也就是redis的过期时间判断是根据系统时间来的,回拨时间会导致某些数据不会过期。


5. Redis内存回收策略

配置文件中设置:

maxmemory-policy noeviction

动态调整:

config set maxmemory-policy noeviction
回收策略 说明
noeviction(不驱逐) 客户端尝试执行会让更多内存被使用的命令直接报错
allkeys-lru() 在所有key里执行LRU算法
volatile-Iru 在所有已经过期的key里执行LRU算法
volatile-lfu 使用过期集在密钥中使用近似LFU进行驱逐
allkeys-lfu 使用近似LFU逐出任何键
allkeys-random 在所有key里随机回收
volatile-random 在已经过期的key里随机回收
volatile-ttl 回收已经过期的key,并且优先回收存活时间(TTL)较短的键

6. Redis中的LRU算法

LRU (Least recently used,最近最少使用)︰根据数据的历史访问记录来进行淘汰数据

maxmemory-samples 5

7. Redis中的LFU算法

LFU (Least Frequently Used)根据数据的历史访问频率来淘汰数据。


如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

上一篇下一篇

猜你喜欢

热点阅读