Redis学习11——Redis事务
2017-10-03 23:07
197 查看
Redis学习11Redis事务
一Redis事务特征
二命令解释
三正常执行事务
1 普通方式的获取于设置
2 事务方式操作
四回滚测试
五失败测试
请求提供任何服务,从而保证了事物屮的所有命令被原子的执行
2、 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败, 其后的命令仍然会
被继续执行。
3、 我们可以通过 MULTI 命令开启一个事务,有关系型数据库开发经验的人可以将其理解为”BEGIN
TRANSACTION”语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过
执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作。这两个Redis命令可被视为等同于关
系型数据库中的COMMIT/ROLLBACK语句。
4、 在事务开启之前,如果客户端与服务器之间出现通讯故陣并导致网络断开,其后所有待执行的
语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行EXEC命令之启,那么
该事务中的所有命令都会被服务器执行。
5、 当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作在本次调
用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故阵导致的宕机,那么此
时也许只有部分数据被写入到磁盘,而另外一部分数据却己经丢失。 Redis服务器会在重新启动
时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错误提示。
此时,我们就要充分利用Redis 工具包中提供的redis-check-aof工具,该工具可以帮助我们定位
到数据不一致的错误,并将己经写入的部分数据进行回滚。修复之后我们就可以再次重新启动
Redis服务器了
exec: 提交事务,类似于关系型数据库中的:commit
discard:事务回滚,类似于关系型数据库中的:rollback
2.在窗口2,num累加1,并获取数据
3.在窗口1,获取数据
2.在窗口2,获取数据
3.在窗口1 ,提交事务
4.在窗口2,再次获取数据
创建一个 user 存储的值为 “wiming”
获取 user
开始事务
给 user 设置新数据
回滚事务
再次获取数据(user)
设置num为10
获取num
开始事务
正常累加
错误累加
正常累加
提交事务
获取数据
一Redis事务特征
二命令解释
三正常执行事务
1 普通方式的获取于设置
2 事务方式操作
四回滚测试
五失败测试
Redis学习11——Redis事务
一、Redis事务特征
1.在事务中的所有命令都将会被串行化的顺序执行.事务执行期间, Redis不会再为其它客户端的请求提供任何服务,从而保证了事物屮的所有命令被原子的执行
2、 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败, 其后的命令仍然会
被继续执行。
3、 我们可以通过 MULTI 命令开启一个事务,有关系型数据库开发经验的人可以将其理解为”BEGIN
TRANSACTION”语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过
执行EXEC/DISCARD命令来提交/回滚该事务内的所有操作。这两个Redis命令可被视为等同于关
系型数据库中的COMMIT/ROLLBACK语句。
4、 在事务开启之前,如果客户端与服务器之间出现通讯故陣并导致网络断开,其后所有待执行的
语句都将不会被服务器执行。然而如果网络中断事件是发生在客户端执行EXEC命令之启,那么
该事务中的所有命令都会被服务器执行。
5、 当使用Append-Only模式时,Redis会通过调用系统函数write将该事务内的所有写操作在本次调
用中全部写入磁盘。然而如果在写入的过程中出现系统崩溃,如电源故阵导致的宕机,那么此
时也许只有部分数据被写入到磁盘,而另外一部分数据却己经丢失。 Redis服务器会在重新启动
时执行一系列必要的一致性检测,一旦发现类似问题,就会立即退出并给出相应的错误提示。
此时,我们就要充分利用Redis 工具包中提供的redis-check-aof工具,该工具可以帮助我们定位
到数据不一致的错误,并将己经写入的部分数据进行回滚。修复之后我们就可以再次重新启动
Redis服务器了
二、命令解释
multi :开启事务用于标记事务的开始,其后面执行的命令都将被存入到命令队列,直到指定 exec时,这些命令才会被原子的执行,类似于关系型数据库中的: begin transactionexec: 提交事务,类似于关系型数据库中的:commit
discard:事务回滚,类似于关系型数据库中的:rollback
三、正常执行事务
3.1 普通方式的获取于设置
1.在窗口1,设置num,并获取数据127.0.0.1:6379> set num 1 OK 127.0.0.1:6379> get num "1"
2.在窗口2,num累加1,并获取数据
127.0.0.1:6379> incr num (integer) 2 127.0.0.1:6379> get num "2"
3.在窗口1,获取数据
127.0.0.1:6379> get num "2"
3.2 事务方式操作
1.在窗口1,开始事务,多次累加数据127.0.0.1:6379> multi OK 127.0.0.1:6379> incr num QUEUED 127.0.0.1:6379> incr num QUEUED 127.0.0.1:6379> incr num QUEUED
2.在窗口2,获取数据
127.0.0.1:6379> get num "2"
3.在窗口1 ,提交事务
127.0.0.1:6379> exec
4.在窗口2,再次获取数据
127.0.0.1:6379> get num "5"
四、回滚测试
步骤:创建一个 user 存储的值为 “wiming”
获取 user
开始事务
给 user 设置新数据
回滚事务
再次获取数据(user)
127.0.0.1:6379> set user wiming OK 127.0.0.1:6379> get user "wiming" 127.0.0.1:6379> multi OK 127.0.0.1:6379> set user qiwenming QUEUED 127.0.0.1:6379> discard OK 127.0.0.1:6379> get user "wiming"
五、失败测试
步骤:设置num为10
获取num
开始事务
正常累加
错误累加
正常累加
提交事务
获取数据
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incrby num 6
QUEUED
127.0.0.1:6379> incrby num wiming
QUEUED
127.0.0.1:6379> incrby num 7
QUEUED
127.0.0.1:6379> exec1) (integer) 16
2) (error) ERR value is not an integer or out of range
3) (integer) 23
127.0.0.1:6379> get num
"23"
相关文章推荐
- Redis学习——Redis事务
- Redis学习——Redis事务
- Python自动化开发学习11-Redis
- 结合redis设计与实现的redis源码学习-11-数据库(server.h/redisDb,notify.c)
- JAVAWEB开发之redis学习(八)——redis事务
- Redis系列学习笔记12 事务
- cocos2d-x实例学习(11)之CCCatmullRomTo&CCCatmullRomBy
- 学习Redis从这里开始
- Redis 学习笔记(十一)基数统计(HyperLogLog)
- Jedis学习使用(java操作redis)
- redis 学习笔记(3)-master/slave(主/从模式)
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- Redis学习笔记1 事务
- Redis学习9之在discuz的文件里加入redis数据库计访问数
- Redis学习教程之命令的执行过程详解
- Redis学习总结
- SpringBoot 学习记录(七): Redis
- 【Linux学习】 Redis常用的一些指令
- Spring学习11-Spring使用proxool连接池 管理数据源
- redis培训学习总结