zoukankan      html  css  js  c++  java
  • Redis中的简单事物以及消息订阅发布

    Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善

    我们接下来看一下Redis和Mysql的事物的一个对比:

      MySQL Redis
    开启 start transaction multi
    语句 普通的SQL 普通的命令
    失败 rollback 回滚 discard 取消
    成功 commit exec

    注:

    在MySQL和Redis中,如果已经成功的执行了2条语句,但到第3条语句出错

    那我们rollback后,前2条语句的影响消失,discard只是结束本次事物,但前两条语句或者说是命令的造成的影响仍然还是存在的

    接下来我们再来思考一个问题:

    我正在买票

    Ticket -1 , money -100

    而票只有1如果在我multi之后,exec之前票被别人买了---ticket变成0.

    我该如何观察这种情景,并不再提交

    悲观的想法

    世界充满危险,肯定有人和我抢给 ticket上锁只有我能操作. [悲观锁]

    乐观的想法:

    没有那么人和我抢,因此,我只需要注意,

    --有没有人更改ticket的值就可以了 [乐观锁]

    Redis的事务中,启用的是乐观锁,只负责监测key没有被改动.

     1 具体的命令----  watch命令
     2 例: 
     3 redis 127.0.0.1:6379> watch ticket
     4 OK
     5 redis 127.0.0.1:6379> multi
     6 OK
     7 redis 127.0.0.1:6379> decr ticket
     8 QUEUED
     9 redis 127.0.0.1:6379> decrby money 100
    10 QUEUED
    11 redis 127.0.0.1:6379> exec
    12 (nil)   // 返回nil,说明监视的ticket已经改变了,事务就取消了.
    13 redis 127.0.0.1:6379> get ticket
    14 "0"
    15 redis 127.0.0.1:6379> get money
    16 "200"
    17 
    18 
    19 watch key1 key2  ... keyN
    20 作用:监听key1 key2..keyN有没有变化,如果有变, 则事务取消
    21 
    22 unwatch 
    23 作用: 取消所有watch监听

    上面就是Redis的一个简单的事物,但我们如果要用事物的话,还是建议使用mysql支持的事物会好些

    我们接下来看一下消息的订阅与消息的发布:

    使用办法:
    订阅端: Subscribe 频道名称
    发布端: publish 频道名称 发布内容
    
    客户端例子:
    redis 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) "good good study"
    1) "message"
    2) "news"
    3) "day day up"
    
    服务端例子:
    redis 127.0.0.1:6379> publish news 'good good study'
    (integer) 1
    redis 127.0.0.1:6379> publish news 'day day up'
    (integer) 1

    这个也是一个特别简单但是特别实用的一个功能,我们可以使用这样的一个功能来进行聊天室的创建等等

     

  • 相关阅读:
    【题解】 P1373 小a和uim之大逃离
    题解 CF576C 【Points on Plane】
    题解 P4799 【[CEOI2015 Day2]世界冰球锦标赛】
    【题解】[JSOI2008]最大数
    题解 P3389 【【模板】高斯消元法】
    【模板】矩阵加速
    【模板】树状数组上的差分数组
    tarjan求强连通分量(模板)
    我好菜系列——map查找
    trie树的应用;
  • 原文地址:https://www.cnblogs.com/shangzekai/p/4704918.html
Copyright © 2011-2022 走看看