无序集合:

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

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. checkbox选中并通过ajax传数组到后台接收

    这次讲的是通过复选框,选中,点击提交,并将值chuan到后台controller.这个应用是比较广的,什么批量修改,批量添加,授权管理等等,都用到这个.其实这个还是挺简单的,并没有想象中的那么难,但我 ...

  2. Python基础(2)——列表、字典、数据运算

    1.列表 #创建列表 name_list = ['alex', 'seven', 'eric'] #或 name_list = list(['alex', 'seven', 'eric']) #访问列 ...

  3. mysql基础讲解

  4. Git使用—第二讲

    前面我们学习了Git最基本的用法,包括安装Git.创建代码仓库,以及提交本地代码.下面我们将学习Git更多的使用技巧,在开始之前,我们先给一个项目创建代码仓库,这里选择在ProviderTest项目中 ...

  5. java 迭代器遍历List Set Map

    Iterator接口: 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现Iterator接口的对象 Iterator对象称作为迭代器,用以方便的对容器内元素的遍历 ...

  6. SkylineGlobe6.5遍历信息树节点方法

    //------------------- //searchGeometries function searchGeometries2(parentNode, callbackFunc) { SGWo ...

  7. golang 常用包安装

    常用到的: go get -v github.com/nsf/gocode go get -v github.com/rogpeppe/godef go get -v golang.org/x/too ...

  8. php利用自定义key,对数据加解密的方法

    客户端和服务端通信时,有个场景很常见,通过一个id作为url参数来回传递.假设现在业务上只有这个id标识,那么需要稍微安全一点的通信,对这个id进行加密传输,到服务端再进行解密.这里需要一个服务端进行 ...

  9. UVA10559&POJ1390 Blocks 区间DP

    题目传送门:http://poj.org/problem?id=1390 题意:给出一个长为$N$的串,可以每次消除颜色相同的一段并获得其长度平方的分数,求最大分数.数据组数$\leq 15$,$N ...

  10. (转)Ubuntu无法找到add-apt-repository问题的解决方法

    原文 网上查了一下资料,原来是需要 python-software-properties 于是 apt-get install python-software-properties 除此之外还要安装 ...