面试题答案
一键面试- 使用的数据结构:
- 哈希表(Hash):用于存储每个频道及其对应的订阅者数量。在Redis中,可以使用
HSET
和HGET
等命令操作哈希表。哈希表的键为频道名称,值为该频道的订阅者数量。
- 哈希表(Hash):用于存储每个频道及其对应的订阅者数量。在Redis中,可以使用
- 相关命令:
- SUBSCRIBE:用于客户端订阅频道,每当有客户端订阅一个频道时,需要更新相应频道的订阅者数量。
- HSET:用于在哈希表中设置字段(频道名称)的值(订阅者数量)。语法为
HSET key field value
,这里key
可以是一个固定的名称,如channel_sub_count
,field
为频道名称,value
为订阅者数量。 - HGET:用于从哈希表中获取指定字段(频道名称)的值(订阅者数量)。语法为
HGET key field
。
- 大致实现步骤:
- 初始化:
- 在应用启动时,可以先创建一个哈希表用于存储频道订阅者数量。例如,使用
HSET channel_sub_count initial_key initial_value
,这里initial_key
和initial_value
可以根据实际情况初始化(也可以不初始化,在后续有订阅操作时再创建相应记录)。
- 在应用启动时,可以先创建一个哈希表用于存储频道订阅者数量。例如,使用
- 订阅处理:
- 当客户端执行
SUBSCRIBE
命令订阅频道时,服务器端捕获到这个订阅事件。 - 使用
HGET
命令获取该频道当前的订阅者数量。如果该频道不存在于哈希表中,返回值为nil
,则将数量初始化为1;如果存在,则将数量加1。 - 使用
HSET
命令更新该频道的订阅者数量到哈希表中。
- 当客户端执行
- 查询订阅者数量:
- 当需要查询某个频道的订阅者数量时,使用
HGET channel_sub_count channel_name
命令,其中channel_sub_count
是存储频道订阅者数量的哈希表键,channel_name
是要查询的频道名称,该命令会返回对应的订阅者数量。
- 当需要查询某个频道的订阅者数量时,使用
- 初始化: