Redis 事务
2018-03-29 12:17
232 查看
Redis 事务Redis 事务含义:
可以执行 一次 或 多个 命令 。(是一组命令的集合)
一个事务中的所有命令都会有序列化。(按顺序的串化执行而不会被其他命令插入,不许加塞)
如同 GIT commit 提交。
作用:
一个队列中,一次性、顺序性、排他性的执行一系列命令。
Redis 常用的命令
DISCARD 取消失误,放弃执行事务内的所有命令
EXEC 执行事务块内的命令
MULTI 标记一个事务的开始
UNWATCH 取消Watch 命令 对所有的 key 的监控
WATCH key [key...] 监视一个或多个 key, 如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务被打断。
正常执行
1.标记一个事务的开始 mluti。
2. 写入执行的语句,写入的队列(queue)中。
3.执行事务 exec
放弃事务1.标记一个事务的开始 mluti。
2.写入执行的语句,写入到队列(queue)中。
3.执行放弃事务 discard。
全体连坐1.标记一个事务的开始 mluti。
2.写入执行的语句,写入到队列(queue)中。执行事务 exec,就会报错。 当执行语句中有语法错误,就会报错。
冤头债主1.标记一个事务的开始 mluti。
2.写入执行的语句,写入到队列(queue)中。。
3.执行事务 exec。当执行的事务中,有类型错误等逻辑错误 ,只执行对的语句。
watch 监控含义:Watch指令,类似乐观锁,事务提交时。如果Key的值已被别的客户端改变,比如某个list已被别的客户端push/pop过了,整个事务队列都不会被执行
<
4000
span style="font-size:18.6667px;">
悲观锁
含义: 很悲观,每次去数据库拿数据的时候都会认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿我这个数据就会block 直到它拿到锁。
例如:传统的关系性数据库里边就用到了很多这种锁的机制。行锁
表锁
读锁
写锁
都是在操作之前先上锁。
缺点:性能下降
乐观锁含义: 对事情的发展状况表示乐观状况。
例如: 不锁整个表,既保证高并发,又不锁整张表。方法:在每天记录后面加一个字段 version (行锁)
乐观的策略:提交的版本必须大于记录当前版本才能执行更新。
CAS
Watch 操作:1.设置 收入为100 ,支出为20, 剩余为80
2.监控 收支的情况
3.如果Key的值已被别的客户端改变,比如某个list已被别的客户端push/pop过了,整个事务队列都不会被执行。
a. B 用户 操作balance
b. A 用户操作 监控的事务操作没有被执行
c.小结:通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败)
d.当发生以上情况的时候,正确的操作: 先执行放弃监控 unwatch
加载 监控的对象balance
监控 ==>> 标记事务 ==>>执行语句 ==>>执行事务
可以执行 一次 或 多个 命令 。(是一组命令的集合)
一个事务中的所有命令都会有序列化。(按顺序的串化执行而不会被其他命令插入,不许加塞)
如同 GIT commit 提交。
作用:
一个队列中,一次性、顺序性、排他性的执行一系列命令。
Redis 常用的命令
DISCARD 取消失误,放弃执行事务内的所有命令
EXEC 执行事务块内的命令
MULTI 标记一个事务的开始
UNWATCH 取消Watch 命令 对所有的 key 的监控
WATCH key [key...] 监视一个或多个 key, 如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务被打断。
正常执行
1.标记一个事务的开始 mluti。
2. 写入执行的语句,写入的队列(queue)中。
3.执行事务 exec
放弃事务1.标记一个事务的开始 mluti。
2.写入执行的语句,写入到队列(queue)中。
3.执行放弃事务 discard。
全体连坐1.标记一个事务的开始 mluti。
2.写入执行的语句,写入到队列(queue)中。执行事务 exec,就会报错。 当执行语句中有语法错误,就会报错。
冤头债主1.标记一个事务的开始 mluti。
2.写入执行的语句,写入到队列(queue)中。。
3.执行事务 exec。当执行的事务中,有类型错误等逻辑错误 ,只执行对的语句。
watch 监控含义:Watch指令,类似乐观锁,事务提交时。如果Key的值已被别的客户端改变,比如某个list已被别的客户端push/pop过了,整个事务队列都不会被执行
<
4000
span style="font-size:18.6667px;">
悲观锁
含义: 很悲观,每次去数据库拿数据的时候都会认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿我这个数据就会block 直到它拿到锁。
例如:传统的关系性数据库里边就用到了很多这种锁的机制。行锁
表锁
读锁
写锁
都是在操作之前先上锁。
缺点:性能下降
乐观锁含义: 对事情的发展状况表示乐观状况。
例如: 不锁整个表,既保证高并发,又不锁整张表。方法:在每天记录后面加一个字段 version (行锁)
乐观的策略:提交的版本必须大于记录当前版本才能执行更新。
CAS
Watch 操作:1.设置 收入为100 ,支出为20, 剩余为80
2.监控 收支的情况
3.如果Key的值已被别的客户端改变,比如某个list已被别的客户端push/pop过了,整个事务队列都不会被执行。
a. B 用户 操作balance
b. A 用户操作 监控的事务操作没有被执行
c.小结:通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败)
d.当发生以上情况的时候,正确的操作: 先执行放弃监控 unwatch
加载 监控的对象balance
监控 ==>> 标记事务 ==>>执行语句 ==>>执行事务
相关文章推荐
- Redis 事务是原子性的吗
- Redis——乐观锁控制事务
- Redis事务
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
- redis的事务
- Redis安全性和事务处理
- Redis事务介绍
- Redis入门之浅谈redis事务
- Redis事务介绍
- redis学习笔记5(redis事务)
- redis--事务--底层实现
- python实现redis三种cas事务操作
- redis中的事务
- redis学习 第四章进阶----事务
- Redis学习手册(事务)
- Redis 中的事务
- Redis事务--Redis系列七
- Redis 事务
- Redis 的简单操作命令和事务简单使用
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