sorted set hashset

redis 127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES

1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

当数据较少时,sorted set是用一个ziplist来实现,插入时插入两个数据项:数据在前,score在后,查找时顺序查找

当数据多的时候,sorted set由zset实现,即由一个dict+一个skiplist来实现。 dict用来查询数据到分数的对应关系,而skiplist用来根据分数查询数据(可能是范围查找)

那么什么时候开始切换实现方式呢? 基于如下两个配置:两个条件满足一个就会切换zset

zset-max-ziplist-entries 128
zset-max-ziplist-value 64