我一直在寻找如何使用ServiceStack.Redis库在Redis上执行密钥空间通知的订阅,以删除密钥。
检查 git-hub 和其他网站上的可用测试,我发现 IRedisSubscription 可用于订阅特定的 Redis 密钥事件,对于集合操作,它工作绝对正常,但是当涉及到删除操作时,不会调用该操作。
是否可以使用 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
是多余的,如通知配置中所述:
g$lshztxe 的别名,因此"AKE"字符串表示所有 事件。
尝试使用SubscribeToChannels
而不是SubscribeToChannelsMatching
。后者用于模式订阅。
您可以使用 redis-cli 中的PUBSUB NUMSUB __keyevent@0__:del
命令测试您有多少订阅者。
尝试测试您的事件是否由 redis-cliSUBSCRIBE __keyevent@0__:del
触发。这将帮助您确定问题出在 redis 服务器还是应用程序代码上。
如果您在尝试上述操作后无法使其正常工作,请使用结果更新问题。