Redis事务

一.事务的实现
三个阶段:

  1. 事务开始
  2. 命令入队
  3. 事务执行
    在这里插入图片描述
    事务队列:
    以下为例
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set "name" "cc"
QUEUED
127.0.0.1:6379> set "sex" "man"
QUEUED
127.0.0.1:6379> get "name"
QUEUED
127.0.0.1:6379> get "sex"
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "cc"
4) "man"
  • 最先入队的set命令被放在事务队列的索引0位置
  • 第二入队的set命令被放置在事务队列索引1位置
  • 第三入队的get命令被放置到事务队列的2位置
  • 第四入队的get命令被放置在事务队列的3位置

二.WATCH乐观锁实现

WATCH命令是一个乐观锁,它可以在EXEC命令执行之前,监视任意数量的数据库键,并在EXEC命令执行时,监控被监视的键最少有一个被修改了,如果是,服务器则拒绝执行事务,并向客户端返回代表执行失败的空回复。

三.事务的ACID特性

  • 原子性:事务队列中的命令要么全部执行,要么全部不执行。但是Redis不支持事务的回滚,即使在整个队列执行过程中出现错误,整个事务也会执行下去,知道将队列中的所有命令都执行完成。
  • 一致性:即在事务执行前数据库是一致的,在执行后也是一致的。
  • 隔离性:即使多是事务并发的执行,各个事务之间也不会相互影响,并且在并发状态下执行事务和串行执行事务产生的结果完全相同。
  • 耐久性:当一个事务执行完毕时,执行这个事务所得的结果已经被保存到永久性储存介质中,即便事务执行完成后服务器停机,事务的执行结果任然不会丢失。

四.测试事务

命令:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set "name" "cc"
QUEUED
127.0.0.1:6379> set "sex" "man"
QUEUED
127.0.0.1:6379> get "name"
QUEUED
127.0.0.1:6379> get "sex"
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "cc"
4) "man"

当在执行multi命令后执行的命令出错,在执行exec的时候就会出错。

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SELECT "name" "ptm"
(error) ERR wrong number of arguments for 'select' command
127.0.0.1:6379> set "name" "ptm"
QUEUED
127.0.0.1:6379> get "name"
QUEUED
127.0.0.1:6379> set "author" "ps" 
QUEUED
127.0.0.1:6379> get "author"
QUEUED
127.0.0.1:6379> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值