-------------------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. [HNOI2006]超级英雄 网络流+二分版

    刚学网络流的我这里有一道非常好的"网络流练手题"------[HNOI2006]超级英雄. 记得很久以前真的有这个节目来着,还是大兵主持的. 其实这是一道匈牙利板子大水题,但对于我 ...

  2. JavaBean+servlet+jsp——>对数据进行增删改查

    1.开始页面(查询数据) <%@page import="com.zdsofe.work.Student"%> <%@page import="java ...

  3. java中权限修饰符protected的使用注意事项

    java中四种权限修饰符, 平时编码中最常用的其实public和private, 虽然对protected的概念一直都知道, 但真正使用时才发现有些偏差. protected表示被其修饰的成员可以被本 ...

  4. Dubbo应用文档

    Dubbo应用文档 Dubbo简介 概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架, ...

  5. (6)UIView常见属性二

    例如创建一个view视图,view是最纯洁的控制,必须得指定它的位置,而不像其他的控件像UISwitch默认都有一个位置 在viewDidLoad方法中打印它的位置: 将控件放入一个视图中,只需移动白 ...

  6. c++ 智能指针【转载】

    zero 坐在餐桌前,机械的重复“夹菜 -> 咀嚼 -> 吞咽”的动作序列,脸上用无形的大字写着:我心不在焉.在他的对面坐着 Solmyr ,慢条斯理的吃着他那份午餐,维持着他一贯很有修养 ...

  7. MongoDB安全策略

    一,修改启动端口 mongo的默认端口为27017 如果启用的是27017端口并且在公网上很容易被人攻击,所以第一点我们要修改端口 sudo ./mongod --dbpath=/data/db -- ...

  8. 学习java线程学习笔记

    线程:代码执行的一个分支          主要作用是提高了效率,cpu能同时执行多个部分的代码.      线程的创建:两种方式      a.继承于thread类,重写run方法.      b. ...

  9. 【head first python】2.共享你的代码 函数模块

    #coding:utf-8 #注释代码! #添加两个注释,一个描述模块,一个描述函数 '''这是nester.py模块,提供了一个名为print_lol()的函数, 这个函数的作用是打印列表,其中可能 ...

  10. nodejs 文件读取一行

    作者QQ:1095737364    QQ群:123300273     欢迎加入!   废话没有,直接上代码: app.get('/company', function (req, res, nex ...