Lettuce 在 2015 年支持 zadd 的 NX|XX|CH|INCR 选项链接。
但是我在Lettuce的包装器Spring data Redis(版本:2.1.5)中找不到任何支持这一点的东西。
DefaultZSetOperations 提供的仅有的两个 zadd 方法似乎不能让我使用 NX|XX|CH|INCR 选项:
Boolean add(K key, V value, double score);
Long add(K key, Set<TypedTuple<V>> tuples);
那么如何在 Spring data redis 上使用 Lettue 的 NX|XX|CH|INCR 选项呢?
抱歉我的英语不好,谢谢。
不完全确定这对生菜是否100%有效。对于Jedis,发现我们必须使用
redisTemplate.execute(RedisCallback)
。使用 ch
参数来指示是否有任何记录发生更改的小示例(而不是仅添加到排序集中)
redisTemplate.execute(
(RedisCallback<Long>) connection -> connection.zSetCommands().zAdd(
leaderboardKey.getBytes(StandardCharsets.UTF_8),
membersToTuples(members),
RedisZSetCommands.ZAddArgs.empty().ch()
)
)
我使用脚本
String script = "return redis.call('zadd',KEYS[1],'NX',ARGV[1],ARGV[2])";
DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>(script,Long.class);
redisTemplate.execute(redisScript, Collections.singletonList(key),String.valueOf(score),value);