gpt4 book ai didi

redis - 有没有更好的方法来实现 redis "rpushnx"功能?

转载 作者:IT王子 更新时间:2023-10-29 06:11:03 24 4
gpt4 key购买 nike

我想实现一个“rpushnx”函数:

  1. 如果 key 存在,什么也不做。否则
  2. 将字符串插入列表。
  3. 它是一个多线程环境。

目前的代码片段是这样的:

    if (!redis.exists(db, key)) {
synchronized (MyClass.class) {
if (!redis.exists(db, key)) redisClient.rpush(db, key, list);
}
}

但我认为这有点微不足道。

有没有更好的方法来完成它?

非常感谢。

最佳答案

是的,有更好的方法。如果您有一个单一的多线程应用程序服务器,您的解决方案可能会起作用,但它不会在具有多个应用程序服务器的分布式系统中起作用。另外,当 key 不存在时,它需要 3 次往返。

利用 Lua 脚本可以更好地为您服务。 Redis 始终以原子方式执行 Lua 脚本。

例如:

eval "if redis.call( 'EXISTS', KEYS[1] ) == 0 then redis.call( 'RPUSH', KEYS[1], unpack(ARGV) ) end" 1 mykey val1 val2 val3 val4

关于redis - 有没有更好的方法来实现 redis "rpushnx"功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43406985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com