Python 操作 Redis 数据库(python连接redis数据库)
off999 2024-11-04 13:16 36 浏览 0 评论
Redis 作为常用的 NoSql 数据库,主要用于缓存数据,提高数据读取效率,那在 Python 中应该如果连接和操作 Redis 呢?今天就为大家简单介绍下,在 Python 中操作 Redis 常用命令。
安装 redis
首先还是需要先安装 redis 模块,使用如下命令:
$ pip3 install redis创建 redis 连接池
安装成功后就可以在代码中导入模块,然后通过创建连接池的方式,连接到 Redis 服务器,创建代码如下:
import redis #导入redis模块
# 建议使用以下连接池的方式
# 设置decode_responses=True,写入的KV对中的V为string类型,不加则写入的为字节类型。
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0, decode_responses=True)
rs = redis.Redis(connection_pool=pool)需要注意的是,设置 decode_responses=True,写入的 Key/Value 对中的 Value 为 string 类型,不加则写入的为字节类型。
Redis 操作方法
Redis 支持五种类型的数据操作,分别为字符串、 List、 Hash、 Set、 zSet类型,还有一些方法是不区分类型操作的。上面我们已经连接到 Redis 服务器,接下来为大家介绍各类型基本的操作方法。
字符串类型方法
- 单键值操作
set(name, value, ex=None, px=None, nx=False, xx=False)
参数说明:
ex:过期时间(秒)
px:过期时间(毫秒)
nx:如果设置为True,则只有name不存在时,当前set操作才执行
xx:如果设置为True,则只有name存在时,当前set操作才执行
使用方法如下:
# key="color",value="red",设置过期时间5秒
rs.set('color', 'red', ex=5)
# 与rs.set('color', 'red', ex=5)相同
rs.setex('color', 5, 'red')
# 打印获取color键对应的值,超时后获取值为None
print(rs.get('color'))
# 如果color存在输出None,如果不存在,则输出True
print(rs.set('color', 'green', nx=True))
# 如果color存在输出True,如果不存在,则输出None
print(rs.set('color', 'yellow', xx=True))- 批量键值操作
可以批量对多个 key 赋值,也可以同时获取多个 key 的值,使用方法如下:
# 批量赋值
rs.mset({'key1':'value1', 'key2':'value2', 'key3':'value3'})
# 批量获取值
rs.mget('key1', 'key2', 'key3')- 其他操作
除了基础的赋值和取值,可以在赋新值时返回旧值,还可将返回值通过索引来截取,也可以在 key 对应值后追回值等,具体使用可见以下代码:
# 设置新值为blue,同时返回设置前的值
print(rs.getset('color', 'blue'))
rs.set('lang', 'Chinese')
# 取索引为1-3字符
print(rs.getrange('lang', 1, 3)) #返回结果: hin
# 从索引号为4字符开始向后替换
rs.setrange('lang', 4, 'a is great') #返回结果:14
# 在lang对应值后面追加字符 "!"
rs.append('lang', '!') #返回结果: 15
print(rs.get('lang')) #返回结果:China is great!
# 返回lang对应值的长度
print(rs.strlen('lang')) #返回结果:15
# 如果total对应值不存在,则total当前值设置为10
rs.incr('total', amount=10)
# 当前total对应值增加1
rs.incr('total') #结果为11
# 当前total对应值减少1
rs.decr('total') #结果为10list 类型方法
list 的特点:一个有序的列表,列表中的元素可以重复,并且可以在列表前后或中间任意位置插入新元素,具体使用方式见如下代码:
# 每个新增元素都插入到list最左边,如果list不存在则会新建
rs.lpush('leftList', 1,2,3,4,5)
print(rs.lrange('leftList', 0, -1)) #返回结果:['5', '4', '3', '2', '1']
# 新插入元素在右侧,如果list不存在则新建
rs.rpush('rightList', 6,7,8,9,10)
print(rs.lrange('rightList', 0, -1)) #返回结果:['6', '7', '8', '9', '10']
# 在list左边新增元素,如果list不存在则不创建
rs.lpushx('noList', 'apple')
print(rs.llen('noList')) #返回结果:0
# 在list中从左遍历出第一个为'7'的元素,在它后面(如果是在前面插入则用'before')插入元素'08'
rs.linsert('rightList', 'after', '7', '08')
print(rs.lrange('rightList', 0, -1)) #返回结果:['6', '7', '08', '8', '9', '10']
# 将list中索引号为1的元素修改为'-7'
rs.lset('rightList', 1, '-7')
print(rs.lrange('rightList', 0, -1)) #返回结果:['6', '-7', '08', '8', '9', '10']
# 删除list中从左遍历第一个为'8'的元素
rs.lrem('rightList', '8', 1)
print(rs.lrange('rightList', 0, -1)) #返回结果:['6', '-7', '08', '9', '10']
# 弹出左侧第一个元素
rs.lpop('rightList') #返回值为:'6'
print(rs.lrange('rightList', 0, -1)) #返回结果:['-7', '08', '9', '10']
#取出list中索引编号为1的值
print(rs.lindex('rightList', 1)) #返回结果:08hash 类型方法
hash 的特点:一个 key 对应一个 value,并且 key 不允许重复,可以单个操作,也可以批量键值操作,下面列举了常用方法的使用方法:
# 单键值操作
# 设置hash名为hName的键和值
rs.hset('hName', 'key1', 'value1')
rs.hset('hName', 'key2', 'value2')
# 取hName的key1对应的值
print(rs.hget('hName', 'key1')) #返回结果:value1
#批量键值操作
rs.hmset('hName', {'key3': 'value3', 'key5': 'value5'})
print(rs.hmget('hName', 'key1', 'key2', 'key3')) #返回结果:['value1', 'value2', 'value3']
# 取出hName所有键值
print(rs.hgetall('hName')) #返回结果:{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key5': 'value5'}
# 取hName中所有的keys
print(rs.hkeys('hName')) #返回结果:['key1', 'key2', 'key3', 'key5']
# 取hName中所有的values
print(rs.hvals('hName')) #返回结果:['value1', 'value2', 'value3', 'value5']
# 获取hName对应hash键值对个数
print(rs.hlen('hName')) #返回结果:4
# 判断key2是否存在
print(rs.hexists('hName', 'key2')) #返回结果:True
# 删除key2对应键值对
rs.hdel('hName', 'key2')
# 再次判断key2是否存在
print(rs.hexists('hName', 'key2')) #返回结果:Falseset 类型方法
set 的特点:一个无序的元素集合,集合中元素不能重复,可以随机 pop 元素,两个集合可以取交集,并集,差集运算。
# 增加集合元素,如集合不存在则新建
rs.sadd('mySet', 'one', 'two', 3)
# 返回集合元素个数
print(rs.scard('mySet'))
# 返回所有元素
print(rs.smembers('mySet')) #结果:{'two', 'one', '3'}
# 返回所有成员
print(rs.sscan('mySet')) #结果:(0, ['3', 'one', 'two'])
# 再次创建一个集合mySet2
rs.sadd('mySet2', 3, 5, 7)
# 获取两个集合交集
print(rs.sinter('mySet', 'mySet2')) #返回结果:{'3'}
# 获取两个集合并集
print(rs.sunion('mySet', 'mySet2')) #返回结果:{'5', 'two', 'one', '7', '3'}
# 获取两个集合差集
print(rs.sdiff('mySet', 'mySet2')) #返回结果:{'two', 'one'}
# 取mySet和mySet2的并集,将结果存到storeSet集合中
print(rs.sunionstore('sotreSet', 'mySet', 'mySet2'))
print(rs.smembers('sotreSet')) #返回结果:{'5', 'two', 'one', '7', '3'}
# 判断one元素是否存在集合中
print(rs.sismember('sotreSet', 'one'))
# 随机删除并返回集合中的一个元素
print(rs.spop('sotreSet'))
# 删除集合中元素值为5的元素
print(rs.srem('sotreSet', 5))zset 类型方法
zset 的特点:一个不允许重复的集合,集合中元素是有序的,每个元素有两个值:值和分数,分数专门用来做排序。
# 增加集合元素,如集合不存在则新建
rs.zadd('fruits', {'apple':1, 'banana':3, 'orange':5})
# 遍历所有元素
print(rs.zrange("fruits", 0, -1)) #结果:['apple', 'banana', 'orange']
# withscores=True指带上分数
print(rs.zrange("fruits", 0, -1, withscores=True)) #结果:[('apple', 1.0), ('banana', 3.0), ('orange', 5.0)]
# 根据分数由大到小遍历所有元素
print(rs.zrevrange("fruits", 0, -1)) #结果:['orange', 'banana', 'apple']
# 获取orange元素对应的分数
rs.zscore('fruits', 'orange') #结果:5.0
# 取出分数>=3 and 分数<=5的元素
print(rs.zrangebyscore('fruits', 3, 5))
# 取出分数<=5 and 分数>=3的元素,根据分数从大到小排序
print(rs.zrevrangebyscore('fruits', 5, 3))
# 遍历所有元素,返回一个元组
print(rs.zscan('fruits')) #结果:(0, [('apple', 1.0), ('banana', 3.0), ('orange', 5.0)])
# 打印集合元素个数
print(rs.zcard('fruits')) #结果:3
# 返回集合中分数>=1 and 分数<=3元素个数
print(rs.zcount('fruits', 1, 3))
# 将集合中apple元素的分数+5
rs.zincrby('fruits', 5, 'apple')
print(rs.zrange("fruits", 0, -1, withscores=True)) #返回结果:[('banana', 3.0), ('orange', 5.0), ('apple', 6.0)]
# 返回orange元素在集合中的索引号
rs.zrank('fruits', 'orange') #结果:1
# 按分数从大到小排序,取出banana元素索引号
rs.zrevrank('fruits', 'banana') #结果:2
# #删除集合中apple元素
rs.zrem('fruits', 'apple')
print(rs.zrange("fruits", 0, -1)) #返回结果:['banana', 'orange']
# #删除集合索引号>=0 and 索引号<=2的元素
rs.zremrangebyrank('fruits', 0, 2)
# 删除集合分数>=1 and 分数<=5的元素
rs.zremrangebyscore('fruits', 1, 5)其他操作方法
以下操作方法针对 redis 任意数据类型(字符串,list,hash,set,zset),可以删除 key ,查询 key 是否存在,还可设置超时,重命名 key 的名称等:
# 删除key为color的对象
rs.delete('color')
# 查询key为color的对象是否存在
print(rs.exists('color')) #结果:False
rs.sadd('mySet5', 'one', 'two')
# 设置key的超时时间
rs.expire('mySet5', time=5) #单位:秒
# 重命名key的值
rs.rename('mySet5', 'set5')
# 随机返回当前库中一个key,但不会删除
print(rs.randomkey())
# 查看某个key对应值的类型
print(rs.type('mySet')) #返回结果:set
# 通过模糊匹配出满足条件的key
print(rs.keys('my*')) #返回结果:['mySet', 'mySet2']
#各类型元素迭代方式
#hash类型迭代
for i in rs.hscan_iter("hName"):
print(i)
#set类型迭代
for j in rs.sscan_iter("mySet"):
print(j)
#zset类型迭代
for k in rs.zscan_iter("fruits"):
print(k)总结
本文为大家介绍了 Python 中如何创建连接 Redis 数据库,并通过代码的方式展示了 Redis 支持的各数据类型的操作方法,通过学习发现操作起来还是很方便的,接下来还会为大家介绍其他数据库的操作。
相关推荐
- 爱纯净系统官方的网址(爱纯净官网是哪个)
-
备份步骤: 第一步:点击win10纯净版系统桌面左下角的【Windows】按钮,从打开的扩展面板中找到【设置】按钮点击进入。 第二步:打开win10纯净版64位系统中的设置界面中,点击【更新和安全...
- 最新电脑主机配置清单(2021电脑主机主流配置)
-
1.CPU全志a31s80元主板建议联想乐pad160元显示屏7寸分辨率建议在800*480以上约110元电源接口约0.2元wifi模块约20元蓝牙模块约20元硬盘建议金...
- windows7系统界面(win7界面什么样)
-
关于这个问题,要将Win1系统调成Win7界面,您可以尝试以下几个步骤:1.下载并安装一个Win7主题:在网上搜索并下载一个Win7主题,例如“Windows7ThemeforWin10”,...
- 把文件隐藏了怎么显示出来(文件隐藏起来了怎么找)
-
需要显示出来因为有些文件被系统默认设置为隐藏状态,为了查看或编辑这些文件,需要将它们显示出来。如果你使用Windows操作系统,可以在文件资源管理器中点击“查看”选项卡,然后勾选“隐藏项目”复选框,隐...
- mercury路由器wifi密码(mercury路由器wifi密码忘了怎么办)
-
水星路由器宽带密码查看的方法:一、首先登陆原来路由器管理界面,输入路由器账号密码登陆。二、进入路由器管理界面后,点击进入“备份和载入配置”,然后点击“备份配置文件”,然后将备份的配置文件存放在电脑桌...
- microsoft word产品密钥(微软word产品密钥)
-
产品密钥是由一些字符组成的代码,用于激活对应产品。产品密钥是产品授权的证明,它是根据一定的算法(如椭圆算法)等产生的随机数。当用户输入密钥产品会根据其输入的密钥判断是否满足相应的算法,通过这样来判断,...
- 笔记本显卡推荐(笔记本显卡推荐性价比高)
-
1、微星R7850TF2GD5/OC:这款微星显卡是用GCN架构设计的图形核心,里面有1024个sp单元,执行、输出能力都非常的强悍,能完美地将DX11.1特效呈现出来。它还能够支持驳接各种大型...
- hp系统重装win10(hp怎么重装系统win10)
-
答具体解决方法如下准备工作: 1、下载u启动u盘启动盘制作工具 2、下载win10系统镜像并存入u盘启动盘中 3、硬盘模式更改为ahci模式 安装win10系统操作步骤: 1、首先,我们提...
- 惠普笔记本电脑售后服务(惠普笔记本电脑售后服务维修点)
-
惠普笔记本电脑的售后服务包括全国联保、上门维修、24小时服务热线等多种服务。消费者可以通过官网或客户服务热线轻松预约维修服务,享受专业、高效的技术支持。同时,惠普还提供质保服务和延保服务,保障消费者的...
- 住房公积金管理中心官网(广州住房公积金管理中心官网)
-
按照《住房公积金管理条例》有关规定,住房公积金管理中心性质属于事业单位,隶属事业单位编制。使用手机查询住房公积金的方法。微信查询法1、打开微信,点击进入“我”的页面,在这个页面找到钱包;2、点击进入...
- 远程控制系统(路灯远程控制系统)
-
汽车远程控制系统是一种通过移动终端或其他设备远程控制汽车的系统,可以实现远程锁车/解锁、远程启动车辆、远程启动空调、...
- 惠普1136打印机驱动(惠普1136打印机驱动用的是1130吗)
-
原因:1、可能是安装驱动步骤错了,下载驱动的步骤一定要按步骤检查安装。2、可能是驱动程序兼容性问题,或驱动程序损坏,建议使用驱动管理软件安装,这样简单,而且是最新的,兼容性、稳定性好。3、可能是打印机...
- office2013标准版产品密钥(microsoft office2013产品密钥在哪里能找到)
-
win7/win8/win10系统下VisualStudio2013各个版本的密钥:VisualStudioUltimate2013KEY:BWG7X-J98B3-W34RT-33B3R-...
- win7旗舰版电脑非常卡怎么办
-
针对Windows7旗舰版卡顿的情况,可以尝试以下几种方法来解决:1.升级硬件:如果你的电脑配置较低,可以考虑升级一下硬件,例如更换内存条、加装固态硬盘等。2.清理磁盘:清理电脑中不必要的文件、...
- 随身wifi怎么用的使用教程(随身wifi怎么用的使用教程图解)
-
1、将随身wifi插入电脑端,按照提示操作2、首次安装驱动后,随身wifi会随机生成10位默认密码,每台电脑是不相同的。为方便连接,也可手动设置为相同的密码。3、随身WiFi客户端支持3种手机连接方式...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
