Redis高可用高性能缓存的应用系列的第二篇,主要介绍Redis事务机制和IO多路复用、和持久化的知识点。
Redis事务机制,和Mysql有大的不同,分为4步进行执行:
(资料图片仅供参考)
1.事务提交前,先检查命令语法是否正确2.提交命令后,一定会被执行3.有命令报错也会执行完4.不能回滚Redis事务和批量操作的区别:Redis在执行exec时,命令要么执行,要么都不执行,批量操作不会检查语法。
Redis事务命令说明:
multi:告诉Redis开启一个事务(注意只是开启,而不是执行)exec: 告诉Redis开始执行事务discard:告诉Redis取消事务watch:监视某一个键值对,它的作用是在事务执行之前,如果监视的键值被修改,事务会被取消当执行multi命令后,表明Redis开启一个事务,在执行后续的命令都属于在排队中,执行exec命令时,Redis事务的命令要么全部执行,要么全不执行。
redis-cli> set name "stark"OKredis-cli> multiOKredis-cli> set name "stark张宇"QUEUEDredis-cli> set age 33QUEUEDredis-cli> exec1) OK2) OK
如果因为执行的命令语法错误,整个Redis的事务会被服务驳回,全部不执行。
redis-cli> multiOKredis-cli> set name "stark张宇"QUEUEDredis-cli> lpop "changchang" "quanquan" "xiaoshenyang"QUEUEDredis-cli> exec(error) wrong number of arguments (given 3, expected 1)
如果语法没有错误,在执行过程中数据有错误抛出,Redis也会全部执行,只要语法正确,命令都会被执行。
redis-cli> multiOKredis-cli> set name "stark张宇"QUEUEDredis-cli> lpop nameQUEUEDredis-cli> exec1) OK2) WRONGTYPE Operation against a key holding the wrong kind of value
首先要说明一点,redis采用单线程处理请求, 假设服务器是4核的CPU,只会占用一个,其他3个都不进行参与,在线程处理上是并行的。
Redis 6.0版本后对这里进行了优化,使用了I/O thread概念,Redis 6.0的主进程只做计算,不在参与读写操作,I/O thread 处理上都是并行的关系,充分利用了多核CPU的优势,节省了处理时间,提升了处理请求的性能。
Redis的数据是保存在内存中的,所以当服务器重启时会造成数据丢失,Redis提供了数据持久化方案,把数据保存到磁盘上,使用文件恢复数据,主要有3种持久化方式:
rdb : 生成某一时刻的快照,然后保存在二进制文件中aof :记录每一条命令,追加到文件中,打开可以看到具体的操作记录混合模式:它是上面两种方式的结合手动触发save ,会让Redis处于阻塞状态,直到rdb持久化完成,线上环境要谨慎使用bgsave ,它会fork出一个子进程,用来执行持久化,主进程继续响应客户端请求,它会有短暂的阻塞2.自动触发
在m秒内,执行命令最终执行的是bgsavebgsave的执行过程:1)首先,redis主进程fork出子进程,2)子进程会共享子进程的数据,并把主进程设置成read only,然后开始执行持久化的操作,当有新命令要修改数据时,Redis采用写实复制的方法来解决数据不一致的问题。
优点:
容灾性好,方便备份性能最大化,fork出一个子进程来操作,对主进程没有影响数据比较多时,相对于aof启动效率比较高缺点:
假如中间发生故障,故障期间会造成数据丢失Aof的重写策略:因为在Redis操作的过程中有很多命令都是对同一个key进行操作,会造成大量的命令重复,造成Aof文件过大,而整理出的解决方案。
手动触发,执行bgrewriteaof命令自动触发auto-aof-rewrit-precentage
:当前Aof文件大小和最后一次重写后的大小之间的比率等于或者是等于指定的增长百分比,如100是代表当前Aof文件是上次重写的两倍时候才重写的。
auto-aof-rewrit-mini-size
:当Aof文件大小大于该值时候才可能重写。
优点:数据安全,不会造成数据的丢失
缺点:比rdb重启效率低,运行效率比rdb低
Copyright © 2015-2022 东方科普网版权所有 备案号:沪ICP备2020036824号-8 联系邮箱:562 66 29@qq.com