-------------------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. Unity Shader入门教程(二)最基本的Diffuse和Normal样例

    本教程参考了<猫都能学会的Unity3dShaderLab教程.CHM>, 1.请上网搜索并下载此文件. 2.随后再下载里面提到的素材: http://vdisk.weibo.com/s/ ...

  2. 【html】 a 标签

    摘要 嗷呜,发现好多前端细节,基础不扎实啊,喵了个咪 target 属性 在制定框架中打开 <a href="a.html" target="view_frame& ...

  3. 【css】盒子模型 之 概述

    摘要 一些基本的概念以及常见使用问题 概述 BFC 是css 中布局的核心 - 盒模型,根据块级元素及行级元素可分为块级容器, 行级容器,但容器内部都遵循 BFC BFC 空间布局 备注: IE 的盒 ...

  4. Eclipse详细设置护眼背景色和字体颜色并导出

    Eclipse详细设置护眼背景色和字体颜色并导出 Eclipse是一款码农们喜闻乐见的集成开发平台,但是其默认的主题和惨白的背景色实在是太刺激眼球了.下面,将给大家详细介绍如何设置成护眼主题的方法,也 ...

  5. js实现轮播图效果(附源码)--原生js的应用

    1.js实现轮播图效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  6. 华为软件开发云对比Jenkins-JavaWeb项目持续部署方式

    一.前言:Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成和持续部署变成可能. 本文 ...

  7. 聪明的燕姿[JLOI2014]

    题目描述 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 城市中人们总是拿着号码牌 ...

  8. HTML中的target标记

    HTML:target=_blank -- 在新窗口中打开链接 _parent -- 在父窗体中打开链接 _self -- 在当前窗体打开链接,此为默认值 _top -- 在当前窗体打开链接,并替换当 ...

  9. MapReduce最大值

    package com.bw.hadoop;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import ...

  10. Oracle undo我们需要掌握什么

    <Oracle undo我们需要掌握什么> 引言:undo 是Oracle数据库的重要组件,刚入门的朋友建议要把undo的原理和机制理解明白,尤其是和redo组件的区别和联系.了解undo ...