一: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] // ::
127.0.0.1:[]> zadd z1 s1 增加一个有序集合
(integer)
127.0.0.1:[]> zadd z1 s2
(integer)
127.0.0.1:[]> zadd z1 s3
(integer)
127.0.0.1:[]> ZCARD z1 有序集合的元素个数
(integer)
127.0.0.1:[]> zadd z1 s4
(integer)
127.0.0.1:[]> ZCOUNT zi 统计分数据在1,2中元素个数
(integer)
127.0.0.1:[]> ZCOUNT zi
(integer)
127.0.0.1:[]> ZCOUNT z1
(integer)
127.0.0.1:[]> ZINCRBY z1
""
127.0.0.1:[]> ZRANGE z1 查看有序集合
) "s1"
) "s2"
) "s3"
127.0.0.1:[]> ZRANGE z1 withscores 查看有序集合带分数
) "s1"
) ""
) "s2"
) ""
) "s3"
) ""
127.0.0.1:[]> ZINCRBY z1 有序集合自增
""
127.0.0.1:[]> ZRANGE z1 withscores
) "s2"
) ""
) "s3"
) ""
) ""
) ""
127.0.0.1:[]> ZRANK z1 s3 根据有序集合中的顺序查看
(integer)
127.0.0.1:[]> zrem z1 s3
(integer)
127.0.0.1:[]> ZRANGE z1 withscores 根据有序集合分数查看
) "s2"
) ""
) ""
) ""
) "s4"
) ""
127.0.0.1:[]> ZREMRANGEBYRANK z1 根据有序集合顺序删除
(integer)
127.0.0.1:[]> ZRANGE z1 withscores
) "s2"
) ""
) ""
) ""
127.0.0.1:[]> ZREMRANGEBYSCORE z1 根据有序集合分数删除
(integer)
127.0.0.1:[]> ZRANGE z1 withscores
(empty list or set)
127.0.0.1:[]> zadd z1 s1
(integer)
127.0.0.1:[]> zadd z1 s2
(integer)
127.0.0.1:[]> zadd z1 s3
(integer)
127.0.0.1:[]> zadd z1 s4
(integer)
127.0.0.1:[]> ZSCORE z1 s4
""
127.0.0.1:[]> zadd z2 s1
(integer)
127.0.0.1:[]> zadd z2 s2
(integer)
127.0.0.1:[]> zadd z2 s2
(integer)
127.0.0.1:[]> zadd z2 s5
(integer) 127.0.0.1:[]> 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.
group: sorted_set 127.0.0.1:[]> ZINTERSTORE z3 z1
(integer)
127.0.0.1:[]> ZINTERSTORE z3 z1 z2 两个有序集合的交集,并保存到z3
(integer)
127.0.0.1:[]> ZRANGE z3
) "s1"
) "s2"
127.0.0.1:[]> ZINTERSTORE z3 z1 z2
(error) ERR syntax error
127.0.0.1:[]> ZUNIONSTORE z4 z1 z2 两个有序集合的并集,并保存到z4
(integer)
127.0.0.1:[]> ZRANGE z3
) "s1"
) "s2"
127.0.0.1:[]> ZRANGE z4
) "s3"
) "s4"
) "s5"
) ""
) "s1"
) "s2" [END] // ::

缓存数据库-redis数据类型和操作(sorted set)的更多相关文章

  1. 缓存数据库-redis数据类型和操作(list)

    转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...

  2. 缓存数据库-redis数据类型和操作(string)

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合) 一:String(字符串) string是redis ...

  3. 缓存数据库-redis数据类型和操作(set)

    一:Redis 集合(Set) Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复 ...

  4. 缓存数据库-redis数据类型和操作(hash)

    一:Redis 哈希(Hash) Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 ...

  5. 缓存数据库redis

    什么是Redis? Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命 ...

  6. Redis数据类型及其操作

    redis数据类型即操作 1. 字符串 set 设置字符串 格式: set key value 例子: set name kainhuck get 获取字符串的值 格式: get key 例子: ge ...

  7. Redis数据类型和操作

    <"Java技术员"成长手册>,包含框架.存储.搜索.优化.分布式等必备知识,都收集在GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎指导 Redis ...

  8. 缓存数据库-redis介绍

    一:Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的 ...

  9. python【第十一篇】消息队列RabbitMQ、缓存数据库Redis

    大纲 1.RabbitMQ 2.Redis 1.RabbitMQ消息队列 1.1 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议 ...

随机推荐

  1. bzoj 4028 : [HEOI2015]公约数数列

    之前看了好几次都没什么思路,今天下定决心把这题切了. 观察到$0-x$的gcd最多变化log次,因为它每次变化一定至少要去掉一个质因子,所以我们可以枚举gcd. 因为数据范围比较小,所以想到了分块. ...

  2. python3.6关键字总结

    模块是个好东西 import keyword # 导入关键字模块 lst = keyword.kwlist # 实例化 print(lst) # 看看有哪些玩意 print(len(lst)) # 貌 ...

  3. 【线段树】【P4198】 楼房重建

    Description 小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度.如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没 ...

  4. 团体程序设计天梯赛-练习集 L1-031. 到底是不是太胖了

    比较两个实型的数: 若两者相等,也许用a>/b会出错... 我又想到了codeforces有很多这样的坑... #include <stdio.h> #include <std ...

  5. 交互式shell脚本对话框----whiptail指令

    当你在linux环境下setup软件的时候就会有相应的对话框让你输入.虽然我们已经习惯了这种交互的方法,但是如果有一种直观的界面来输入是不是会更加友好和方便呢,在shell脚本中你可以使用-whipt ...

  6. python学习(24) 使用Xpath解析并抓取美女图片

    Xpath最初用来处理XML解析,同样适用于HTML文档处理.相比正则表达式更方便一些 Xpath基本规则 nodename 表示选取nodename 节点的所有子节点 / 表示当前节点的直接子节点 ...

  7. Python【关联接口的开发】

    import flask,time,json,hashlib,redis print("==============被调函数部分================")def my_m ...

  8. unity还原three之旋转

    http://www.360doc.com/content/16/0829/14/12282510_586760119.shtml unity使用左手坐标系,另外在做旋转的时候必须弄清楚旋转坐标轴和旋 ...

  9. 逻辑回归原理_挑战者飞船事故和乳腺癌案例_Python和R_信用评分卡(AAA推荐)

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  10. Java基础-IO流对象之File类

    Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...