数据库-Redis(11)

Redis事务提供了一种批量执行命令的方式,确保命令的原子性和顺序性。事务涉及multi、exec、discard、watch等命令。当开启事务后,命令会被序列化并按顺序执行。如果在事务中遇到错误,如语法错误或类型错误,Redis不会回滚,而是会继续执行剩余的命令。此外,Redis还支持基于Lua脚本的事务处理,但不提供回滚功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

51.什么是Redis事务?

52.Redis事务相关命令?

53.Redis事务的三个阶段?

54.Redis事务其他实现?

55.Redis事务中出现错误的处理?


51.什么是Redis事务?

Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:Redis事务就是一次性,顺序性,排他行的执行一个队列中的一系列命令。

52.Redis事务相关命令?

muliti,exec,discard和watch是Redis事务相关的命令。

multi:开启事务,Redis会将后续的命令逐个放入队列中,然后使用exec命令来原子化执行这个命令系列。

exec:执行事务中所有操作命令。

discard:取消事务,放弃执行事务块中的所有命令。

watch:监视一个或者多个key,如果事务在执行前,这个key(或者多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。

unwatch:取消watch对多有key的监视。

53.Redis事务的三个阶段?

Redis事务执行是三个阶段:

开启:以multi开始一个事务。

入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。

执行:由exec命令触发事务。

当一个屋客户端切换到事务状态之后,服务器会根据这个客户端发来的不同命令执行不同的操作。

如果客户端发送的命令为exec,discard,watch,multi四个命令中的一个,那么服务器立即执行这个命令。

与此相反,如果客户端发送的命令是exec,discard,watch,multi四个民工意外的其他命令,那么服务器并不立即执行这个命令,而是将这个命令放入一个事务队列里面,然后向客户端返回queued回复。

54.Redis事务其他实现?

基于Lua脚本,Redis可以保证脚本内命令一次性,按顺序地执行,其同时也不提供事务运行错误的回滚,执行过程如果部分命令运行错误,剩下的命令还是会继续运行完。

基于中间标记变量,通过另外的标记变量来标识事务是否执行完成,读取数据时先读取该标记变量判断是否事务执行完成。但这样子会需要额外写代码实现,比较繁琐。

55.Redis事务中出现错误的处理?

语法错误(编译器错误)

在开启事务后,修改k1值为11,k2值为22,但是k2语法错误,最终导致事务提交事务失败,k1,k2保留原值。

Redis类型错误(运行时错误)

在开启事务后,修改k1值为11,k2值为22,但将k2的类型作为List,在运行时检测类型错误,最终导致事务提交失败,此时事务并没有回滚,而是跳过错误命令继续执行,结果k1值改变,k2保留原值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值