文章目录
- 前言
- 一、下载Python插件
- 二、创建项目
- 三、安装 redis 库
- 四、新建python软件包
- 五、键操作
- 六、字符串操作
- 七、列表操作
- 八、集合操作
- 九、哈希表操作
- 十、有序集合操作
- 十一、完整代码
- 1. 完整代码
- 2. 项目下载
前言
本文是基于 Python 操作 Redis 数据库的实战指南,旨在通过分步教程与代码示例,帮助开发者掌握 Redis 常见数据类型(字符串、列表、集合、哈希表、有序集合)的操作方法。内容覆盖开发环境搭建、库安装、项目结构创建及核心功能代码实现,适合 Python 初学者及 Redis 入门开发者参考。
一、下载Python插件
打开设置菜单:首先,点击左上角的“文件”菜单,然后选择“设置”选项。这将打开一个新窗口,显示各种设置选项。
进入插件管理:在设置窗口左侧的导航栏中,找到并点击“插件”选项。这将带你进入插件管理页面。
搜索Python插件:在插件管理页面顶部的搜索框中输入“python”,然后按回车键进行搜索。这将列出与Python相关的所有插件。
选择Python插件:从搜索结果中找到名为“Python”的插件,并点击它。确保该插件旁边的复选框被勾选,表示已启用。
应用更改:完成上述步骤后,点击右下角的“应用(A)”按钮,然后点击“确定”按钮以保存更改并关闭设置窗口。
具体步骤如下图所示:
二、创建项目
项目创建是 Python 开发的起始点,规范且合理地创建项目有助于组织代码结构、管理项目资源。在开发与 Redis 交互的 Python 项目时,明确项目名称、路径以及选择合适的环境类型,如 Virtualenv 虚拟环境,能有效隔离项目依赖,避免不同项目间的依赖冲突,为项目开发营造稳定的运行环境。下面详细介绍创建 Python 项目的具体流程。
点击“文件”菜单–>选择“新建(N)”–>点击“项目…”–>选择“Python”项目类型–>输入项目名称和路径–>选择环境类型为“Virtualenv”–>指定虚拟环境路径–>选择基础解释器版本–>点击“创建©”按钮。
具体步骤如下图所示:
三、安装 redis 库
Redis 库是 Python 与 Redis 数据库交互的桥梁。通过终端执行 pip install redis
命令(推荐使用阿里云镜像源加速下载),可快速安装官方提供的 Redis 客户端库。安装完成后,需验证库是否导入成功(如在 Python 中执行 import redis 无报错),确保后续代码能够调用 Redis 相关接口。
打开终端,执行如下命令安装redis
库。
pip install redis -i https://mirrors.aliyun.com/pypi/simple/
具体步骤如下图所示:
四、新建python软件包
在 Python 项目中,软件包用于组织相关的模块,有助于构建清晰的代码结构,提高代码的可维护性与复用性。当项目涉及复杂的功能模块时,合理创建软件包能够更好地管理代码逻辑。以下介绍在项目中新建 Python 软件包的操作方法。
在项目视图中找到并点击项目名称–>右键点击项目名称–>选择“新建(N)”–>选择“Python 软件包”–>输入软件包名称–>点击“确定”按钮。
具体步骤如下图所示:
创建完成如下图所示:
五、键操作
键操作是 Redis 数据管理的基础,涉及键的创建、查询、修改与删除。核心方法包括:
SET/MSET
:设置单个或多个键值对;KEYS
:按模式匹配查询键(如 k* 匹配以 k 开头的键);EXPIRE/TTL
:设置键的生存时间及查询剩余存活时间;RENAME
:重命名键;DELETE
:删除单个或多个键。
通过这些操作,可高效管理 Redis 中的数据生命周期。
def key_operation():print("===========键操作===========")# 示例:给school键设置值为dy。set_result = r.set("school", "dy")print(set_result)print("===============")# 示例:给k1键设置值为v1,k2键设置值为v2,k3键设置值为v3。set_result1 = r.mset({"k1": "v1", "k2": "v2", "k3": "v3"})print(set_result1)print("===============")# 示例1:查看所有键。keys = r.keys("*")for key in keys:print(key.decode())print("===============")# 示例2:查看所有以k开头的键。keys1 = r.keys("k*")for key in keys1:print(key.decode())print("===============")# 示例:查看scool键的值。school = r.get("school")print(school.decode() if school else None)print("===============")# 示例:查看k1、k2、k3键的值。mget = r.mget("k1", "k2", "k3")for s in mget:print(s.decode() if s else None)print("===============")# 示例:查看k1键的值的序列化版本。k1s = r.dump("k1")print(k1s)print("===============")# 示例1:查看school键是否存在。exists = r.exists("school")print(exists)# print(bool(exists))print("===============")# 示例2:查看k1、k2、k3、k4、k5键是否存在。exists1 = r.exists("k1", "k2", "k3", "k4", "k5")print(exists1)print("===============")# 示例:查看school键的值的类型。type_ = r.type("school").decode()print(type_)print("===============")# 示例:把school键重命名为new_school键。rename = r.rename("school", "new_school")print(rename)print("===============")# 示例:把k3键的生存时间设置为600秒。expire = r.expire("k3", 600)print(expire)print("===============")# 示例:查看k3键的剩余存活时间。ttl = r.ttl("k3")print(ttl)print("===============")# 示例:删除k3键的存活时间。persist = r.persist("k3")print(persist)print("===============")# 示例1:删除new_school键。del_ = r.delete("new_school")print(del_)print("===============")# 示例2:删除k1、k2、k3键。del1 = r.delete("k1", "k2", "k3")print(del1)print("===============")
六、字符串操作
字符串是 Redis 最基础的数据类型,支持原子性操作。核心方法包括:
GET/MGET
:获取单个或多个字符串值;GETSET
:先获取旧值再设置新值;STRLEN
:获取字符串长度;SETRANGE
:按索引替换字符串内容;APPEND
:向字符串末尾追加内容。
这些操作适用于缓存简单数据(如用户信息、配置项)场景。
def string_operation():print("===========字符串操作===========")# 示例:给字符串键str1设置值为value1。set_result = r.set("str1", "value1")print(set_result)print("===============")# 示例:给字符串键str2、str3、str4分别设置值为value2、value3、value4。mset_result = r.mset({"str2": "value2", "str3": "value3", "str4": "value4"})print(mset_result)print("===============")# 示例:获取字符串键str1的值。str1 = r.get("str1")print(str1.decode() if str1 else None)print("===============")# 示例:获取字符串键str2、str3、str4的值。mget = r.mget("str2", "str3", "str4")for s in mget:print(s.decode() if s else None)print("===============")# 示例:获取字符串键str1的旧值,并设置新值为new_value1。get_set = r.getset("str1", "new_value1")print(get_set.decode() if get_set else None)# 查看设置后的新值。str11 = r.get("str1")print(str11.decode() if str11 else None)print("===============")# 示例:获取字符串键str1的值的长度。strlen = r.strlen("str1")print(strlen)print("===============")# 示例:获取字符串键str1的索引0-5的值的内容。getrange = r.getrange("str1", 0, 5)print(getrange.decode() if getrange else None)print("===============")# 示例:把字符串键str1从索引2开始的后面三个字母的内容替换为aaa。setrange = r.setrange("str1", 2, "aaa")print(setrange)# 查看设置后的新值。str12 = r.get("str1")print(str12.decode() if str12 else None)print("===============")# 示例:向字符串键str1的结尾追加内容bbb。append = r.append("str1", "bbb")print(append)# 查看设置后的新值。str13 = r.get("str1")print(str13.decode() if str13 else None)
七、列表操作
列表(List)是 Redis 中有序、可重复的链表结构,支持两端插入与删除。核心方法包括:
LPUSH/RPUSH
:左 / 右端插入元素;LRANGE
:按索引范围获取列表元素(如 0 -1 表示所有元素);LPOP/RPOP
:左 / 右端弹出并删除元素;LREM
:按条件删除元素(如删除指定数量或方向的元素)。
列表适用于队列、栈、历史记录等有序数据场景。
def list_operation():print("===========列表操作===========")# 示例:在列表右端向列表color中添加多个值。rpush = r.rpush("color", "blue", "green", "purple", "red", "white")print(rpush)print("===============")# 示例:在列表左端向列表color中添加多个值。lpush = r.lpush("color", "blue2", "green2", "purple2", "red2", "white2")print(lpush)print("===============")# 示例1:获取列表color中索引0-5的元素。color = r.lrange("color", 0, 5)for s in color:print(s.decode())print("===============")# 示例2:获取列表color中的所有元素。color1 = r.lrange("color", 0, -1)for s in color1:print(s.decode())print("===============")# 示例:获取列表color中索引为2的元素。color2 = r.lindex("color", 2)print(color2.decode() if color2 else None)print("===============")# 示例:移除并获取列表color中的最后一个(最右端)元素。rpop = r.rpop("color")print(rpop.decode() if rpop else None)print("===============")# 示例:移除并获取列表color中的第一个(最左端)元素。lpop = r.lpop("color")print(lpop.decode() if lpop else None)print("===============")# 示例:获取列表color的长度。llen = r.llen("color")print(llen)print("===============")# 示例1:从列表开头开始搜索移除列表color中1个red元素。lrem = r.lrem("color", 1, "red")print(lrem)print("===============")# 示例2:从列表结尾开始搜索移除列表color中3个blue元素。lrem1 = r.lrem("color", -3, "blue")print(lrem1)print("===============")# 示例3:移除列表color中所有blue2元素。lrem2 = r.lrem("color", 0, "blue2")print(lrem2)print("===============")
八、集合操作
集合(Set)是 Redis 中无序、唯一的元素集合,支持交集、并集、差集运算。关键操作包括:
SADD
:添加成员(自动去重);SMEMBERS
:获取所有成员;SISMEMBER
:判断成员是否存在;SMOVE
:移动成员至其他集合。
集合常用于标签管理、用户去重、交集查询(如共同好友)等场景。
def set_operation():print("===========集合操作===========")# 示例:给集合键set1添加多个成员。sadd = r.sadd("set1", "mem1", "mem2", "mem3")print(sadd)print("===============")# 示例:查看集合键set1中成员的数量。scard = r.scard("set1")print(scard)print("===============")# 示例:查看集合键set1中的所有成员。set1 = r.smembers("set1")for s in set1:print(s.decode())print("===============")# 示例:检查成员mem1是否在集合set1中。sismember = r.sismember("set1", "mem1")print(sismember)print("===============")# 示例:移除集合set1中成员mem3。srem = r.srem("set1", "mem3")print(srem)print("===============")# 示例:把集合set1中成员mem2移动到集合set2中。smove = r.smove("set1", "set2", "mem2")print(smove)print("===============")
九、哈希表操作
哈希表(Hash)用于存储键值对的集合,适合存储结构化数据(如用户详情)。核心方法包括:
HSET
:设置单个字段值或批量设置(通过 mapping 参数);HGET/HMGET
:获取单个或多个字段值;HGETALL
:获取所有字段和值;HDEL
:删除指定字段。
哈希表可减少键的数量,提升数据读写效率,适用于存储对象属性场景。
def hash_operation():print("===========哈希表操作===========")# 示例:给哈希表student添加一个学生信息。hset = r.hset("student:1", "name", "zhangsan")print(hset)hset1 = r.hset("student:1", "age", "19")print(hset1)hset2 = r.hset("student:1", "address", "yunnan")print(hset2)print("===============")# 示例:给哈希表student添加一个学生信息。# 修复:使用 hset 替代 hmset,传入映射字典hmset = r.hset("student:2", mapping={"name": "lisi", "age": "20", "address": "guizhou"})print(hmset)print("===============")# 示例:获取hash键student:2中name字段的值。hget = r.hget("student:2", "name")print(hget.decode() if hget else None)print("===============")# 示例:获取hash键student:2中name、age和address字段的值。hget1 = r.hmget("student:2", ["name", "age", "address"])for s in hget1:print(s.decode() if s else None)print("===============")# 示例:获取hash键student:2中的所有字段和值。student2 = r.hgetall("student:2")for key, value in student2.items():print(f"{key.decode()}: {value.decode()}")print("===============")# 示例:获取hash键student:2中的所有字段。hkeys = r.hkeys("student:2")for s in hkeys:print(s.decode())print("===============")# 示例:获取hash键student:2中的所有值。hvals = r.hvals("student:2")for s in hvals:print(s.decode())print("===============")# 示例:删除hash键student:2中的age和address字段。hdel = r.hdel("student:2", "age", "address")print(hdel)print("===============")
十、有序集合操作
有序集合(Sorted Set)通过分数(Score)实现元素的有序排列,支持按分数或索引范围查询。核心方法包括:
ZADD
:添加成员与分数;ZCOUNT
:统计指定分数范围内的成员数量;ZRANGE
:按索引范围获取成员(默认按分数升序);ZSCORE
:获取成员的分数。
有序集合适用于排行榜、实时数据排序(如点赞数、访问量)等场景。
def order_set_operation():print("===========有序集合操作===========")# 示例:给有序集合salary添加多个分数和成员。zadd = r.zadd("salary", {"zhangsan": 5000, "lisi": 4500, "wangwu": 6000})print(zadd)print("===============")# 示例:获取有序集合salary中的成员数量。zcard = r.zcard("salary")print(zcard)print("===============")# 示例:计算有序集合中分数在5000-6500之间的成员数量。zcount = r.zcount("salary", 5000, 6500)print(zcount)print("===============")# 示例:根据索引范围获取有序集合salary中的成员。salary = r.zrange("salary", 0, 1)for s in salary:print(s.decode())print("===============")# 示例:获取有序集合salary中成员wangwu的分数。zscore = r.zscore("salary", "wangwu")print(zscore)print("===============")# 示例:移除有序集合salary中成员wangwu。zrem = r.zrem("salary", "wangwu")print(zrem)print("===============")
十一、完整代码
本章提供完整的 Python 代码示例,整合前文各模块功能。代码通过 redis.Redis 类连接本地 Redis 服务(默认端口 6379,数据库 1),包含以下核心逻辑:
flush_db()
:清空数据库,确保测试环境干净;- 各数据类型操作函数(如 key_operation()、string_operation()):封装具体功能逻辑;
__main__ 入口
:按顺序调用各操作函数,实现完整的 Redis 交互流程。
运行前需确保 Redis 服务已启动,且代码中的连接参数与实际环境一致。
1. 完整代码
import redis# 连接到本地 Redis 服务
r = redis.Redis(host='127.0.0.1', port=6379, db=1)def flush_db():# 清空数据库r.flushdb()def key_operation():print("===========键操作===========")# 示例:给school键设置值为dy。set_result = r.set("school", "dy")print(set_result)print("===============")# 示例:给k1键设置值为v1,k2键设置值为v2,k3键设置值为v3。set_result1 = r.mset({"k1": "v1", "k2": "v2", "k3": "v3"})print(set_result1)print("===============")# 示例1:查看所有键。keys = r.keys("*")for key in keys:print(key.decode())print("===============")# 示例2:查看所有以k开头的键。keys1 = r.keys("k*")for key in keys1:print(key.decode())print("===============")# 示例:查看scool键的值。school = r.get("school")print(school.decode() if school else None)print("===============")# 示例:查看k1、k2、k3键的值。mget = r.mget("k1", "k2", "k3")for s in mget:print(s.decode() if s else None)print("===============")# 示例:查看k1键的值的序列化版本。k1s = r.dump("k1")print(k1s)print("===============")# 示例1:查看school键是否存在。exists = r.exists("school")print(exists)# print(bool(exists))print("===============")# 示例2:查看k1、k2、k3、k4、k5键是否存在。exists1 = r.exists("k1", "k2", "k3", "k4", "k5")print(exists1)print("===============")# 示例:查看school键的值的类型。type_ = r.type("school").decode()print(type_)print("===============")# 示例:把school键重命名为new_school键。rename = r.rename("school", "new_school")print(rename)print("===============")# 示例:把k3键的生存时间设置为600秒。expire = r.expire("k3", 600)print(expire)print("===============")# 示例:查看k3键的剩余存活时间。ttl = r.ttl("k3")print(ttl)print("===============")# 示例:删除k3键的存活时间。persist = r.persist("k3")print(persist)print("===============")# 示例1:删除new_school键。del_ = r.delete("new_school")print(del_)print("===============")# 示例2:删除k1、k2、k3键。del1 = r.delete("k1", "k2", "k3")print(del1)print("===============")def string_operation():print("===========字符串操作===========")# 示例:给字符串键str1设置值为value1。set_result = r.set("str1", "value1")print(set_result)print("===============")# 示例:给字符串键str2、str3、str4分别设置值为value2、value3、value4。mset_result = r.mset({"str2": "value2", "str3": "value3", "str4": "value4"})print(mset_result)print("===============")# 示例:获取字符串键str1的值。str1 = r.get("str1")print(str1.decode() if str1 else None)print("===============")# 示例:获取字符串键str2、str3、str4的值。mget = r.mget("str2", "str3", "str4")for s in mget:print(s.decode() if s else None)print("===============")# 示例:获取字符串键str1的旧值,并设置新值为new_value1。get_set = r.getset("str1", "new_value1")print(get_set.decode() if get_set else None)# 查看设置后的新值。str11 = r.get("str1")print(str11.decode() if str11 else None)print("===============")# 示例:获取字符串键str1的值的长度。strlen = r.strlen("str1")print(strlen)print("===============")# 示例:获取字符串键str1的索引0-5的值的内容。getrange = r.getrange("str1", 0, 5)print(getrange.decode() if getrange else None)print("===============")# 示例:把字符串键str1从索引2开始的后面三个字母的内容替换为aaa。setrange = r.setrange("str1", 2, "aaa")print(setrange)# 查看设置后的新值。str12 = r.get("str1")print(str12.decode() if str12 else None)print("===============")# 示例:向字符串键str1的结尾追加内容bbb。append = r.append("str1", "bbb")print(append)# 查看设置后的新值。str13 = r.get("str1")print(str13.decode() if str13 else None)def list_operation():print("===========列表操作===========")# 示例:在列表右端向列表color中添加多个值。rpush = r.rpush("color", "blue", "green", "purple", "red", "white")print(rpush)print("===============")# 示例:在列表左端向列表color中添加多个值。lpush = r.lpush("color", "blue2", "green2", "purple2", "red2", "white2")print(lpush)print("===============")# 示例1:获取列表color中索引0-5的元素。color = r.lrange("color", 0, 5)for s in color:print(s.decode())print("===============")# 示例2:获取列表color中的所有元素。color1 = r.lrange("color", 0, -1)for s in color1:print(s.decode())print("===============")# 示例:获取列表color中索引为2的元素。color2 = r.lindex("color", 2)print(color2.decode() if color2 else None)print("===============")# 示例:移除并获取列表color中的最后一个(最右端)元素。rpop = r.rpop("color")print(rpop.decode() if rpop else None)print("===============")# 示例:移除并获取列表color中的第一个(最左端)元素。lpop = r.lpop("color")print(lpop.decode() if lpop else None)print("===============")# 示例:获取列表color的长度。llen = r.llen("color")print(llen)print("===============")# 示例1:从列表开头开始搜索移除列表color中1个red元素。lrem = r.lrem("color", 1, "red")print(lrem)print("===============")# 示例2:从列表结尾开始搜索移除列表color中3个blue元素。lrem1 = r.lrem("color", -3, "blue")print(lrem1)print("===============")# 示例3:移除列表color中所有blue2元素。lrem2 = r.lrem("color", 0, "blue2")print(lrem2)print("===============")def set_operation():print("===========集合操作===========")# 示例:给集合键set1添加多个成员。sadd = r.sadd("set1", "mem1", "mem2", "mem3")print(sadd)print("===============")# 示例:查看集合键set1中成员的数量。scard = r.scard("set1")print(scard)print("===============")# 示例:查看集合键set1中的所有成员。set1 = r.smembers("set1")for s in set1:print(s.decode())print("===============")# 示例:检查成员mem1是否在集合set1中。sismember = r.sismember("set1", "mem1")print(sismember)print("===============")# 示例:移除集合set1中成员mem3。srem = r.srem("set1", "mem3")print(srem)print("===============")# 示例:把集合set1中成员mem2移动到集合set2中。smove = r.smove("set1", "set2", "mem2")print(smove)print("===============")def hash_operation():print("===========哈希表操作===========")# 示例:给哈希表student添加一个学生信息。hset = r.hset("student:1", "name", "zhangsan")print(hset)hset1 = r.hset("student:1", "age", "19")print(hset1)hset2 = r.hset("student:1", "address", "yunnan")print(hset2)print("===============")# 示例:给哈希表student添加一个学生信息。# 修复:使用 hset 替代 hmset,传入映射字典hmset = r.hset("student:2", mapping={"name": "lisi", "age": "20", "address": "guizhou"})print(hmset)print("===============")# 示例:获取hash键student:2中name字段的值。hget = r.hget("student:2", "name")print(hget.decode() if hget else None)print("===============")# 示例:获取hash键student:2中name、age和address字段的值。hget1 = r.hmget("student:2", ["name", "age", "address"])for s in hget1:print(s.decode() if s else None)print("===============")# 示例:获取hash键student:2中的所有字段和值。student2 = r.hgetall("student:2")for key, value in student2.items():print(f"{key.decode()}: {value.decode()}")print("===============")# 示例:获取hash键student:2中的所有字段。hkeys = r.hkeys("student:2")for s in hkeys:print(s.decode())print("===============")# 示例:获取hash键student:2中的所有值。hvals = r.hvals("student:2")for s in hvals:print(s.decode())print("===============")# 示例:删除hash键student:2中的age和address字段。hdel = r.hdel("student:2", "age", "address")print(hdel)print("===============")def order_set_operation():print("===========有序集合操作===========")# 示例:给有序集合salary添加多个分数和成员。zadd = r.zadd("salary", {"zhangsan": 5000, "lisi": 4500, "wangwu": 6000})print(zadd)print("===============")# 示例:获取有序集合salary中的成员数量。zcard = r.zcard("salary")print(zcard)print("===============")# 示例:计算有序集合中分数在5000-6500之间的成员数量。zcount = r.zcount("salary", 5000, 6500)print(zcount)print("===============")# 示例:根据索引范围获取有序集合salary中的成员。salary = r.zrange("salary", 0, 1)for s in salary:print(s.decode())print("===============")# 示例:获取有序集合salary中成员wangwu的分数。zscore = r.zscore("salary", "wangwu")print(zscore)print("===============")# 示例:移除有序集合salary中成员wangwu。zrem = r.zrem("salary", "wangwu")print(zrem)print("===============")if __name__ == "__main__":flush_db()key_operation()string_operation()list_operation()set_operation()hash_operation()order_set_operation()
2. 项目下载
下载地址:https://download.csdn.net/download/zcs2312852665/90889723