我正在尝试使用ZSetOperations
来更新/查询redis中的不同排序集,但我注意到了这种行为:
我正在获取ZSetOperations
到RedisTemplate
的实例,如下所示:
ZSetOperations zsetOps = redisTemplate.opsForZSet();
返回单ZSetOperations
。
将新数据添加到两个有序集合A
和B
时,一切正常。
当我通过A
查询zsetOps
时,它会返回预期的结果,但当我重新使用zsetOps
属性查询B
时,它不返回任何内容。似乎更新的顺序具有重要性(A
已首先更新),并且zsetOps
仅绑定到一个有序集合,A
。
总而言之,redisTemplate.opsForZSet()
与redisTemplate.boundZSetOps(keyName)
类似,只不过它会自动地隐含于它更新的第一个有序集。
这是正常行为吗?
更新 以下是突出显示问题的代码示例:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private ZSetOperations zsetOps;
@PostConstruct
private void init() {
zsetOps = redisTemplate.opsForZSet();
}
public void save(Object post) {
this.redisTemplate.executePipelined((RedisCallback<Object>) connection -> {
zsetOps.add("A", post.getId(), post.getScoreA());
zsetOps.add("B", post.getId(), post.getScoreB());
});
}
// returns a Set of result
public Object findScoreA() {
zsetOps.rangeWithScores("A", start, end);
}
// returns an empty set
public Object findScoreA() {
zsetOps.rangeWithScores("B", start, end);
}