python怎么操作redis数据库
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天小编给大家分享一下python怎么操作redis数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
千家信息网最后更新 2025年01月20日python怎么操作redis数据库
今天小编给大家分享一下python怎么操作redis数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、安装
redis 是一个 Key-Value 数据库
Value 支持 string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型
pip install redis
二、连接
import redis# 方式一r = redis.StrictRedis(host='localhost', port=6379, db=0)# 方式二r = redis.Redis(host='localhost', port=6379, decode_responses=True)# 方式三,连接池pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)r = redis.Redis(host='localhost', port=6379, decode_responses=True)
三、string基本命令
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 设置值并设置过期时间, ex单位: 秒r.set('food', 'mutton', ex=3)# 获取值r.get('food')# 设置值并设置过期时间, px单位: 毫秒r.set('food', 'beef', px=3)# nx=True时,则只有name不存在时,当前set操作才执行r.set('fruit', 'watermelon', nx=True)# xx=True时,则只有name存在时,当前set操作才执行r.set('fruit', 'watermelon', xx=True)# setnx设置值,只有name不存在时,执行设置操作r.setnx('fruit1', 'banana')# setex第一个参数是key,第二个是过期时间(秒),第三个是值r.setex("fruit2", 5, "orange")# psetex第一个参数是key,第二个是过期时间(毫秒),第三个是值r.psetex("fruit3", 5000, "apple")# 批量设置值 mset(*args, **kwargs)r.mset(k1="v1", k2="v2")# 批量获取r.mget('k1', 'k2')r.mget(['k1', 'k2'])# 设置新值并获取原来的值r.getset("food", "barbecue")# 获取子序列(根据字节获取,非字符)r.getrange("cn_name", 0, 2)r.getrange("en_name", 0, -1)# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)r.setrange("en_name", 1, "ccc")# 对 name 对应值的二进制表示的位进行操作r.setbit(name, offset, value)# 获取name对应的值的二进制表示中的某位的值,0或1r.getbit("foo1", 0)# 获取name对应的值的二进制表示中 1 的个数r.bitcount("foo",0,1)# 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值r.bitop("AND","new","foo","foo1")# 返回name对应值的字节长度(一个汉字3个字节)r.strlen("foo")# 自增 name 对应的值,当 name 不存在时,则创建 name=amount,否则,则自增。r.incr("foo", amount=1)# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。r.incrbyfloat("foo1", amount=2.0)# 自减 name 对应的值,当 name 不存在时,则创建 name=amount,否则,则自减。r.decr("foo4", amount=3)# 在redis name对应的值后面追加内容r.append("name", "haha")
四、hash基本命令
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# name对应的hash中设置一个键值对(不存在,则创建;否则,修改)r.hset("hash2", "k1", "v1")# 在name对应的hash中批量设置键值对r.hmset("hash3", {"k2": "v2", "k3": "v3"})# 在name对应的hash中获取根据key获取valuer.hmget("hash3", "k2", "k3")r.hmget("hash3", ["k2", "k3"])# 取出所有的键值对r.hgetall("hash2")# 得到所有键值对的格式 hash长度r.hlen("hash2")# 得到所有的keys(类似字典的取所有keys)r.hkeys("hash2")# 得到所有的value(类似字典的取所有value)r.hvals("hash2")# 判断成员是否存在(类似字典的in)r.hexists("hash2", "k4")# 删除键值对r.hdel("hash2", "k1")# 自增自减整数r.hincrby("hash2", "k3", amount=-1)# 自增自减浮点数r.hincrbyfloat("hash2", "k5", amount=-1.0)# 取值查看--分片读取r.hscan("hash2")# 利用yield封装hscan创建生成器,实现分批去redis中获取数据for item in r.hscan_iter('hash2'):print(item)print(r.hscan_iter("hash2"))
五、list基本命令
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 增加 (从左边新增加)--没有就新建r.lpush("list1", 11, 22, 33)# 增加(从右边增加)--没有就新建r.rpush("list2", 11, 22, 33)# 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边r.lpushx("list10", 10)# 往已经有的name的列表的右边添加元素,没有的话无法创建r.rpushx("list2", 99)# 在name对应的列表的某一个值前或后插入一个新值r.linsert("list2", "before", "11", "00")# 修改(指定索引号进行修改)r.lset("list2", 0, -11)# 删除(指定值进行删除)r.lrem("list2", "11", 1)# 删除并返回r.lpop("list2") # 删除列表最左边的元素,并且返回删除的元素r.rpop("list2") # 删除列表最右边的元素,并且返回删除的元素# 删除索引之外的值r.ltrim("list2", 0, 2)# 根据索引号取值r.lindex("list2", 0)# 移动 元素从一个列表移动到另外一个列表r.rpoplpush("list1", "list2")# 移动 元素从一个列表移动到另外一个列表 可以设置超时r.brpoplpush("list1", "list2", timeout=2)# 一次移除多个列表r.blpop(["list10", "list11"], timeout=2)# 自定义增量迭代def list_iter(name):"""自定义redis列表增量迭代:param name: redis中的name,即:迭代name对应的列表:return: yield 返回 列表元素"""list_count = r.llen(name)for index in range(list_count):yield r.lindex(name, index)
六、set基本命令
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 新增r.sadd("set1", 33, 44, 55, 66)# 获取元素个数 类似于lenr.scard("set1")# 获取集合中所有的成员r.smembers("set1")# 获取集合中所有的成员--元组形式r.sscan("set1")# 获取集合中所有的成员--迭代器的方式for i in r.sscan_iter("set1"):print(i)# 差集r.sdiff("set1", "set2")# 差集--差集存在一个新的集合中r.sdiffstore("set3", "set1", "set2")# 交集r.sinter("set1", "set2")# 交集--交集存在一个新的集合中r.sinterstore("set3", "set1", "set2")# 并集r.sunion("set1", "set2")# 并集--并集存在一个新的集合r.sunionstore("set3", "set1", "set2")# 判断是否是集合的成员 类似inr.sismember("set1", 33)# 移动 将某个成员从一个集合中移动到另外一个集合r.smove("set1", "set2", 44)# 删除--随机删除并且返回被删除值r.spop("set2")# 删除--指定值删除r.srem("set2", 11)
七、zset基本命令
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 新增r.zadd("zset2", 'm1', 22, 'm2', 44)# 获取有序集合元素个数 类似于lenr.zcard("zset1")# 获取有序集合的所有元素r.zrevrange("zset1", 0, -1)# 获取所有元素--迭代器for i in r.zscan_iter("zset3"): # 遍历迭代器print(i)# 获取name对应的有序集合中分数 在 [min,max] 之间的个数r.zcount("zset3", 11, 22)# 自增r.zincrby("zset3", "n2", amount=2)# 获取值的索引号r.zrank("zset3", "n1")# 删除--指定值删除r.zrem("zset3", "n3")# 删除--根据排行范围删除,按照索引号来删除r.zremrangebyrank("zset3", 0, 1)# 删除--根据分数范围删除r.zremrangebyscore("zset3", 11, 22)# 获取值对应的分数r.zscore("zset3", "n27")
八、其他通用命令
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 删除 根据删除redis中的任意数据类型r.delete("gender")# 检查名字是否存在r.exists("zset1")# 模糊匹配 根据模型获取redis的namer.keys("foo*")# 设置超时时间r.expire("list5", time=3)# 重命名r.rename("list5", "list5-1")# 随机获取namer.randomkey()# 获取类型r.type("set1")# 查询所有的Keyr.keys()# 当前redis包含多少条数据r.dbsize()# 清空r中的所有数据r.flushdb()
九、管道命令
redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作
如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令
并且默认情况下一次pipline 是原子性操作
管道(pipeline)是redis在提供单个请求中缓冲多条服务器命令的基类的子类
它通过减少服务器-客户端之间反复的TCP数据库包
从而大大提高了执行批量命令的功能
import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 默认的情况下,管道里执行的命令可以保证执行的原子性# 默认 pipe = r.pipeline(transaction=True)# 禁止 pipe = r.pipeline(transaction=False)# 创建一个管道pipe = r.pipeline()pipe.set('name', 'jack')pipe.set('role', 'sb')pipe.sadd('faz', 'baz')pipe.incr('num')pipe.execute()# 或者写成 pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()print(r.get("name"))print(r.get("role"))print(r.get("num"))
以上就是"python怎么操作redis数据库"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
元素
命令
数据
成员
索引
移动
迭代
时间
数据库
有序
个数
内容
只有
多个
字符
方式
知识
管道
篇文章
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
教孩子网络安全
本溪溪湖网络安全大队
南通软件开发的公司吗
泰安市网络安全人才
状态数据库栏位
幼儿园网络安全工作方案绿色
福州专业软件开发
银行卡数据库
手机网络技术发展史
SUN服务器管理端口
服务器面板管理密码忘了
帝国神话官方服务器1000
网络安全与密码学题库
虚拟云服务器搭建教程
数据库 时间字段 类型
单位的服务器怎么进
非遗数据库建设
百度再见网络技术北京有限公司一
杭州校园报修管理软件开发
数据库管理相关宣传报道
有潜力的mysql数据库备份
龙雀网络技术科普
附加数据库失败2014
服务器存储厂商
蛋白质功能数据库cog
崇明区创新软件开发代理商
什么数据库适合存储文本数据
三星无法连接到服务器
学智能互联网络技术用什么电脑
什么是软件开发郑重承诺