7、Redis-事务、持久化、内存淘汰机制和过期key处理

本文详细介绍了Redis的事务处理机制、持久化策略(RDB和AOF),以及内存淘汰机制(LRU,LFU,TTL)和过期key的处理方法。强调了在实际应用中如何平衡CPU使用和内存资源的优化策略。
摘要由CSDN通过智能技术生成

目录

一、事务

二、持久化

三、内存淘汰机制

四、过期key处理


一、事务

Redis的事务本质上就是一个批量执行命令的操作。分为三个步骤:

  • 开始事务:multi
  • 命令入队:正常输入命令即可
  • 执行事务(依次执行命令):exec

执行过程中某条命令失败,事务既不会回滚,也不会停止。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name Trxcx
QUEUED // 命令入队而不是立即被执行
127.0.0.1:6379> set age 21
QUEUED
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> incr name // 错误的命令正常入队
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) (integer) 22
4) (error) ERR value is not an integer or out of range
5) "Trxcx"
6) "22" 
// 即使中间某条命令出错,前面的命令也没有回滚,后面的命令也没有停止。
// 整个事务就是在依次执行这些命令

二、持久化

Redis会不定时地将数据持久化到硬盘中,当Redis启动时,会把硬盘中的数据加载到内存中。

Redis持久化机制共有3种:

1、RDB(Redis DataBase ):快照方式

将内存中的数据以快照的方式写入二进制文件,默认为dump.rdb【Redis安装目录下】中。触发RDB持久化的机制分为手动触发和自动触发。

  •         手动触发:

                ①使用save命令。阻塞Redis服务器直到RDB过程完成,数据较多时会长时间阻塞。

                ②使用bgsave命令。执行fork指令创建子进程实现RDB持久化。【更建议使用】

  •         自动触发:

                使用save进行配置。格式为:save m n。

                表示m秒内数据集存在n次修改则会触发bgsave。

                save 300 10:表示300秒内超过10个key被修改,则触发RDB过程进行持久化

2、AOF(Append Only File ):文件追加方式

AOF 日志是一个增量日志文件,它会记录执行的命令。因此,重启时再重新执行AOF文件中的命令,就可以达到恢复数据的目的。

Redis默认是不开启AOF的,通过修改配置文件进行配置。redis 开启AOF - 简书 (jianshu.com)

AOF共有3种配置策略,

  • appendfsync always:立即同步命令到磁盘,效率慢但保证完全持久化
  • appendfsync everysec:每秒同步一次,效率和持久化效果居中【更推荐使用】
  • appendfsync no:依赖操作系统,通常每30s同步一次

AOF Rewrite:AOF 文件记录了每个写操作的日志,以确保数据持久性。随着时间的推移,AOF 文件会不断增大。为了解决这个问题,Redis通过AOF Rewrite 操作创建一个新的 AOF 文件,其中只包含当前数据库状态的最小命令集,然后将旧的 AOF 文件替换为这个新文件。

总结:RDB持久化文件更小,启动速度更快;AOF则在持久化的效果方面更胜一筹。

3、混合持久化方式

Redis同时开启RDB和AOF,在某时刻T1进行了RDB持久化,在下一次RDB持久化(T3)之前,Redis服务器于T2时刻重启。

此时恢复数据时,T1之前的数据以 RDB 的形式写入文件的开头(全量恢复),T1到T2之间的数据则通过执行AOF文件存储的操作命令(增量恢复),以此达到速度和持久化效率的平衡。

即以 RDB 作为全量备份,AOF 作为增量备份。

4、持久化机制选择

  • 对安全性要求高:RDB+AOF
  • 可以容忍数据丢失:RDB
  • 不推荐单独AOF,可能出现bug。

关于Redis启动:

AOF和RDB同时存在时优先加载AOF;某一个存在时就加载那一个。

都不存在或加载成功时则启动成功,存在AOF或者RDB但加载失败时则启动失败。


三、内存淘汰机制

  • LRU:Least recently used。最近最少被使用到的key被淘汰。在可选的淘汰对象中,上一次使用时间距离现在最久的key被淘汰。【recently---关注时间】
  • LFU:Least Frequently Used。最不经常使用的key被淘汰。在可选的淘汰对象中,使用次数最少的key被淘汰。【Frequently ---关注使用频次】
  • TTL:设置了过期时间且快要过期的key被淘汰。
  • 随机淘汰。

四、过期key处理

  • 惰性删除:访问key时才去判断是否过期,过期则直接删除。【CPU友好,但长期不用的key会一直存在内存中,造成内存浪费】
  • 定时删除:设置定时器,到达过期时间时立即删除。【CPU不友好,需要额外维护定时器】
  • 定期删除:隔一段时间检查一次,删除过期的key。

实际使用:惰性删除+定期删除,在CPU使用和内存浪费之间取得平衡。

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值