Redis的事务机制与持久化机制知识点

1.事务机制

mysql事务的四大特性:原子性,一致性,隔离性,持久性

1.2事务介绍

Redis是支持事务的

含义命令
开启事务multi
添加sadd
执行事务exec
取消事务discard
获取正确指令数据get name
获取数据get lesson
监视某个key的值是否发生了变化watch key
取消监视unwatch

1.3事务处理机制

Redis对于命令执行错误的处理有两种方式:

1.语法错误(编译):所有命令都执行不成功

2.执行错误(运行):正确的命令执行成功,错误的命令执行失败

mysql的事务可以保证所有的命令同时成功或者同时失败,但redis会区分语法错误还是执行错误

1.3.1Redis事务的注意事项与局限性
1.无回滚机制
2.事务内的命令不支持条件判断
3.性能影响(尽量将事务中的命令数量控制在一个合理的范围)
4.ACID特性
特性注意事项
原子性Redis事务具有一定的原子性,但不支持回滚
一致性Redis事务不能完全保证一致性
隔离性Redis事务保证隔离性,因为是单线程所以执行事务时禁止其他客户端发送命令给Redis服务器
持久性Redis事务不保证持久性,持久化机制都是异步刷盘,存在数据丢失风险

2.持久化机制

2.1 场景分析

Redis将数据保存在内存中一但服务器宕机重启内存中数据就可能会丢失,为让Redis进行数据恢复,提供了持久化机制,将内存中数据保存到磁盘避免数据丢失

Redis提供了两种持久化机制:RDB、AOF,可以选择一种或者一起使用

2.2 RDB快照

RDB是Redis默认存储方式,给予快照思想。触发后会将内存数据进行快照保存在磁盘上,经过压缩的二进制文件,后缀名为.rdb

2.2.1 RDB触发条件

默认触发机制:

命令含义
save 3600 1一小时内至少1个键被更改则进行快照
save 300 100五分钟内至少100个键被更改则进行快照
save 60 10000一分钟内至少10000个键被更改则进行快照
2.2.2 手动执行save和bgsave命令

在Redis客户端执行save或bgsave命令手动触发RDB快照

1.进入客户端:./redis-cli

2.执行save命令(同步执行): save

执行bgsave命令(异步子线程):bgsave

2.2.3 save和bgsave的区别:

SAVE 保存是阻塞主进程,客户端无法连接redis,等SAVE完成后,主进程才开始工作,客户端可以连接

BGSAVE 是fork一个save的子进程,在执行save过程中,不影响主进程,客户端可以正常链接redis,等子进程fork执行save完成后,通知主进程,子进程关闭。综上所述很明显BGSAVE方式比较适合线上的维护操作。

2.2.4Bgsave的优缺点

优点:基于二进制文件完成数据备份,占用空间少,便于文件传输

可自定义规则,根据Redis繁忙状态进行数据备份

缺点:无法保证数据完整性,会丢失最后一次快照后的所有数据

执行save阻塞Redis用户线程,影响系统吞吐率

2.3AOF

数据丢失持久化的另一种解决方式

AOF方式需要手动开启,修改redis.conf

AOF触发的三种方式:always,everysec,no

2.3.1触发配置

通过redis.conf进行配置

当前aof文件大小超过上一次aof文件大小的百分之多少时进行重写
auto-aof-rewrite-percentage 100
​
文件大小小于64mb的时候,不需要进行优化
auto-aof-rewrite-min-size 64mb

2.4RDB与AOF对比

RDBAOF
默认开启手动开启
性能高性能低
安全性低安全性高
优先级低优先级高
存储某个是开的数据快照存储写命令
配置触发状态会丢失最后一次快照以后更改的所有数据默认使用everysec,每秒保存一次,最多丢失两秒以内的数据。

3.高可用主从复制

步骤:

1.配置一主两从创建三个配置文件:

vim redis6379.conf

在三个配置文件中输入内容

appendonly配置为no 
port 6379                         设置端口为6379
pidfile /var/run/redis_6379.conf   写入pid的文件位置
​
dbfilename dump6379.rdb           设置redis数据库文件名字
​
可使用:%s/6379/6380将端口号全部修改

2.复制其他两个从机配置

cp redis6379.conf redis6380.conf
cp redis6379.conf redis6381.conf

3.启动三台服务器

./redis-server redis6379.conf
./redis-server redis6380.conf
./redis-server redis6381.conf

查看redis启动进程

ps -ef|grep redis

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值