具有 StackExchange.Redis 的 Redis 键空间通知用于删除操作
Redis keyspace notifications with StackExchange.Redis For Delete operation
我一直在寻找如何使用 ServiceStack.Redis 库在 Redis 上执行对密钥 space 通知的订阅以删除密钥。
检查 git-hub 和其他网站上的可用测试,我发现 IRedisSubscription 可用于订阅特定的 Redis 键事件,对于设置操作,它工作得非常好,但在删除时operation 不调用动作。
是否可以使用 ServiceStack.Redis 利用此 Redis 功能并获取删除操作事件?
在配置文件中我添加了这一行:
notify-keyspace-events KEAg
我正在使用以下代码。
var channels = new[] { "__keyevent@0__:set" , "__keyevent@0__:del" };
using (var redisConsumer = new RedisClient("localhost:6379"))
using (var subscription = redisConsumer.CreateSubscription()) {
subscription.OnMessage = onKeyChange;
subscription.SubscribeToChannelsMatching(channels );
}
从表面上看,您得到的应该是可行的。
尝试将 notify-keyspace-events
设置为 AKE
,g
是多余的,如 Notifications Config:
中所述
A Alias for g$lshztxe, so that the "AKE" string means all the
events.
尝试使用 SubscribeToChannels
而不是 SubscribeToChannelsMatching
。后者用于模式订阅。
您可以使用 redis-cli 中的 PUBSUB NUMSUB __keyevent@0__:del
命令测试您有多少订阅者。
尝试使用 redis-cli 中的 SUBSCRIBE __keyevent@0__:del
测试您的事件是否被触发。这将帮助您确定问题是出在 redis-server 上还是应用程序代码上。
如果在尝试上述方法后仍无法正常工作,请用结果更新问题。
我一直在寻找如何使用 ServiceStack.Redis 库在 Redis 上执行对密钥 space 通知的订阅以删除密钥。
检查 git-hub 和其他网站上的可用测试,我发现 IRedisSubscription 可用于订阅特定的 Redis 键事件,对于设置操作,它工作得非常好,但在删除时operation 不调用动作。
是否可以使用 ServiceStack.Redis 利用此 Redis 功能并获取删除操作事件?
在配置文件中我添加了这一行:
notify-keyspace-events KEAg
我正在使用以下代码。
var channels = new[] { "__keyevent@0__:set" , "__keyevent@0__:del" };
using (var redisConsumer = new RedisClient("localhost:6379"))
using (var subscription = redisConsumer.CreateSubscription()) {
subscription.OnMessage = onKeyChange;
subscription.SubscribeToChannelsMatching(channels );
}
从表面上看,您得到的应该是可行的。
尝试将 notify-keyspace-events
设置为 AKE
,g
是多余的,如 Notifications Config:
A Alias for g$lshztxe, so that the "AKE" string means all the events.
尝试使用 SubscribeToChannels
而不是 SubscribeToChannelsMatching
。后者用于模式订阅。
您可以使用 redis-cli 中的 PUBSUB NUMSUB __keyevent@0__:del
命令测试您有多少订阅者。
尝试使用 redis-cli 中的 SUBSCRIBE __keyevent@0__:del
测试您的事件是否被触发。这将帮助您确定问题是出在 redis-server 上还是应用程序代码上。
如果在尝试上述方法后仍无法正常工作,请用结果更新问题。