Redis2/5---持久化和内存管理

1.redis持久化

(1)简介

Redis的数据都放在内存中,如果没有配置持久化,Redis重启后数据就丢失了,于是需要开启Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据
在这里插入图片描述
实际情况中,可能不开启持久化;数据不丢失需要开启aof always

(2)持久化方式RDB和AOF对比

RDBAOF(append only file)
持久化在指定的时间间隔对你的数据进行快照存储。记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
方式客户端直接通过命令BGSAVE或者SAVE创建一个内存快照。BGSAVE调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程仍然继续处理命令。SAVE执行SAVE命令过程,不再影响其他命令。在redis.conf中调整save配置选项,当在规定的时间内,Redis发送了写操作的个数满足条件会发生BGSAVE命令。#900秒内至少执行一次写操作save 900 1开启AOF持久化appendonly yes AOF策略调整 #每次有数据修改时都会写入AOF文件appendfsync always #每秒钟同步一次,该策略为AOF的缺省策略 appendfsync everysec #从不同步。高效但是数据不会被持久化。appendfsync no
优点对性能影响小;RDB文件进行数据恢复比AOF快很多。最安全;容灾;易读,可修改。
缺点同步时丢失数据。如果数据集非常大且CPU不够强(比如单核CPU),Redis在fork子进程时可能消耗相对较长的时间,影响Redis对外提供服务的能力。文件体积大;性能消耗比RDB高;数据恢复速度比RDB慢。

2.内存管理

(1)内存分配

不同数据类型的大小限制

类型大小
Strings一个String类型的value最大可以存储512M
Lists元素个数最多为2^32-1个,也就是4294967295个
Sets元素个数最多为2^32-1个,也就是4294967295个
Hashes键值对个数最多为2^32-1个,也就是4294967295个

#最大内存控制
maxmemory 最大内存阈值
maxmemory-policy 到达阈值的执行策略

(2)内存压缩

#配置字段最多512个
hash-max-zipmap-entries 512
#配置value最大为64字节
hash-max-zipmap-value 64
##配置元素个数最多512个
list-max-ziplist-entries 512

(3)过期数据的处理策略

  • 主动处理(redis主动触发检测key是否过期)每秒执行10次数。执行过程如下:
    1.从具有相关过期的密钥集中测试20个随机密钥。
    2.删除找到的所有密钥已过期。
    3.如果超过25%的密钥已过期,则从步骤1重新开始。
  • 被动处理
    每次访问key的时候,发现超时后被动过期,清理掉。

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

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

【注意:过期数据的计算和计算机本身的时间是有直接联系的。】

(4)Redis内存回收策略

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

(5)LRU和LFU算法

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

  • 核心思想:如果数据最近被访问过,那么将来被访问的机率也更高。
  • 注意:Redis的LRU算法并非完整的实现,完整实现的LRU实现是因为这需要太多的内存。
  • 方法:通过对少量keys进行取样(50%),然后回收其中一个最好的key。
  • 配置方式;maxmemory-samples 5

LFU算法

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

  • 核心思想:如果数据过去被访问多次,那么将来被访问的频率也更高。
  • Redis实现的是近似的实现,每次对key进行访问时,用基于概率的对数计算器(次数和存在时间的比值)来记录访问次数,同时这个计数器会随着时间推移而减小。
  • 启用LFU算法后,可以使用热点数据分析功能。(redis-cli–hotkeys)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值