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

标签 redis jedis

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

最佳答案

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

第一种方法是使用 Redis 的 keyspace notifications .使用以下配置指令配置 Redis 以生成列表事件:

CONFIG SET notify-keyspace-events El

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

SUBSCRIBE __keyevent@0__:mylist

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

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

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

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

关于redis - 我可以在 Redis 的 lpush 操作上监听事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27753140/

相关文章:

laravel - 在 Laravel 中获取两个 Redis 集的交集

java - 如何使用 Java 客户端从 Redis 中读取 erlang 术语?

scala - Redis:何时使用 JedisPool 而不是 Cache.get

java - Jedis 扫描未找到任何 key

redis - Jedis 存储困惑,这个问题是 Redis 还是 Jedis?

Redis - 创建广告堆栈并为广告转换进行循环

pyspark - Pyspark + Redis远程服务器

java - Java 中 Redis 的监听器

redis - Redis 是如何工作的?

javascript - Redis:添加到数组一定长度?