一: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 3143 游走 | 数学期望 高斯消元

    啊 我永远喜欢期望题 BZOJ 3143 游走 题意 有一个n个点m条边的无向联通图,每条边按1~m编号,从1号点出发,每次随机选择与当前点相连的一条边,走到这条边的另一个端点,一旦走到n号节点就停下 ...

  2. 【hdu4285】 circuits

    http://acm.hdu.edu.cn/showproblem.php?pid=4285 (题目链接) 题意 求不不能嵌套的回路个数为K的路径方案数. Solution 插头dp,时限卡得太紧了, ...

  3. struts2练习时犯的错误(2016年11月4日)

    1.Tomcat启动时报错 严重: 文档无效: 找不到语法. at (null:3:8) org.xml.sax.SAXParseException; systemId: file:/F:/Progr ...

  4. Kafka 接受数据并消费到hbase数据库

    一. 1.生产者 产生数据 package kafakaTohbase; import java.util.Properties; import kafka.javaapi.producer.Prod ...

  5. jquery的serializeArray、param 与serializeArray 的区别与源码解析

    jQuery.param( obj, traditional ) 为url查询或者ajax 将对象或者数组转为url参数或ajax参数,是挂在jQuery对象上的静态方法,有码有真相: var myI ...

  6. php 通过链接生成二维码,扫码支付用到

    $(".good_info").on('click',function () { var id = $(this).data('id'); var string='http://q ...

  7. Ansible12:lookup

    目录 简单说明 1.file 2.pipe 3.env 4.template 5.csvfile 6.redis_kv 7.etcd 8.password 9.dnstxt 简单说明 在通常情况下,所 ...

  8. Linux下查看系统版本和make版本

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/versionz [root@localhost ~]# cat /proc/versionLinux version 2.6.1 ...

  9. bzoj千题计划161:bzoj1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果

    http://www.lydsy.com/JudgeOnline/problem.php?id=1589 tarjan缩环后拓扑排序上DP #include<cstdio> #includ ...

  10. android 水波纹效果实现

    1.在drawable文件下,新建seletor,作为button的背景,这里我用的是两个圆角的shape <?xml version="1.0" encoding=&quo ...