python怎么操作redis数据库
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天小编给大家分享一下python怎么操作redis数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
广州淘业互联网络科技
山东特亿宝互联网科技有限公司
科技互联网公司装修
互联网科技垄断
盈实互联网科技
以房互联网科技
碳银互联网科技有限公司
卓越科技互联网 招聘
顺网科技2021年互联网排名
济南和联互联网科技有限公司
互联网科技实习生岗位职责
中国航天科技大学国际工业互联网
开一家科技互联网公司需要多少钱
广州新华互联网科技学校电竞方面
深圳市罗太互联网科技有限公司
恒生互联网科技业指数调整周期
杭州披云加互联网科技有限公司
富国互联网金融科技混合基金
马化腾互联网科技教学
科技互联网专业务虚会材料
互联网金融 金融科技
互联网金融科技创新
科技创新互联网企业
互联网科技的未来发展
卫星互联网科技股票
现代科技和互联网有关系吗
广州恒生互联网科技有限
从那以后互联网科技有限公司
济南小医互联网科技有限公司招聘
互联网科技企业商标注意事项