面试题答案
一键面试SUBSCRIBE命令工作原理
- 客户端请求:客户端向Redis服务器发送
SUBSCRIBE
命令,后面跟着一个或多个频道名称作为参数。例如:SUBSCRIBE channel1 channel2
。 - 服务器处理:Redis服务器接收到该命令后,会为该客户端创建一个订阅状态结构,记录客户端所订阅的频道信息。对于每个频道,服务器会将该客户端添加到对应频道的订阅者链表中。这样,当有新消息发布到这些频道时,服务器能够快速定位到所有订阅该频道的客户端并推送消息。
UNSUBSCRIBE命令工作原理
- 客户端请求:客户端发送
UNSUBSCRIBE
命令,同样可以携带一个或多个频道名称作为参数,如UNSUBSCRIBE channel1
。如果不携带参数,则表示退订所有已订阅的频道。 - 服务器处理:服务器收到
UNSUBSCRIBE
命令后,会从客户端的订阅状态结构中移除相应频道的订阅信息。同时,在每个频道的订阅者链表中删除该客户端。此后,当有消息发布到这些频道时,服务器不会再向该客户端推送消息。
初步实现频道订阅和退订
- 订阅频道:
在上述Python代码中,使用import redis r = redis.Redis(host='localhost', port=6379, db = 0) pubsub = r.pubsub() pubsub.subscribe('channel1')
redis - py
库,首先创建了Redis连接,然后通过pubsub
对象的subscribe
方法订阅了channel1
频道。 - 退订频道:
调用pubsub.unsubscribe('channel1')
pubsub
对象的unsubscribe
方法,并传入要退订的频道名称channel1
,即可实现退订操作。如果要退订所有频道,可以使用pubsub.unsubscribe()
,不传入频道名称参数。