redis事务(伪事务)及watch监控
redis事务(部分支持):
开启事务:MULTI
提交事务:EXEC
放弃提交:DISCARD
正常执行:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
3) "v2"
4) OK
127.0.0.1:6379>
放弃事务:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v22
QUEUED
127.0.0.1:6379> get k2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379>
全体连坐(相当于java的编译报错:全部失败或全部成功):
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> getset k3
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379>
冤头债主(运行报错):
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR k1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> EXEC
1) (error) ERR value is not an integer or out of range
2) OK
3) OK
4) OK
5) OK
127.0.0.1:6379> get k5
"v5"
127.0.0.1:6379>
watch监控(WATCH加锁,UNWATCH解除所有key的锁):和乐观锁类似,加锁后如有修改相关key,则会报异常。
了解乐观锁(提交的版本必须大于当前的版本才能执行成功):更新数据时会判断是否有人去更新这个数据,可以使用版本号等机制。乐观锁适合多读的的应用,这样可以提高吞吐量。
了解悲观锁:每次拿数据都会上锁,其他人操作数据会block直到它拿到锁。传统关系型数据库用的比较多,比如行锁、表锁、读锁、写锁…
CAS(Check And Set):
127.0.0.1:6379> set balance 1000
OK
127.0.0.1:6379> set debt 0
OK
127.0.0.1:6379> WATCH balance
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY balance 20
QUEUED
127.0.0.1:6379> INCRBY debt 20
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 980
2) (integer) 20
127.0.0.1:6379>
系列文章链接:
redis配置文件介绍
redis启动验证及必备命令
redis字符串操作
redis之List操作
redis之Set操作
redis之Hash操作
redis之Zset操作
redis事务(伪事务)及watch监控
redis之发布订阅
redis持久化
redis主从复制