我可以在 Redis 的 lpush 操作上监听事件吗?
Can I listen event on lpush operation of Redis?
我正在为 Redis 使用 Jedis java 客户端。我的要求是,当有人将项目添加到列表时,通过 jedisClient.lpush("mylist", "this is my msg") 说 mylist,我需要得到通知。
这可能吗?
是的,可以通过以下两种方式之一实现。
第一种方法是使用 Redis 的 keyspace notifications。使用以下配置指令配置 Redis 以生成列表事件:
CONFIG SET notify-keyspace-events El
然后,订阅相关的channel/channels。如果您只想订阅 mylist
的更改,请执行:
SUBSCRIBE __keyevent@0__:mylist
或者,使用 PSUBSCRIBE 并侦听事件以匹配匹配模式的键名。
但是请注意,键空间通知不会提供实际推送的值。您可以使用 Lua 脚本作为替代方法并实施您自己的通知机制。例如,使用以下脚本将自定义消息推送并发布到自定义频道:
local l = redis.call("LPUSH", KEYS[1], ARGS[1])
redis.call("PUBLISH", "mylistnotif:" .. KEYS[1], "Pushed value " .. ARGS[1])
return l
确保 "someone" 使用该脚本进行实际的列表推送并订阅相关的 channel/channels。
我正在为 Redis 使用 Jedis java 客户端。我的要求是,当有人将项目添加到列表时,通过 jedisClient.lpush("mylist", "this is my msg") 说 mylist,我需要得到通知。 这可能吗?
是的,可以通过以下两种方式之一实现。
第一种方法是使用 Redis 的 keyspace notifications。使用以下配置指令配置 Redis 以生成列表事件:
CONFIG SET notify-keyspace-events El
然后,订阅相关的channel/channels。如果您只想订阅 mylist
的更改,请执行:
SUBSCRIBE __keyevent@0__:mylist
或者,使用 PSUBSCRIBE 并侦听事件以匹配匹配模式的键名。
但是请注意,键空间通知不会提供实际推送的值。您可以使用 Lua 脚本作为替代方法并实施您自己的通知机制。例如,使用以下脚本将自定义消息推送并发布到自定义频道:
local l = redis.call("LPUSH", KEYS[1], ARGS[1])
redis.call("PUBLISH", "mylistnotif:" .. KEYS[1], "Pushed value " .. ARGS[1])
return l
确保 "someone" 使用该脚本进行实际的列表推送并订阅相关的 channel/channels。