• 缓存数据库-redis数据类型和操作(sorted set)


    一:Redis 有序集合(sorted set)

      Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

      不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

      有序集合的成员是唯一的,但分数(score)却可以重复。

      集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

    二:有序集合常用操作

      1)zadd(name, *args, **kwargs) 在name对应的有序集合中添加元素

      2)zcard(name) 获取name对应的有序集合元素的数量

      3)zcount(name, min, max)  获取name对应的有序集合中分数 在 [min,max] 之间的个数

      4)zincrby(name, value, amount)  自增name对应的有序集合的 name 对应的分数

      5)zrange( name, start, end, desc=False, withscores=False, score_cast_func=float) 按照索引范围获取name对应的有序集合的元素

        # 参数:

        # name,redis的name
        # start,有序集合索引起始位置(非分数)
        # end,有序集合索引结束位置(非分数)
        # desc,排序规则,默认按照分数从小到大排序
        # withscores,是否获取元素的分数,默认只获取元素的值
        # score_cast_func,对分数进行数据转换的函数
      6)zrank(name, value) 获取某个值在 name对应的有序集合中的排行(从 0 开始)
      7)zrem(name, values) 删除name对应的有序集合中值是values的成员
      9)zremrangebyrank(name, min, max)  根据排行范围删除
      10)zremrangebyscore(name, min, max)   根据分数范围删除
      11)zscore(name, value)  获取name对应有序集合中 value 对应的分数
      12)zinterstore(dest, keys, aggregate=None) 获取两个有序集合的交集,如果遇到相同值不同分数,则按照aggregate进行操作
      13)zunionstore(dest, keys, aggregate=None) 获取两个有序集合的并集,如果遇到相同值不同分数,则按照aggregate进行操作
      14)zscan(name, cursor=0, match=None, count=None, score_cast_func=float) 
     

    三:示例

    [BEGIN] 2017/7/31 21:03:29
    127.0.0.1:6379[3]> zadd z1 1 s1   增加一个有序集合
    (integer) 1
    127.0.0.1:6379[3]> zadd z1 2 s2
    (integer) 1
    127.0.0.1:6379[3]> zadd z1 2 s3
    (integer) 1
    127.0.0.1:6379[3]> ZCARD z1   有序集合的元素个数
    (integer) 3
    127.0.0.1:6379[3]> zadd z1 11 s4
    (integer) 1
    127.0.0.1:6379[3]> ZCOUNT zi 1 2  统计分数据在1,2中元素个数
    (integer) 0
    127.0.0.1:6379[3]> ZCOUNT zi 1 3
    (integer) 0
    127.0.0.1:6379[3]> ZCOUNT z1 1 3
    (integer) 3
    127.0.0.1:6379[3]> ZINCRBY z1 1 3
    "1"
    127.0.0.1:6379[3]> ZRANGE z1 1 3 查看有序集合
    1) "s1"
    2) "s2"
    3) "s3"
    127.0.0.1:6379[3]> ZRANGE z1 1 3 withscores 查看有序集合带分数
    1) "s1"
    2) "1"
    3) "s2"
    4) "2"
    5) "s3"
    6) "2"
    127.0.0.1:6379[3]> ZINCRBY z1 3 3  有序集合自增
    "4"
    127.0.0.1:6379[3]> ZRANGE z1 1 3 withscores
    1) "s2"
    2) "2"
    3) "s3"
    4) "2"
    5) "3"
    6) "4"
    127.0.0.1:6379[3]> ZRANK z1 s3  根据有序集合中的顺序查看
    (integer) 2
    127.0.0.1:6379[3]> zrem z1 s3
    (integer) 1
    127.0.0.1:6379[3]> ZRANGE z1 1 3 withscores 根据有序集合分数查看
    1) "s2"
    2) "2"
    3) "3"
    4) "4"
    5) "s4"
    6) "11"
    127.0.0.1:6379[3]> ZREMRANGEBYRANK z1 3 4  根据有序集合顺序删除
    (integer) 1
    127.0.0.1:6379[3]> ZRANGE z1 1 3 withscores
    1) "s2"
    2) "2"
    3) "3"
    4) "4" 
    127.0.0.1:6379[3]> ZREMRANGEBYSCORE z1 1 3 根据有序集合分数删除
    (integer) 2
    127.0.0.1:6379[3]> ZRANGE z1 1 3 withscores
    (empty list or set)
    127.0.0.1:6379[3]> zadd z1 2 s1
    (integer) 1
    127.0.0.1:6379[3]> zadd z1 2 s2
    (integer) 1
    127.0.0.1:6379[3]> zadd z1 2 s3
    (integer) 1
    127.0.0.1:6379[3]> zadd z1 3 s4
    (integer) 1
    127.0.0.1:6379[3]> ZSCORE z1 s4
    "3"
    127.0.0.1:6379[3]> zadd z2 2 s1
    (integer) 1
    127.0.0.1:6379[3]> zadd z2 2 s2
    (integer) 1
    127.0.0.1:6379[3]> zadd z2 3 s2
    (integer) 0
    127.0.0.1:6379[3]> zadd z2 3 s5
    (integer) 1
    
    127.0.0.1:6379[3]> help zinterstore
    
      ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
      summary: Intersect multiple sorted sets and store the resulting sorted set in a new key
      since: 2.0.0
      group: sorted_set
    
    127.0.0.1:6379[3]> ZINTERSTORE z3 1 z1
    (integer) 5
    127.0.0.1:6379[3]> ZINTERSTORE z3 2 z1 z2 两个有序集合的交集,并保存到z3
    (integer) 2
    127.0.0.1:6379[3]> ZRANGE z3 0 7
    1) "s1"
    2) "s2"
    127.0.0.1:6379[3]> ZINTERSTORE z3 3 z1 z2
    (error) ERR syntax error
    127.0.0.1:6379[3]> ZUNIONSTORE z4 2 z1 z2 两个有序集合的并集,并保存到z4
    (integer) 6
    127.0.0.1:6379[3]> ZRANGE z3 0 7
    1) "s1"
    2) "s2"
    127.0.0.1:6379[3]> ZRANGE z4 0 7
    1) "s3"
    2) "s4"
    3) "s5"
    4) "3"
    5) "s1"
    6) "s2"
    
    [END] 2017/7/31 21:15:37
  • 相关阅读:
    【树】树的前序遍历(非递归)
    表单提交中的input、button、submit的区别
    利用setTimeout来实现setInterval
    Jquery动画操作的stop()函数
    Javascript实现简单的双向绑定
    Javascript观察者模式
    CSS reset
    【CSS3】background-origin和background-clip的区别
    :before和::before的区别
    JS实现瀑布流
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7258610.html
走看看 - 开发者的网上家园