C#中StackExchange.Redis整数类型键的订阅与设置方法咨询
嘿,我来帮你理清这两个StackExchange.Redis的使用问题,结合你给出的代码示例一步步说明:
问题1:如何按照整数类型的键进行订阅操作?
首先得明确一点:Redis中的所有键本质上都是字符串类型,所谓“整数类型的键”其实是把整数转成字符串形式存储的键。根据你的需求场景,分两种情况处理:
场景1:订阅整数键的变更通知(比如键被修改、删除)
如果想监听某个整数键的状态变化,需要先开启Redis的键空间通知功能,再通过ISubscriber监听对应频道:
- 先开启Redis的键空间通知:可以修改
redis.conf配置文件设置notify-keyspace-events KEA,也可以临时通过Redis命令CONFIG SET notify-keyspace-events KEA开启。 - 用StackExchange.Redis实现订阅的示例代码:
ConfigurationOptions co = new ConfigurationOptions(); co.EndPoints.Add("xxx:6379"); ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(co); ISubscriber subscriber = redis.GetSubscriber(); // 要监听的整数键,先转成字符串格式 int targetIntKey = 100; // 构造键空间通知频道,格式为__keyspace@数据库编号__:键名 string keySpaceChannel = $"__keyspace@{db.Database}__:{targetIntKey.ToString()}"; // 订阅频道并处理事件 subscriber.Subscribe(keySpaceChannel, (channel, message) => { Console.WriteLine($"整数键{targetIntKey}发生了{message}操作"); });
场景2:订阅以整数命名的消息频道
如果只是想接收发送到整数命名频道的消息,直接把整数转成字符串作为频道名订阅即可:
ISubscriber subscriber = redis.GetSubscriber(); int channelNumber = 2024; subscriber.Subscribe(channelNumber.ToString(), (channel, message) => { Console.WriteLine($"收到来自频道{channelNumber}的消息:{message}"); });
问题2:设置键值对时,如何用整数类型作为键(最终存储为字符串类型)?
操作很简单,只需要把整数类型的值转换成字符串即可——StackExchange.Redis的StringSet方法接受字符串类型的键参数,你可以直接调用ToString()方法转换整数,或者直接用字符串形式的整数传入。基于你给出的代码修改示例:
ConfigurationOptions co = new ConfigurationOptions(); co.EndPoints.Add("xxx:6379"); ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(co); IDatabase db = redis.GetDatabase(); string value = "abcdefg"; // 将整数转成字符串作为键传入 int intKey = 1001; db.StringSet(intKey.ToString(), value); // 获取值时同样把整数转成字符串 var value2 = db.StringGet(intKey.ToString()); this.Text = value2;
你也可以直接写db.StringSet("1001", value),效果完全一致,因为Redis最终存储的键都是字符串格式。
内容的提问来源于stack exchange,提问作者TesterG
相关产品推荐
相关产品推荐

