文章目录
前言
本文是基于 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