zoukankan      html  css  js  c++  java
  • redis的sorted set类型

    1、简单描述

       和set类型一样,sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体。当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1),另外就是score到元素的映射是被添加到skip list,并且按照score排序,所以是有序的。添加和删除操作的开销都是O(log(n))和skip list的开销一致,redis的skip list实现用的是双向链表,这样就可以逆序从尾部读取元素。

      sorted set最经常的使用方式应该是作为索引来使用。我们可以把要排序的字段作为score存储,对象的id当元素存储。

    2、相关命令(基于4.0.1版本)

    1)zadd命令:添加元素,支持添加多个元素。如果元素存在,则修改score值。

     

    2)zincrby命令:给一个元素的score加上一个值(可以是负数/浮点数)

     

    【注意】zincrby允许加负数或浮点数。因为score是double类型。

    3)zrem命令:删除元素,支持删除多个。

    4)zrank命令:获取元素在有序集合中的排名,根据score从小到大的排名,下标从0开始。

     

    5)zrevrank命令:同zrank,只是score的排序是从大到小:

    6)zrange命令:获取指定区间(下标的区间)的元素,下标可以是负数。score是从小到大排序。

    7)zrevrange命令:同zrange命令,只是score的排序是从大到小

    8)zrangebyscore命令:获取score的值在某个区间的元素

     

    9)zcount命令:获取score值在某个区间的元素的数量。

     

    10)zcard命令:获取集合的元素的总数

    11)zscore命令:获取元素的score值。

     

    12)zremrangebyrank命令:删除排名在某个区间的元素:

    13)zremrangebyscore命令:删除score值在某个区间的元素:

    3、小结

    1)zadd命令如果元素是已经存在的,会更新score值。

    2)zrange、zrevrange的排名,最左边的下标值是0,最右边的下标值是-1

    3)zremrangebyrank或zremrangebyscore是可以删减元素,用于排行榜之类的特别适用,维护一个数量固定的有序集合。 

    4)有序集合的元素个数还是不要存储太多,否则性能不好。

  • 相关阅读:
    Service
    adb server is out of date
    Notification.Builder
    eclipse连接小米2调试程序的问题
    Date类
    this指向冒泡排序二分查找
    Dom事件键盘事件
    Dom事件键盘事件
    12.4Dom事件键盘事件
    事件对象
  • 原文地址:https://www.cnblogs.com/guangye/p/7441701.html
Copyright © 2011-2022 走看看