一: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. Mininet 系列实验(五)

    实验内容 实现一个单个交换机的拓扑,添加一个交换机,和N个主机到网络中.交换机和主机之间的每个链路能够设置带宽.延迟时间.以及丢包率.创建一个包含一个交换机和四个主机的网络,使用iperf测试主机之间 ...

  2. python模块之 paramiko

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个s ...

  3. Android L开发指南

    导语:Android下一代操作系统“ L”对开发者意味着什么?ART模式能否让应用的体验超越苹果? 刚刚结束的 Google I/O大会上,Android下一代操作系统“ L”带来不少惊喜.新系统运行 ...

  4. sql数据库设计学习---数据库设计规范化的五个要求

    http://blog.csdn.net/taijianyu/article/details/5945490 一:表中应该避免可为空的列: 二:表不应该有重复的值或者列: 三: 表中记录应该有一个唯一 ...

  5. 勉励自己--淡定的CrazyDog

    明天就要靠六级,今天只是背了一篇作文,做了两篇阅读,收获很小啊,但是要求自己一定要写,博客,我就把自己背的作文模板写成日记好了(纯手打) Relationship Between Major and ...

  6. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  7. Java入门:基础算法之计算园的面积

    本部分内容介绍如何使用Java计算圆的周长和面积.分两种方法来实现: 1)圆的半径由用户输入 2)圆的半径由程序指定 代码1: /** * @作者: 理工云课堂 * @描述: 用户输入圆的半径,程序结 ...

  8. 设置CMD默认路径

    用CMD每一次都得切换路径,很麻烦. 所以,需要设置一下CMD默认路径: 1.打开注册表编辑器(WIN+R打开运行.输入regedit) 2.定位到: “HKEY_CURRENT_USER\Softw ...

  9. 科学计算三维可视化---TraitsUI(View定义界面)

    View定义界面 使用View来自定义界面 class ModelManager(HasTraits): model_name = Str category = Str model_file = St ...

  10. 使用前端组件化思想修改todolist

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...