Redis之【假事务】
2019-10-30 10:43
197 查看
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
常用命令
- redis事务的命令:multi/exec/discard multi 指示事务的开始,exec 指示事务的执行,discard 指示事务的丢弃
- 所有的指令在 exec 之前不执行,而是缓存在服务器的一个事务队列中,服务器一旦收到 exec 指令,才开执行整个事务队列,执行完毕后一次性返回所有指令的运行结果
Redis事务的原子性
- 什么是原子性?简单的来说事务的原子性就是要么全部成功,要么全部失败,写个简单的例子来证明redis事务是否具有原子性。
- 上面的例子可以看出,当我们执行incr name的时候出现了错误,但是get name 和 get age 还是成功了。证明了 redis的事务并不具有原子性,而是仅仅满足了事务的隔离性。隔离性中的串行化---当前事务有着不被其他事务打扰的权利。
- 当我们使用redis的原子性时,通常都会与管道pipeline一起用,可以减少IO交互的次数。
watch
- 考虑到一个业务场景,Redis 存储了我们的账户余额数据,它是一个整数。现在有两个并发的客户端要对账户余额进行修改操作,这个修改不是一个简单的 incrby 指令,而是要对余额乘以一个倍数。Redis 可没有提供 multiplyby 这样的指令。我们需要先取出余额然后在内存里乘以倍数,再将结果写回 Redis。
- Redis 提供了这种 watch 的机制,它就是一种乐观锁。watch 会在事务开始之前盯住 1 个或多个关键变量,当事务执行时,也就是服务器收到了 exec 指令要顺序执行缓存的事务队列时,Redis 会检查关键变量自 watch 之后,是否被修改了 (包括当前事务所在的客户端)。如果关键变量被人动过了,exec 指令就会返回 null 回复告知客户端事务执行失败
相关文章推荐
- 【Redis源码剖析】 - Redis之事务的实现原理
- redis事务及锁应用
- PHP使用Redis的Transaction(事务)命令
- Redis基础学习--Redis 事务(watch命令)、生存时间、排序、消息通知("发布/订阅"模式)、管道、节省空间
- Redis入门系列之事务
- Spring Redis 事务Multi Exec Watch
- Redis的事务和主从复制入门
- Redis基础之事务
- Vertx的Redis Client进行事务处理
- Redis学习手册(事务)
- 【Redis学习笔记(七)】 Redis中的事务
- Nosql数据库——redis(六)事务和持久化
- redis中的事务、lua脚本和管道的使用场景
- Redis入门之浅谈redis事务
- Redis 中的事务
- redis--事务--底层实现
- Redis 事务
- redis事务处理抢购简单代码(已验证)
- Redis客户端Jedis的几种调用方式---事务、管道、分布式
- redis的事务