Redis入门系列之事务
2015-06-04 00:00
639 查看
摘要: 事务是指一段数据库指令要么全部完成,要么全部不执行。保持一段指令的完整性。几乎所有关系型数据库都支持事务,而nosql 很少有支持事务的,就算支持效果也很差。Redis只能算是部分支持。因为Redis不能自动rollback。
事务是指一段数据库指令要么全部完成,要么全部不执行。保持一段指令的完整性。几乎所有关系型数据库都支持事务,而nosql 很少有支持事务的,就算支持效果也很差。Redis只能算是部分支持。因为Redis不能自动rollback。
一.Redis中执行事务
1.1在Redis中事务开启指令是multi,提交事务指令是exec
1.2当事务执行过程中出现异常的时候,Redis会继续执行下面的指令
上面的一段事务命令可以看出来,第四条指令执行失败,但是Redis还是会执行第五条指令。所以不支持回滚的事务很危险的,很显然Redis不能用于对数据正确性一致性要求高的地方,如金融,财务。
二.Redis中watch命令
如果一段事务在操作的过程中,不允许一个key被其他事务操作。因为会出现脏数据。
watch的作用就是监视一个key,如果其发生改变,那么后面的multi exec里面的就会执行失败。
可以看到在watch了name之后,事务中只要有操作name的命令,整个事务都不会执行。watch只能在同一个客户端中有效。
unwatch可以取消监控。
三.设置key的超时时间
expire name 900 设置key的超时时间单位为秒。
ttl name 查看key还剩多少存在时间
需要注意的是key经过修改之后,超时时间需要重新设置。
事务是指一段数据库指令要么全部完成,要么全部不执行。保持一段指令的完整性。几乎所有关系型数据库都支持事务,而nosql 很少有支持事务的,就算支持效果也很差。Redis只能算是部分支持。因为Redis不能自动rollback。
一.Redis中执行事务
1.1在Redis中事务开启指令是multi,提交事务指令是exec
localhost:6379> multi OK localhost:6379> set name a QUEUED localhost:6379> set name b QUEUED localhost:6379> set name d QUEUED localhost:6379> exec 1) OK 2) OK 3) OK
1.2当事务执行过程中出现异常的时候,Redis会继续执行下面的指令
localhost:6379> multi OK localhost:6379> set name b QUEUED localhost:6379> set name c QUEUED localhost:6379> set name d QUEUED localhost:6379> incr name QUEUED localhost:6379> set name e QUEUED localhost:6379> exec 1) OK 2) OK 3) OK 4) (error) ERR value is not an integer or out of range 5) OK localhost:6379> get name "e"
上面的一段事务命令可以看出来,第四条指令执行失败,但是Redis还是会执行第五条指令。所以不支持回滚的事务很危险的,很显然Redis不能用于对数据正确性一致性要求高的地方,如金融,财务。
二.Redis中watch命令
如果一段事务在操作的过程中,不允许一个key被其他事务操作。因为会出现脏数据。
watch的作用就是监视一个key,如果其发生改变,那么后面的multi exec里面的就会执行失败。
localhost:6379> watch name OK localhost:6379> set name a OK localhost:6379> multi OK localhost:6379> set name a QUEUED localhost:6379> exec (nil)
可以看到在watch了name之后,事务中只要有操作name的命令,整个事务都不会执行。watch只能在同一个客户端中有效。
unwatch可以取消监控。
三.设置key的超时时间
localhost:6379> set name Tom OK localhost:6379> expire name 900 (integer) 1 localhost:6379> ttl name (integer) 897
expire name 900 设置key的超时时间单位为秒。
ttl name 查看key还剩多少存在时间
需要注意的是key经过修改之后,超时时间需要重新设置。
localhost:6379> expire name 900 (integer) 1 localhost:6379> ttl name (integer) 897 localhost:6379> ttl name (integer) 787 localhost:6379> persist name (integer) 1 localhost:6379> ttl name (integer) -1
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 实战Memcached缓存系统
- PropertyChangeListener简单理解
- redis安装问题小结
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序