一、SortedSet
- 在 Redis 中,Sorted Set(有序集合)是一种特殊的数据结构,它是集合(Set)的一个扩展,每个元素都与一个分数(score)相关联。这个分数用于对集合中的元素进行排序(有序集合(Sorted Set)的排名是从 0 开始的)。Sorted Set 是通过跳跃表(Skip List)实现的,这使得插入、删除和查找操作都能在对数时间内完成。
- 其结构可以理解为 key score value,score可以重复,value不可以重复。
- 当value重复的时候会自动覆盖旧的数据
127.0.0.1:6379> zadd whw 1 redis
(integer) 1
127.0.0.1:6379> zadd whw 2 redis
(integer) 0
127.0.0.1:6379> zrange whw 0 5 withscores
1) "redis"
2) "2"
- 当再插入score为1的情况,进行自动排序
127.0.0.1:6379> zadd whw 1 mysql
(integer) 1
127.0.0.1:6379> zrange whw 0 5 withscores
1) "mysql"
2) "1"
3) "redis"
4) "2"
- 当score重复的时候,在同score情况下,会默认按照字母的顺序进行排序
127.0.0.1:6379> zadd whw 2 abc
(integer) 1
127.0.0.1:6379> zrange whw 0 5 withscores
1) "mysql"
2) "1"
3) "abc"
4) "2"
5) "redis"
6) "2"
127.0.0.1:6379> zadd whw 2 bbb
(integer) 1
127.0.0.1:6379> zrange whw 0 5 withscores
1) "mysql"
2) "1"
3) "abc"
4) "2"
5) "bbb"
6) "2"
7) "redis"
8) "2"
- ZINCRBY
- ZINCRBY命令对有序集合中指定成员的分数加上增量 increment,例如这里在“mysql”score的基础上又增加了2
127.0.0.1:6379> zincrby whw 2 mysql
"3"
127.0.0.1:6379> zrange whw 0 -1 withscores
1) "abc"
2) "2"
3) "bbb"
4) "2"
5) "redis"
6) "2"
7) "mysql"
8) "3"
二、incrementScore(K key, V value, double delta)
public Double incrementScore(K key, V value, double delta) {
byte[] rawKey = this.rawKey(key);
byte[] rawValue = this.rawValue(value);
return (Double)this.execute((connection) -> {
return connection.zIncrBy(rawKey, delta, rawValue);
});
}
表示对 Redis 中有序集合(ZSET)的指定成员的分数进行增加。方法返回一个 Double 类型,表示增加分数后的新分数。
强调一点,这里的结构是 key value score,和SortedSet的ZINCRBY的结构略有差异。