Redis之有序集合

zset为有序的(优先按score,score相同按元素字典序),自动去重的集合类型

底层结构

  • ziplist(压缩列表):当有序集合的元素个数小于zset-max-ziplist-entries配置(默认128个),同时每个元素的值都小于zset-max-ziplist-value配置(默认64字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist可以有效减少内存的使用。
  • dict(字典)和skiplist(跳跃表):当ziplist条件不满足时,有序集合会使用skiplist作为内部实现,因为此时ziplist的读写效率会下降。

与ziplist不同的是,使用两个entry表示一个元素,一个用来存值,一个存score

 示意图:

跳表(底层为链表)数据结构

   查询方法类似二分

typedef struct zset {
    dict *dict;    // 字典
    zskiplist *zsl; // 跳表
} zset;
typedef struct zskiplist {
    struct zskiplistNode *header, *tail;    // 跳表节点
    unsigned long length;  // 跳表中包含的元素
    int level;           // 最大的层高
} zskiplist;
typedef struct zskiplistNode {
    sds ele;                  // 元素
    double score;             // 分值
    struct zskiplistNode *backward;  // 尾结点
    struct zskiplistLevel {
        struct zskiplistNode *forward;
        unsigned int span;
    } level[];
} zskiplistNode;

 

 

 

应用场景

 排行榜

sorted set 类型 

 

1.zadd :添加

2.zscore: 查看某个值的分数

3.zrange : key  start end    withscores  按照分数排序

4.zrem:删除

5.zincrby key  score  value  :给某个值加分数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值