美文网首页
Redis学习笔记(二)

Redis学习笔记(二)

作者: aimenike | 来源:发表于2018-12-15 15:19 被阅读0次

一、redis事物及锁应用

MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:

1、Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。2、在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行,这种特性保证了其原子性。

127.0.0.1:6379> multi          
OK                             
127.0.0.1:6379> decrby wang 100
QUEUED                         
127.0.0.1:6379> incrby zhao 100
QUEUED                         
127.0.0.1:6379> exec           
1) (integer) 600               
2) (integer) 300               
  • Redis事物不支持回滚, 对于队列中的指令,只能检查语法错误(语法错误则直接取消执行),不能发现逻辑错误,并且对于之前的指令,执行了不能回滚,虽然在multi中可以执行discard清空执行队列,但是一旦执行,不支持回滚操作。
    PS:由于Redis官网无法正常访问,只能使用其他汉化手册(redis参考手册

Redis使用的是乐观锁,只是监视事物变化,一旦变化,则视为异常,阻止事物的执行

//使用锁正常时
127.0.0.1:6379> set ticket 1   
OK                             
127.0.0.1:6379> watch ticket   
OK                             
127.0.0.1:6379> multi          
OK                             
127.0.0.1:6379> decr ticket    
QUEUED                         
127.0.0.1:6379> decrby lisi 100
QUEUED                         
127.0.0.1:6379> exec           
1) (integer) 0                 
2) (integer) 400
//使用锁异常时
127.0.0.1:6379> set ticket 1   
OK                             
127.0.0.1:6379> watch ticket   
OK                             
127.0.0.1:6379> multi          
OK                             
127.0.0.1:6379> decr ticket    
QUEUED                         
127.0.0.1:6379> decrby lisi 100
QUEUED                         
127.0.0.1:6379> exec           
(nil)                                                               

二、消息发布与订阅

  • 消息发布
127.0.0.1:6379> publish news "Hello World!"
(integer) 0                                
127.0.0.1:6379> publish news "Hello World!"
(integer) 1                                
  • 监听(监听端口可以加入通配符等,来一次监听多个端口)
127.0.0.1:6379> subscribe news            
Reading messages... (press Ctrl-C to quit)
1) "subscribe"                            
2) "news"                                 
3) (integer) 1                            
1) "message"                              
2) "news"                                 
3) "Hello World!"                         
  • 使用pubsub channels命令可以查看有哪些端口被监听

相关文章

网友评论

      本文标题:Redis学习笔记(二)

      本文链接:https://www.haomeiwen.com/subject/vypghqtx.html