1、redis 基本操作命令

  • Set 操作

    • Set 集合就是不允许重复的列表
    • 无序集合

    • sadd(name,values)  给 name 对应的集合中添加 1 个或多个元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("Animal","cat") # 给 Animal 集合中添加 1 个元素
print(re.smembers("Animal"))
re.sadd("Animal","dog","pig") # 给 Animal 集合中添加多个元素
print(re.smembers("Animal")) # 结果如下
{'cat'}
{'pig', 'dog', 'cat'}
    • smembers(name)  获取 name 对应的集合的所有成员
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal")) # 获取 Animal 对应的值 # 结果如下
{'cat', 'dog', 'pig'}
    • srandmember(name,numbers)  从 name 对应的集合中随机获取 numbers 个元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.srandmember("Animal",2)) # 结果如下
['dog', 'pig']
    • scard(name)  获取 name 对应的集合中的元素个数
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal")) # 获取 Animal 对应的值
print(re.scard("Animal")) # 获取 Animal 对应的值的数量 # 结果如下
{'pig', 'cat', 'dog'}
3
    • sdiff(keys,*args)  在第一个 name 对应的集合中且不在其他 name 对应的集合的元素集合
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")
print(re.sdiff("set_name","set_name1","set_name2")) # 输出存在 set_name 中但是不存在 set_name1 和 set_name2 中的元素 # 结果如下
{'aa'}
    • sinter(keys,*args)  获取多个 name 对应集合的交集
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd") print(re.sinter("set_name","set_name1","set_name2")) # 输出 set_name,set_name1 和 set_name2 的交集 # 结果如下
{'bb'}
    • sunion(keys,*args)  获取多个 name 对应的集合的并集
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")
print(re.sunion("set_name","set_name1","set_name2")) # 获取 set_name,set_name1,set_name2 的并集 # 结果如下
{'bb', 'cc', 'aa', 'dd'}
    • sismember(name,value)检查 value 是否是 name 对应的集合内的元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.sismember("Animal","cat")) # 判断 cat 存在于集合 Animal 中 # 结果如下
True
    • smove(src,dst,value)将元素 value 从 src 集合中移动到 dst 集合中
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.smove("set_name1","set_name","cc") # 将 set_name1 中的 cc 移动到 set_name 中
    • spop(name)  从集合的右侧移除一个元素,并将其返回
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
print(re.spop("Animal")) # 移除某个值(无序删除)
print(re.smembers("Animal")) # 结果如下
{'dog', 'cat', 'pig'}
cat
{'dog', 'pig'}
    • srem(name, values)  指定删除 name 集合中的元素 values
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
re.srem("Animal","cat") # 指定删除 Animal 集合中的 cat 元素
print(re.smembers("Animal")) # 结果如下
{'dog', 'cat', 'pig'}
{'dog', 'pig'}
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
re.srem("Animal","cat","pig") # 指定删除 Animal 集合中的 cat 和 pig 元素
print(re.smembers("Animal")) # 结果如下
{'pig', 'cat', 'dog'}
{'dog'}
  • Zset 操作

    • 有序集合:在集合的基础上,为每元素排序,元素的排序需要根据另外一个值来进行比较
    • 对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序

    • zadd(name,mapping)  在 name 对应的有序集合中添加元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.zadd("Animal",{"cat":1,"dog":2,"pig":3}) # 往有序集合 Animal 中加入元素值和其对应的分数
    • zrange( name,start,end,desc=False,withscores=False,score_cast_func=int)  按照索引范围 [start,end] 获取 name 对应的有序集合的元素

      • name:redis 的 name
      • start:有序集合索引起始位置
      • end:有序集合索引结束位置
      • desc:排序规则,默认按照分数从小到大排序
        • False:按分数从小到大排序
        • True:按分数从大到小排序
      • withscores:是否获取元素的分数,默认只获取元素的值
        • False:只获取元素值
        • True:获取元素值和分数
      • score_cast_func:对分数进行数据转换的函数
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,2)) # 获取 Animal 有序集合中索引范围为 [0,2] 所对应的值 # 结果如下
['cat', 'dog', 'pig']
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,2,desc=True,withscores=True)) # 获取 Animal 有序集合中索引范围为 [0,2] 所对应的值 # 结果如下
[('pig', 3.0), ('dog', 2.0), ('cat', 1.0)]
    • zrevrange(name,start,end,withscores=False,score_cast_func=float)  按照索引范围 [start,end] 获取 name 对应的有序集合的元素

      • 用法同 zrange()
      • 默认按分数从大到小排序的
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrevrange("Animal",0,2,withscores=True)) # 获取 Animal 有序集合中索引范围为 [0,2] 所对应的值 # 结果如下
[('pig', 3.0), ('dog', 2.0), ('cat', 1.0)]
    • zscore(name,value)  获取name对应有序集合中 value 对应的分数
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
print(int(re.zscore("Animal","pig"))) # 获取 Animal 对应有序集合中 pig 对应的分数 # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
3
    • zcard(name)  获取有序集合内元素的数量
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zcard("Animal")) # 结果如下
3
    • zcount(name,min,max)  获取有序集合中分数在 [min,max] 之间的个数
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zcount("Animal",2,3)) # 获取有序集合 Animal 中分数在 [2,3] 之间的元素数量 # 结果如下
2
    • zrank(name,value)  获取 value 在 name 对应的有序集合中的排行位置,从 0 开始

      • 按照分数从小到大排序
    • zrevrank(name,value)  获取 value 在 name 对应的有序集合中的排行位置,从 0 开始
      • 按照分数从大到小排序
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5))
print(re.zrank("Animal","cat")) # 获取 cat 在 Animal 对应的有序集合中的排行位置,从 0 开始(按照分数从小到大排序)
print(re.zrevrank("Animal","cat")) # 获取 cat 在 Animal 对应的有序集合中的排行位置,从 0 开始(按照分数从大到小排序) # 结果如下
['cat', 'dog', 'pig']
0
2
    • zrem(name,values)  删除 name 对应的有序集合中值是 values 的成员
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zrem("Animal","dog","cat") # 删除 Animal 对应的有序集合中值是 dog 和 cat 的成员
print(re.zrange("Animal",0,5,withscores=True)) # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[('pig', 3.0)]
    • zremrangebyrank(name,min,max)  根据排行范围删除
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zremrangebyrank("Animal",0,2) # 删除 Animal 对应的有序集合中排行索引值 [0,2] 范围的元素
print(re.zrange("Animal",0,5,withscores=True)) # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[]
    • zremrangebyscore(name,min,max)  根据分数范围删除
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zremrangebyscore("Animal",0,2) # 删除 Animal 对应的有序集合中分数等于 0 或者 2 的元素
# re.zremrangebyscore("Animal",2,2) # 删除 Animal 对应的有序集合中分数等于 2 的元素
print(re.zrange("Animal",0,5,withscores=True)) # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[('cat', 1.0)]
# [('cat', 1.0), ('pig', 3.0)]
  • 其他操作

    • delete(*names)  根据 name 删除 redis 中的任意数据类型
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.delete("Student2","Fruits") # 删除 db0 中 Student2 和 Fruits 数据
    • exists(name)  检测 redis 的 name 是否存在

      • 0 表示不存在
      • 1 表示存在
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.delete("Student2","Fruits") # 删除 db0 中 Student2 和 Fruits 数据
print(re.exists("Student2")) # 判断在 db0 中 Student2 是否存在
print(re.exists("Student1")) # 结果如下
0
1
    • rename(src,dst)  将 src 重命名为 dst
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.rename("Student1","Student") # 将 Student1 重命名为 Student
print(re.get("Student")) # 结果如下
zhaoliu
    • move(name,db)  将 redis 的某个值移动到指定的 db 下

      • db 为 int
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.move("Student",4) # 将 Student 从 db0 移动到 db4 中
    • type(name)  获取 name 对应值的类型
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.type("Student"))
print(re.type("Teacher")) # 结果如下
string
hash

