-------------------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接受到的A\B同学发送过来的消息信息
        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]
 

Redis订阅和发布模式和Redis事务的更多相关文章

  1. Redis订阅与发布

    发布与订阅模型在许多编程语言中都有实现,也就是我们经常说的设计模式中的一种--观察者模式.在一些应用场合,例如发送方并不是以固定频率发送消息,如果接收方频繁去咨询发送方,这种操作无疑是很麻烦并且不友好 ...

  2. redis订阅与发布系统

    一.概述 1.redis通过publish.subscribe等命令实现了订阅与发布模式. 2.这个功能提供两种信息机制,分别是订阅/发布到频道和订阅/发布到模式. 二.频道的订阅与信息发送 1.re ...

  3. 实现一个简单的订阅与发布模式的代码块,和redux

    /** * Created by Mrzou on 2018/3/11. */ //实现简单的订阅与发布模式的代码块export function pattern() { let currentLis ...

  4. redis 订阅与发布

    PUBLISH,SUBSCRIBE,等命令实现订阅与发布 订阅/发布到频道 订阅/发布到模式   频道的订阅与信息发送   订阅subscribe,可以让客户端订阅任意数量的频道, 每当有新信息发送到 ...

  5. redis订阅与发布(把redis作为消息中间件)

    订阅频道127.0.0.1:6379> subscribe chat1Reading messages... (press Ctrl-C to quit)1) "subscribe&q ...

  6. Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端

    本文是使用 golang 实现 redis 系列的第六篇, 将介绍如何实现一个 Pipeline 模式的 Redis 客户端. 本文的完整代码在Github:Godis/redis/client 通常 ...

  7. Redis通过PUBLISH / SUBSCRIBE 等命令实现了订阅与发布模式

    # 切换目录 [root@localhost /]# cd /opt/redis-4.0.10 # 启动客户端 -p 指定端口 [root@localhost ~]# redis-cli -p 638 ...

  8. PHP swoole实现redis订阅和发布

    前戏:实现用户下单,服务器通知后台接收订单...类似美团外卖 1.首先要实现一个订阅程序 $result = $client->connect('127.0.0.1', 6379, functi ...

  9. 上下文管理、线程池、redis订阅和发布

    一:上下文管理: 对于一些对象在使用之后,需要关闭操作的.比如说:socket.mysql数据库连接.文件句柄等. 都可以用上下文来管理. 语法结构: Typical usage: @contextm ...

随机推荐

  1. vue使用之剑走偏锋——菜单组件篇

    背景 习惯了这样的写法了,上来先来一个背景,交待一下事情的起因.事情的起因很简单,用惯了mvc框架,想来一发前后端完全分离的框架试试.选用的人员和技术是这样子的,让原本做java的web开发的人员使用 ...

  2. ServletAPI的获取

    Action中获取ServletAPI,三种方式 (1)通过ActionContext获取(只是获取并操作了域空间,并不是真正的ServletAPI对象) 在struts2框架中,通过Action的执 ...

  3. 浅谈js中如何动态添加表头/表列/表格内容

    我想很多童鞋用js动态向表格中添加数据很熟悉,而且也觉得非常简单!是的,对于写页面的童鞋来说,最喜欢写查询的页面了,动态向表格绑定数据.用for循环就可以轻松搞定. 如果我们的业务需求有所变化,可能我 ...

  4. HTML5使用Canvas来绘制图形

    一.Canvas标签: 1.HTML5<canvas>元素用于图形的绘制,通过脚本(通常是javascript)来完成. 2.<canvas>标签只是图形容器,必须使用脚本来绘 ...

  5. Java基础之类和对象、单例模式、继承

    Java类和对象 一般的类只能是public或者default的,若是public的,类名必须和文件名一样.一般在一个文件只写一个类,故这个类一般是加上public. 内部类还可以是private和p ...

  6. excel下拉级联的做法

    前面的文章讲了,excel下拉级联,重新选第一个下拉,后面那个值怎么清除.今天我讲下excel利用宏解决整个表格的级联下拉问题. 我遇到的情况是两个下垃圾连,第一个医生类别,第二个医生职称,而且我是要 ...

  7. Java中synchronized和Lock的区别

    synchronized和Lock的区别synchronize锁对象可以是任意对象,由于监视器方法必须要拥有锁对象那么任意对象都可以调用的方法所以将其抽取到Object类中去定义监视器方法这样锁对象和 ...

  8. shell 脚本编程之特殊变量

    $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...

  9. EXT.NET高效开发(二)——封装函数

    在上一篇<EXT.NET高效开发(一)--概述>中,大致的介绍了一下EXT.NET.那么本篇就要继续完成未完成的事业了.说到高效开发,那就是八仙过海各显神通.比如使用代码生成器,这点大家可 ...

  10. S7-300之间的PROFIBUS-DP主从通信

    一.PROFIBUS-DP简介 1.由来 2..总线连接器 二.系统结构示例 三.组态过程示例 三,DP网络组态 1.新建一个项目和两个300站点如下 2.组态从站DP网络 1)点击常规中的属性 2) ...