今天小编给大家分享一下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数据库”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。