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接受到的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]

时间: 2024-10-13 21:17:15

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

Redis订阅与发布

发布与订阅模型在许多编程语言中都有实现,也就是我们经常说的设计模式中的一种--观察者模式.在一些应用场合,例如发送方并不是以固定频率发送消息,如果接收方频繁去咨询发送方,这种操作无疑是很麻烦并且不友好的. 举个生活的例子,一个喜欢购买鲜牛奶的人,需要每天在上班的时候/下班的时候都专门去牛奶店购买鲜牛奶,但不一定每天去到那里都刚好有自己喜欢的那一种牛奶,这个时候,这个人跑老远的距离都白费了.但如果这个人去牛奶店一次性订阅了一个月的某种牛奶,那么他就不用担忧今天是否能买到鲜牛奶了,只要送奶员把牛奶送

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

/** * Created by Mrzou on 2018/3/11. */ //实现简单的订阅与发布模式的代码块export function pattern() { let currentListeners = [] function subscribe(type, listener) { if ((typeof listener !== 'function') || (typeof listener !== 'string')) { throw new Error('参数类型错误') }

redis 订阅与发布

PUBLISH,SUBSCRIBE,等命令实现订阅与发布 订阅/发布到频道 订阅/发布到模式 频道的订阅与信息发送   订阅subscribe,可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时,信息就会被发送给所有订阅指定频道的客户端: 当有新消息通过publish命令发送给频道channel1时,这个消息就会被发送给订阅它的三个客户端: 订阅频道 每个 Redis 服务器进程都维持着一个表示服务器状态的 redis.h/redisServer 结构,结构的 pubsub_ch

python实现 redis订阅与发布

订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量.订阅者只能收到自它开始订阅后发布者所发布的消息,之前发布的消息呢,就不可能收到了. 多的不说看代码!!! 面向过程的方法 #!/usr/bin/python #coding:utf-8 #服务器端 import redis r = redis.Redis(host='127.0.0.1',port='6379') #连接redis p = r

【并发】9、借助redis 实现生产消费,消息订阅发布模式队列

这个就是一个消息可以被多次消费的范例了 其实这个实现的方式可以参考我之前的设计模式,观察者模式 https://www.cnblogs.com/cutter-point/p/5249780.html 不过有一点需要注意一下啊,这个消息发布的时候,好像是不支持字节数据的,里面好像会对字节进行转换,这样的结果就是导致我最后无法吧相应的字节转换成我之前序列化的对象 不知道是不是ObjectInputStream和ObjectOutputStream实现不是很好的原因,还是什么,反正反序列化的时候,有些

Redis七(发布订阅)

发布与订阅(pub/sub) 介绍 Redis 通过 PUBLISH . SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式 订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量.订阅者只能收到自它开始订阅后发布者所发布的消息,而之前发布的消息是收不到的. 运行原理: Redis 的 SUBSCRIBE 命令可以让客户端订阅任意

redis高级命令4 持久化机制 、事务

redis的事务是支持很简单,基本没有啥用我们来看下面的列子 我们开启一个事务,在事务中执行了age 加1,set a4 ,还有对一个字符串进行加一,对字符串加1导致了事务失败,按道理incr age在事务操作中会失败,但是这里age的值已经加上了,所以redis的事务是不可靠的,当成了解 redis支持两种快照RDB内存快照和AOF日志文件 修改conf.f就可以进行持久化的配置 生成环境都不是呀快照模式,都是使用aof模式 订阅: 发布: 是redis数据可以持久化存储,即使服务重启之后,r

3台服务器Redis高可用哨兵模式

3台服务器Redis高可用哨兵模式 学习 redis 高可用 3台服务器Redis高可用哨兵模式 3.1 主redis配置 3.2 从redis配置 1. 介绍 2. redis程序安装 3. 哨兵模式配置 3.3 启动redis和哨兵 4. 总结 1. 介绍 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒(Notifi

linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能

最近使用redis的c接口--hiredis,使客户端与redis服务器通信,实现消息订阅和发布(PUB/SUB)的功能,我把遇到的一些问题和解决方法列出来供大家学习. 废话不多说,先贴代码. redis_publisher.h /************************************************************************* > File Name: redis_publisher.h > Author: chenzengba > Ma