RedisTemplate操作Redis数据:ZSet类型

ZSet是在Set的基础上,每个元素关联了一个值,分数score

NewImage

比如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排序

发表回复