我可以在 Redis 的 lpush 操作上监听事件吗?

Bhu*_*han 2 redis jedis

我正在为 redis 使用 Jedis Java 客户端。我的要求是,当有人将项目添加到列表时,通过执行 jedisClient.lpush("mylist", "this is my msg")说mylist,我需要收到通知。这可能吗 ?

Ita*_*ber 5

是的,可以通过两种方式之一实现这一目标。

第一种方法是使用 Redis 的键空间通知。使用以下配置指令配置 Redis 以生成列表事件:

CONFIG SET notify-keyspace-events El
Run Code Online (Sandbox Code Playgroud)

然后,订阅相关频道。如果您只想订阅mylist的更改,请执行以下操作:

SUBSCRIBE __keyevent@0__:mylist
Run Code Online (Sandbox Code Playgroud)

或者,使用 PSUBSCRIBE 并侦听事件以匹配与模式匹配的键名。

但是请注意,keysapce 通知不会提供实际推送的值。您可以使用 Lua 脚本作为替代方法并实现您自己的通知机制。例如,使用以下脚本将自定义消息推送并发布到自定义频道:

local l = redis.call("LPUSH", KEYS[1], ARGS[1])
redis.call("PUBLISH", "mylistnotif:" .. KEYS[1], "Pushed value " .. ARGS[1])
return l
Run Code Online (Sandbox Code Playgroud)

确保“某人”使用该脚本进行实际的列表推送并订阅相关频道。