无序集合:

首先介绍增加,删除和获得所有元素的方法。我将会用第二部分来讨论集合的特殊操作:

In [136]: x.sadd("challenge", 1,2,3,4,5,6,7,5,4,4,3,4,2)
7 In [138]: x.smembers("challenge")
set(['', '', '', '', '', '', '']) In [139]: x.srem("challenge", 1, 3)
2 In [140]: x.smembers("challenge")
set(['', '', '', '', ''])

上面依次是增加一个集合键challenge并且给它同时赋予多个值,

然后使用smembers方法查看集合中元素

移除键里面的1和3两个元素吗操作成功两个元素返回2

再次使用smembers确认。

然后我们来讨论下集合元素特有的几个方法,求交集,差集以及并集:

# 差集的计算使用a-b然后除掉a中有b的部分 最后输出a
In [143]: x.smembers("clip")
set(['', '', '']) In [144]: x.smembers("challenge")
set(['', '', '', '', '']) In [145]: x.sdiff("clip", "challenge")
set(['', '']) # 交集
In [146]: x.sinter("clip", "challenge")
set(['']) # 并集
In [147]: x.sunion("clip", "challenge")
set(['', '', '', '', '', '', ''])

下面再讨论几个常用的方法:

# 计算集合数量
In [149]: x.smembers("clip")
set(['', '', '']) In [150]: x.scard("clip")
3 # 随机获得集合中的一个元素 该方法并不是很随机,取决于“桶”中元素的多少,具体了解其集合实现以及散列表
In [156]: x.srandmember("challenge")
'' In [157]: x.srandmember("challenge")
'' In [158]: x.srandmember("challenge")
'' # 随机弹出元素,弹出后不再出现在集合中

 In [159]: x.spop("challenge")
 '6'

In [160]: x.smembers("challenge")
  set(['2', '5', '4', '7'])

有序集合类型:

有序集合类型又点特别,所以我摘抄了一些《redis入门指南第二版》里面的介绍:

“在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是它们的分数却可以相同。

有序集合类型在某些地方和列表类型有些相似。

1. 两者都是有序的。

2. 两者都可以获得某一范围的元素。

但同时两者又有比较大的区别,这使得它们的应用场景是不同的

1. 列表类型是通过链表实现的,获取靠近两端数据的速度极快,而当元素增多之后,访问中间数据的速度会变得非常慢,所以它更加适合实现如‘新鲜事’, ‘日志’ 这样很少访问中间元素的应用。

2. 有序集合类型是使用散列表和跳跃表实现的,所以及时读区位于中间位置的数据速度也非常快。

3. 列表中不能简单的调整某个元素的位置,但是有序集合可以做到(可以调整对应位置元素的分数达到效果)”

4. 有序集合要比列表更耗费内存。”

# 注意zadd python的调用方法和redis原生的不太一样,reids原生使用的是先分数后值的形式而python里面的操作正好相反。
In [166]: x.zadd("laplace", "unicorn", 88, "gundom", 87, "gunicorn", 1)
3 # 取区域范围内的值和值的分数,排序默认使用分数升序,返回的分数是浮点型
In [175]: x.zrange("laplace", 0, 20, withscores=True)
[('gunicorn', 1.0), ('gundom', 87.0), ('unicorn', 88.0)] #逆序即是zrange和zrevrange
In [178]: x.zrevrange("laplace", 0, 20, withscores=True)
[('unicorn', 88.0), ('gundom', 87.0), ('gunicorn', 1.0)] # 获取指定键的某个值的分数
In [176]: x.zscore("laplace", "unicorn")
88.0

更详细更完整的命令使用可以查看reference里面的redis-py的doc。里面有非常详细的使用方法。

Reference:

http://redis-py.readthedocs.io/en/latest/   redis-py document

《redis入门指南(第二版)》by 李子骅

python对redis的常用操作 下 (无序集合,有序集合)的更多相关文章

  1. python对redis的常用操作 上 (对列表、字符串、散列结构操作)

    这里的一切讨论均基于python的redis-py库. 安装使用: pip install redis 然后去获取一个redis客户端: redis_conn = redis.Redis(host=R ...

  2. python之redis和memcache操作

    Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...

  3. python数据类型:字典dict常用操作

    字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的. Value:任意数据(int,str,boo ...

  4. Python 基礎 - 字符串常用操作

    字符串常用操作 今天就介紹一下常用的字符串操作,都是以 Python3撰寫的 首字母變大寫 #!/usr/bin/env python3 # -*- coding:utf-8 -*- name = & ...

  5. Python列表类型及常用操作

    Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...

  6. 超详细!盘点Python中字符串的常用操作

    在Python中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a = 'abc' b= "abc" c = '''abc''' d = " ...

  7. python基础之列表常用操作及知识点小结

    列表(list) List(列表) 是 Python 中使用最频繁的数据类型.列表可以完成大多数集合类的数据结构实现.它支持字符,数字,字符串甚至可以包含列表(所谓嵌套).列表用[ ]标识,是pyth ...

  8. 『无为则无心』Python序列 — 18、Python列表概念及常用操作API

    目录 1.列表的概念 (1)列表的定义 (2)列表的应用场景 (3)列表的定义格式 2.列表的常用操作 (1)列表的查找 1)通过下标查找 2)通过方法查找 3)判断是否存在 (2)列表的增加 @1. ...

  9. python 异常处理、文件常用操作

    异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm

随机推荐

  1. FORWARD转发链的功能

    B主机开启路由转发功能,相当一台路由器,

  2. python opencv show图片,debug技巧

    debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...

  3. JavaScript高级程序设计学习(四)之引用类型(续)

    一.Date类型 其实引用类型和相关的操作方法,远远不止昨天的所说的那些,还有一部分今天继续补充. 在java中日期Date,它所属的包有sql包,也有util包.我个人比较喜欢用util包的.理由, ...

  4. Android学习之AndroidStudio新建工程报Open File报错处理

    在AndroidStudio中新建一个工程,报如下错误: 错误处理: 1.找到build.grandle(Module:app) 2.打开build.gradle(Module:app)文件如下图所示 ...

  5. http协议进阶(四)报文首部

    之前写的关于报文首部的传送门: 报文首部:http://www.cnblogs.com/imyalost/p/5708445.html 通用首部字段:http://www.cnblogs.com/im ...

  6. Twemproxy Redis 介绍与使用

    Twemproxy是一种代理分片机制,由Twitter开源.Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回.该方案很好的解决了单个Re ...

  7. HiKey软硬件开发环境及其调试

    HiKey是一款搭载华为海思麒麟620芯片,符合Linaro 96Boards标准的SBC开发板.它采用8核64位Cortex-A53处理器,主频高达1.2GHz. HiKey作为AOSP支持的一款产 ...

  8. GIT 工作区和暂存区

    工作区和暂存区 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的studygit ...

  9. [转]The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    完整错误信息: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS IS" AND ANY ...

  10. Flask系列学习

    一.Flask系列学习(基础) Flask学习-前言 Flask学习-Flask基础之WSGI Flask学习-Flask app启动过程 Flask学习-Flask app接受第一个HTTP请求 F ...