Python(Redis 中 Set/Zset 类型数据和其他操作)的更多相关文章

  1. 7、Redis中对ZSet类型的操作命令

    写在前面的话:读书破万卷,编码如有神 --------------------------------------------------------------------   ---------- ...

  2. 3、Redis中对String类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  3. asp.net mvc视图中使用entitySet类型数据时提示出错

    asp.net mvc5视图中使用entitySet类型数据时提示以下错误 检查了一下引用,发现已经引用了System.Data.Linq了,可是还是一直提示出错, 后来发现还需要在Views文件夹下 ...

  4. 6、Redis中对Hash类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  5. 5、Redis中对Set类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  6. 4、Redis中对List类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  7. python redis中blpop和lpop的区别

    python redis 中blpop返回的是元组对象,因此返回的时候注意 lpop返回的是对象

  8. Redis自学笔记–Zset类型及管理简述

    Zset类型                                                                                               ...

  9. [python] 查询mysql返回datetime类型数据的处理

    Python 查询Mysql,如果是datetime类型,在json序列化的时候会出现问题. 在网上查了一下,解决方案基本都是遍历dict数据,如果是datetime则转化为字符串. from dat ...

随机推荐

  1. Linux ssh登录出错

    今天登录远程主机的时候,出现了以下错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOT ...

  2. scala_spark实践2

    参考:jianshu.com/p/9d2d225c1951 监听socket获取数据,代码如下:这里使用nc -lk 9999 在ip为10.121.33.44的机器上发送消息 object Sock ...

  3. Docker命名空间

    命名空间 命名空间( namespace )是 Linux 内核的一个强大特性,为容器虚拟化的实现带来极大便利,利用这 特性,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在独立的操作系 ...

  4. HashMap实现原理(JDK1.8)

    概述HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据因为在查询上使用散列码(通过键生成一个数字作为数组下标,这个数字就是hash code)所以在查询上的访问速度比 ...

  5. JAVA—线程(Thread)

    1.线程的状态有哪些 我记得在操作系统原理的书上有一张具体的图,暂时找不到书... new:新建状态,被创建出来后未启动时的线程状态. runnable:就绪状态,表示可以运行. blocked:阻塞 ...

  6. SQL语句加锁分析

    背景 MySQL中SQL加锁的情况十分复杂,不同隔离级别.不同索引类型.索引是否命中的SQL加锁各不相同. 然而在分析死锁过程当中,熟知各种情况的SQL加锁是分析死锁的关键,因此需要将MySQL的各种 ...

  7. 详解 List接口

    本篇博文所讲解的这两个类,都是泛型类(关于泛型,本人在之前的博文中提到过),我们在学习C语言时,对于数据的存储,用的差不多都是数组和链表. 但是,在Java中,链表就相对地失去了它的存在价值,因为Ja ...

  8. Java日期时间API系列30-----Jdk8中java.time包中的新的日期时间API类,减少时间精度方法性能比较和使用。

    实际使用中,经常需要使用不同精确度的Date,比如保留到天 2020-04-23 00:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyy-MM-dd) ...

  9. java第八周课后作业

    1.系统小练习 package homework; import java.util.Random; import java.util.Scanner; public class Menu { pub ...

  10. 神奇的Kivy,让Python快速开发移动app

    随着移动互联网的不断发展,手机.Pad等移动终端已经被普遍使用,充斥在人们的工作.学习和生活中,越来越多的程序都转向移动终端,各类app应用相拥而至. Kivy作为Python的Android和IOS ...