美文网首页
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