Loading

SpringBoot:Redis中的zset

zset被描述为有序集合,但RedisTemplate的OpsForZSet().range方法的返回值是set,那么:
这样直接查询zset返回set的操作会使得元素失去顺序吗?
先明确:Set是什么?Set一定无序吗?
Set是接口,Set接口的其中一个最常用的实现类HashSet是无序的,而Set可以做别的实现类如TreeSet,是可以保证元素有序的,但代价是查询效率做不到O(1)。
OpsForZSet().range方法的返回值是set接口,而这个接口由redis自行实现,保证元素依然有序。
我们来测试一下:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class Tests{
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void ZSetTest(){
        String key = "Test";
        redisTemplate.opsForZSet().add(key, "a", 1);
        redisTemplate.opsForZSet().add(key, "b", 2);
        redisTemplate.opsForZSet().add(key, "c", 3);
        redisTemplate.opsForZSet().add(key, "d", 4);
        redisTemplate.opsForZSet().add(key, "e", 5);
        redisTemplate.opsForZSet().add(key, "f", 6);
        Set<Character> set = redisTemplate.opsForZSet().range(key, 0, -1);
        System.out.println(set);
    }
}

Output: [a, b, c, d, e, f]
可以看到确实是有序的

posted @ 2022-05-24 11:03  吉比特  阅读(1482)  评论(0)    收藏  举报