spring data redis:ZSetOperations的默认行为

时间:2016-10-23 08:32:09

标签: java spring-boot spring-data-redis

我正在尝试使用ZSetOperations来更新/查询redis中的不同排序集,但我注意到了这种行为: 我正在获取ZSetOperationsRedisTemplate的实例,如下所示:

ZSetOperations zsetOps = redisTemplate.opsForZSet();

返回单ZSetOperations。 将新数据添加到两个有序集合AB时,一切正常。

当我通过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);
}

0 个答案:

没有答案