五 Redis的发布订阅
5.1 介绍
Redis通过publish、subscribe和psubcribe、Unsubscribe和punsubscribe等命令实现发布、订阅和退订功能。这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播、实时提醒等。 角色: -- 客户端通过PUBLISH命令向通道发送信息的时候,我们称这个客户端为发布者(publisher)。 -- 客户端使用SUBSCRIBE或者PSUBSCRIBE命令接收信息的时候,我们称这个客户端为订阅者(subscriber)。 为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了 channel (频道)作为两者的中介 —— 发布者将信息直接发布给 channel ,而 channel 负责将信息发送给适当的订阅者,发布者和订阅者之间没有相互关系,也不知道对方的存在 注意:由于redis订阅发布功能不做消息缓存,所以需要订阅者先订阅通道,然后发布者再发布数据。
5.2 subscribe的原理
开启第一个客户端,运行订阅者程序:
subscribe news food
开启第二个客户端,运行订阅者程序:
subscribe news food
开启第三个客户端,运行发布者程序:
publish food apple
5.3 psubscribe的原理
p:是pattern的意思, 指的是模式订阅,比如 订阅k*,n*, ?o*这样的通道。
开启第一个客户端: psubscribe n* f* 开启第二个客户端: subscribe n* k* 开启第三个客户端: publish food apple 第一个客户端可以收到
5.4 知识扩展:
字典 ①基础知识点: --Dictionary是存储键和值的集合; --Dictionary是无序的,键Key是唯一的; --通过Key找到对应的Value,游戏中通常通过使用ID,ID关联用户的所有信息,从而找到玩家的其他游戏信息。 ②优点:查找速度快,能根据键快速查找值。 ③缺点:内存开销大。 链表 ①优点: --链表在内存存储的排序上不连续,而是靠各对象的指针所决定,添加元素和删除元素比数组优势; --链表适合在需要有序的排序的情境下增加新的元素,增加新的元素只是若干元素的指向发生变化。 ②缺点:其在内存空间中不一定连续排列,访问时无法利用下标,必须从头结点开始,逐次遍历下一个节点直到寻找到目标,不适用于需要快速访问对象的情况。