zoukankan      html  css  js  c++  java
  • Redis订阅和发布模式和Redis事务

    -------------------Redis订阅和发布模式-------------------
    1、概念
        Redis 发布订阅(pub/sub)是一种消息通信模式:
        发送者(pub)发送消息,
        订阅者(sub)接收消息。
        Redis 客户端可以订阅任意数量的频道。
     
    2、subscribe channel:订阅个指定频道的信息
     
    3、publish channel message:将信息message 发送到指定的频道channel
     
    4、应用场景
        1、今日头条订阅号、微信订阅公众号、新浪微博关注、邮件订阅系统
        2、即使通信系统
        3、群聊部落系统(微信群)
     
    5、测试实践:微信班级群 class:20170101
        1、学生C订阅一个主题叫 :class:20170101
            >subscribe class:20170101
        2、学生A针对class:20170101主体发送消息,那么所有订阅该主题的用户都能够接收到该数据。
            >publish class:20170101 "hello world! I am A"
        3、学生B针对class:20170101主体发送消息,那么所有订阅该主题的用户都能够接收到该数据。
            >publish class:20170101 "hello world! I am B"
        展示学生C接受到的AB同学发送过来的消息信息
            1) "subscribe"
            2) "class:20170101"
            3) (integer) 1
            1) "message"
            2) "class:20170101"
            3) "hello world! I am A"
            1) "message"
            2) "class:20170101"
            3) "hello word! I am B"
     
    -------------------Redis事务-------------------
    1、概念:
        redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
     
    2、事务的两种属性
        1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序的执行。事务在执行的过程中,不会被其他客户端发送过来的命令请求所打断。
        2、redis事务是原子。原子意味着要么所有的命令都执行,要么都不执行。
     
    3、事务从开始到执行经历的三个阶段
        1、开始事务:multi
        >multi --- OK
     
        2、命令入队
        >set "strOne" "hello"
        >set "strTwo" "world"
        >set "strThree" "!"
     
        3、执行事务:exec
        >exec
     
    4、事务执行是常见错误:
        1、语法错误:语法错误指命令不存在或者命令参数的个数不对。
        2、运行错误:运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前Redis是无法发现的,所以在事务里这样的命令是会被Redis接受并执行的。如果事务里的一条命令出现了运行错误,事务里其他的命令依然会继续执行。
            >multi
            >set key 1
            >sadd key 2
            >set key 3
            >exec
                1) OK
                2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
                3) OK
            >get key --- "3"
     
    5、watch命令:可以监控一个或多个键,一旦其中一个键被修改(或删除),之后的事务就不会执行。监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)
        >set key 1 --- OK
        >watch key --- OK
        >set key 2 --- OK
        >multi --- OK
        >set key 3 --- QUEUED
        >exec --- (nil)
        >get key --- "2"
     
        def incr($key):
            watch $key
            $value =GET $key
            if not $value:
                $value = 0
            $value = $value + 1
        MULTI
        SET $key,$value
            resule = EXEC
        return resule[0]
     
  • 相关阅读:
    BaseServlet的编写
    两个线程交替打印1-100
    java集合中的HashMap源码分析
    mybatis一级缓存与二级缓存的原理
    mybatis的执行流程
    spring IOC的理解
    一文彻底搞懂面试中常问的各种“锁”
    Dubbo相关的基础
    Servlet基础
    文件传输基础
  • 原文地址:https://www.cnblogs.com/qingtianyu2015/p/5968403.html
Copyright © 2011-2022 走看看