Redis当中的事务

数据库当中为了保证数据的一致性,都会提供一定的事务操作,对于缓存数据当然也不例外,会提供一定的事务操作,来保证整个操作过程的原子性。

redis当中提供的事务性,可以从以下几个命令了解

Multi 用来开启一个事务,类似于数据库当中begin

EXEC 执行一个事务,类似于数据库当中的commit

DISCARD 放弃一个事务的执行,类似于rollback

WATCH 监听特定的key, 这个类似于java当中的CAS,从检测那刻起,如果对应的key的value发生了变化,就放弃修改。也可以理解为数据库当中的乐观锁。

接下来我们相信介绍下这几个命令。

在使用multi进行开始事务之后,后面的指令都会被缓存起来,如果返回queued,表示数据被成功保存到了缓存当中,在执行exec时,会将缓存起来的命令作为一个事务进行执行。

    注意:如果开启了持久化,事务当中的命令在执行成功之后,就会通过write命令一次性写入到磁盘当中,如果在写入过程中出现了断电等故障问题,就会只有一部分命令被写入了,这时候就会出现AOF不完整的情况,这个时候可以通过redis-check-aof工具修复这个问题,将不完整的命令移除,保证数据的完整性。

如果在执行exec之前有指令错误,这并不影响其他指令的执行。

Watch指令

127.0.0.1:6379> set age 23

OK

127.0.0.1:6379> watch age //开始监视age

OK

127.0.0.1:6379> set age 24 //在EXEC之前,age的值被修改了

OK

127.0.0.1:6379> multi

OK

127.0.0.1:6379> set age 25

QUEUED

127.0.0.1:6379> get age

QUEUED

127.0.0.1:6379> exec //触发EXEC

(nil) //事务无法被执行

在watch指令之后进行了key的修改,然后再开启事务,最终执行,这种情况下,是会提示执行失败的,

注意:禁止在multi和exec指令之间执行watch指令,watch指令只能在multi指令之前使用。

DISCARD指令

> get books
(nil)
> multi  //开始事务
OK
> incr books
QUEUED
> incr books
QUEUED
> discard //放弃事务内的修改指令
OK
> get books
(nil)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值