Redis学习笔记(七)进阶之事务
来源:互联网 发布:java多线程线程池实现 编辑:程序博客网 时间:2024/06/08 10:05
1、事务
Redis中的事务(transaction)是一组命令的集合。事务和命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。
如:
redis>MULTI
ok
redis>SADD "user:1:following" 2
QUEUED
redis>SADD "user:2:followers" 1
QUEUED
redis>EXEC
- (integer) 1
- (integer) 1
错误处理:
1)语法错误
redis> MULTI
OK
redis>SET key value
QUEUED
redis>SET key
(error)ERR wrong number of arguments for 'set' command
redis>ERRORCOMMAND key
(error)ERR unkown command 'ERRORCOMMAND'
redis>EXEC
(error)EXECABORT Transaction discarded because of previous errors.
2)运行错误
redis>MULTI
OK
redis> SET key 1
QUEUED
redis> SADD key 2
QUEUED
redis> SET key 3
QUEUED
redis> EXEC
- OK
- (error) ERR Operation against a key holding the wrong kind of value
- OK
redis> GET key
"3"
Redis的事务没有回滚(rollback)功能。为此开发者必须在事务执行出错后自己收拾剩下的摊子。
WATCH命令
WATCH命令可以监控一个或多个键,一旦其中又一个键被修改(或删除),之后的事务就不会执行。监控一直持续到EXEC命令。
redis> SET key 1
OK
redis>WATCH key
OK
redis>SET key 2
OK
redis>MULTI
OK
redis>SET key 3
QUEUED
redis>EXEC
(nil)
redis> GET key
"2"
自己实现incr函数:
defincr($key)
WATCH $key
$value = GET $key
if not $value
$value = 0
$value = $value + 1
MULTI
SET $key $value
result = EXEC
return result[0]
EXEC命令返回值是多行字符串类型
执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控。
defhsetxx($key, $field, $value)
WATCH $key
$isFieldExists = HEXISTS $key,$filed
if $isFieldExists is 1
MULTI
HSET $key, $field, $value
EXEC
else
UNWATCH
return $isFieldExists
使用UNWATCH命令来保证下一个事务的执行不会受到影响。
- Redis学习笔记(七)进阶之事务
- 【Redis学习笔记(七)】 Redis中的事务
- Redis学习笔记(九)——事务进阶
- Redis学习笔记(八)进阶之生存时间
- Redis学习笔记(九)进阶之排序
- Redis学习笔记(十)进阶之消息通知
- redis学习笔记四之事务
- redis学习笔记四之事务
- 四 redis学习笔记之事务
- 四 redis学习笔记之事务
- Redis 学习笔记(七)之 有序集合
- Redis 学习笔记(七)之 有序集合
- 七 redis学习笔记之持久化
- redis学习笔记七之持久化
- redis学习笔记七之持久化
- 七redis学习笔记之持久化
- Redis学习笔记-进阶
- Redis 事务学习笔记
- git 获取远程分支
- 经验积累之C语言与汇编语言的区别
- Eclipse中jar包中文注释乱码
- Qt使用教程之创建一个基于Qt部件的应用程序(一)
- 苹果(xcode,mac等)相关快捷键整理
- Redis学习笔记(七)进阶之事务
- Spring MVC入门
- 微信开发、申请测试号
- 如何在App中实现IM功能之六快速实现群聊的高级功能——箭扣科技Arrownock
- 每日一Vim(1)——基础进阶
- 洛谷 P1330 封锁阳光大学
- 微博分享 Couldn't load weibosdkcore from loader dalvik.system
- 打造最美HTML5 3D机房(第三季,新增资产管理、动环监控等效果)
- cacls的用法