ZSet是在Set的基础上,每个元素关联了一个值,分数score
比如zset新增三个元素,从结果可以看出,zset类型在数据写入redis的时候,是按照score的大小来从小到大进行排序储存的;比如这里保存一个timestamp能够使用在很多场景
redis:0>zadd testZSet 3 three "1" redis:0>zadd testZSet 1 one "1" redis:0>zadd testZSet 2 two "1" redis:0>zadd testZSet 2 two "0" redis:0>zrange testZSet 0 -1 withscores "ERR syntax error" redis:0>zrange testZSet 0 -1 WITHSCORES 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3"
同时score是可以修改的
redis:0>zadd testZSet 22 two "0" 环境redis:0>zrange testZSet 0 -1 WITHSCORES 1) "one" 2) "1" 3) "three" 4) "3" 5) "two" 6) "22"
调用Redisemplate
public class RedisTest extends BaseTest {
@Resource
private RedisTemplate redisTemplate;
@Test(description = "有序集合")
public void redisZSetTest() {
redisTemplate.opsForZSet().add("testZSet", "three", 3);
redisTemplate.opsForZSet().add("testZSet", "one", 1);
redisTemplate.opsForZSet().add("testZSet", "two", 2);
redisTemplate.opsForZSet().add("testZSet", "one", 1);
Assert.assertEquals(redisTemplate.opsForZSet().size("testZSet"), Long.valueOf(3));
List<String> stringList = new ArrayList<>();
stringList.add("one");
stringList.add("two");
stringList.add("three");
Assert.assertEquals(redisTemplate.opsForZSet().range("testZSet", 0, -1),
stringList);
}
}
默认按score排序