python对redis的常用操作 下 (无序集合,有序集合)
无序集合:
首先介绍增加,删除和获得所有元素的方法。我将会用第二部分来讨论集合的特殊操作:
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的常用操作 下 (无序集合,有序集合)的更多相关文章
- python对redis的常用操作 上 (对列表、字符串、散列结构操作)
这里的一切讨论均基于python的redis-py库. 安装使用: pip install redis 然后去获取一个redis客户端: redis_conn = redis.Redis(host=R ...
- python之redis和memcache操作
Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...
- python数据类型:字典dict常用操作
字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的. Value:任意数据(int,str,boo ...
- Python 基礎 - 字符串常用操作
字符串常用操作 今天就介紹一下常用的字符串操作,都是以 Python3撰寫的 首字母變大寫 #!/usr/bin/env python3 # -*- coding:utf-8 -*- name = & ...
- Python列表类型及常用操作
Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...
- 超详细!盘点Python中字符串的常用操作
在Python中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a = 'abc' b= "abc" c = '''abc''' d = " ...
- python基础之列表常用操作及知识点小结
列表(list) List(列表) 是 Python 中使用最频繁的数据类型.列表可以完成大多数集合类的数据结构实现.它支持字符,数字,字符串甚至可以包含列表(所谓嵌套).列表用[ ]标识,是pyth ...
- 『无为则无心』Python序列 — 18、Python列表概念及常用操作API
目录 1.列表的概念 (1)列表的定义 (2)列表的应用场景 (3)列表的定义格式 2.列表的常用操作 (1)列表的查找 1)通过下标查找 2)通过方法查找 3)判断是否存在 (2)列表的增加 @1. ...
- python 异常处理、文件常用操作
异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm
随机推荐
- 手把手教你Chrome浏览器安装Postman(含下载云盘链接)(转)
文章转自http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...
- vue filters过滤器
vue filters过滤器 vue.js允许我们自定义过滤器,可被使用于一些常见的文本格式化,过滤器可以用在两个地方,双花括号插值和 v-bind表达式.最常见的就是双花括号插值. 比如如下代码:{ ...
- 上传文件,不依赖 Jquery flash 插件,用到HTML5 input 新属性实现过滤文件格式、同时上传多个文件
1.样式 2.js 3.后台处理 4.效果图 一.样式 <style> .divUpload { position: relative; } .divUploadFirst { width ...
- [02] URL和HttpURLConnection类
1.URL的概念 统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址. URL的基本格式是: <METHOD&g ...
- WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型
首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html ...
- 汇编 SETG,SETL ,SETGE, SETLE指令
一.SETG SETZ(SETE) //取ZF标志位值 放到寄存器里 SETNZ(SETNE) == > SETG //setg cl//ZF==0 并 SF==0 并 OF==0 时 cl=1 ...
- Part 5:Django测试--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 本节将简要介绍Django的自动化测试相关内 ...
- js值----你所不知道的JavaScript系列(6)
1.数组 在 JavaScript 中,数组可以容纳任何类型的值,可以是字符串.数字.对象(object),甚至是其他数组(多维数组就是通过这种方式来实现的) .----<你所不知道的JavaS ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)
文章目录 前情概要 路由.action的扫描.发现.注册搞定之后,后来我发现在我们的action里面获取参数往往都是通过request对象来一个一个获取.同样的一行代码我们不厌其烦的重复写了无数次.遂 ...
- Ionic 2 中生命周期的命名改变及说明
原文发表于我的技术博客 本文简要整理了在 Ionic 2 的版本中生命周期命名的改变,以及各个事件的解释. 原文发表于我的技术博客 在之前的课程中讲解了 Ionic 生命周期的命名以及使用,不过在 I ...