无序集合:

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

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. leetcode 51. N-Queens 、52. N-Queens II

    51. N-Queens 使用isValid判断当前的位置是否合法 每次遍历一行,使用queenCol记录之前行的存储位置,一方面是用于判断合法,另一方面可以根据存储结果输出最终的结果 class S ...

  2. AliOS-Things Visual studio code helloworld 入门

    配置环境的时候别忘了下载:GCC工具链:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads AliOS Thing ...

  3. lesson3:小程序

    问题: 一·设计思想 创建一个静态变量,利用构造函数在每次创建对象时运行的机制,计算创建对象个数. 二·程序流程图 三·程序源代码 public class Test9{ public static ...

  4. Topographic ICA as a Model of Natural Image Statistics(作为自然图像统计模型的拓扑独立成分分析)

    其实topographic independent component analysis 早在1999年由ICA的发明人等人就提出了,所以不算是个新技术,ICA是在1982年首先在一个神经生理学的背景 ...

  5. pycharm 取消 rebase 操作

    291/5000 取消rebase操作从主菜单中选择VCS | Git | 中止重新定位(abrot rebasing)如果rebase在两个或多个本地存储库中启动,则会显示“中止重新排序”对话框. ...

  6. HNOI2014做题笔记

    HNOI2014 世界树(虚树.倍增) \(\sum M \leq 3 \times 10^5\)虚树没得跑 对于所有重要点和它们的\(LCA\)建立虚树,然后计算出每一个虚树上的点被哪个重要点控制. ...

  7. jQuery webcam plugin

    jQuery webcam plugin The jQuery webcam plugin is a transparent layer to communicate with a camera di ...

  8. 【php增删改查实例】第十七节 - 用户登录(1)

    新建一个login文件,里面存放的就是用户登录的模块. <html> <head> <meta charset="utf-8"> <sty ...

  9. Jvm 10 升级笔记

    移除了 JPEGCodec https://www.cnblogs.com/liaolongjun/p/6878359.html

  10. margin不生效问题

    问题机型 魅族M353 Android 5.0.1 问题描述 设置了margin-top: 15px; 但是在该机型上不生效 解决方案 使用padding 替代 margin