Python 连接 Redis 进行增删改查(CRUD)操作

news/2024/11/14 13:21:18/

文章目录

  • Python 连接 Redis 进行增删改查(CRUD)操作
  • 介绍
  • 安装 `redis-py`
  • 连接 Redis
  • 增加(Create)
  • 查询(Read)
  • 更新(Update)
  • 删除(Delete)
  • 其他常用操作
    • 检查键是否存在
    • 设置键的过期时间
    • 获取键的过期时间
    • 使用哈希类型存储数据
  • 总结
  • 完整示例
    • 代码说明:
    • 运行结果示例:
    • 总结


Python 连接 Redis 进行增删改查(CRUD)操作

介绍

Redis 是一个开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),广泛用于缓存、会话管理、消息队列等场景。本文将介绍如何在 Python 中使用 redis-py 库连接 Redis 数据库,并进行常见的增删改查操作。

redispy_10">安装 redis-py

首先,需要安装 redis-py 库,这是 Python 与 Redis 交互的官方客户端。

pip install redis

连接 Redis

在进行增删改查操作前,我们首先需要连接到 Redis 服务器。假设 Redis 服务运行在本地默认端口 6379。

python">import redis# 连接到 Redis 服务
r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True)

参数说明:

  • host:Redis 服务的主机,默认是 'localhost'
  • port:Redis 服务的端口,默认是 6379
  • db:选择使用的数据库,Redis 默认有 16 个数据库,编号从 0 到 15,默认连接的是 db=0
  • decode_responses=True:确保返回的结果是字符串,而不是字节。

增加(Create)

Redis 支持多种数据结构的操作,我们可以使用 set() 方法来设置一个键值对。

python"># 设置一个字符串类型的键值对
r.set('name', 'John Doe')# 设置多个键值对
r.mset({'age': 30, 'city': 'New York'})
  • set():设置一个键的值,如果该键已经存在,则会覆盖原有的值。
  • mset():批量设置多个键值对。

查询(Read)

可以通过 get() 方法来获取 Redis 中存储的值。

python"># 获取单个键的值
name = r.get('name')
print(f'Name: {name}')  # 输出: Name: John Doe# 获取多个键的值
values = r.mget('name', 'age', 'city')
print(values)  # 输出: ['John Doe', '30', 'New York']
  • get():获取指定键的值。
  • mget():批量获取多个键的值。

更新(Update)

Redis 的更新操作其实是通过 set() 来实现的,因为 set() 会覆盖已存在的键值对。

python"># 更新键 'age' 的值
r.set('age', 35)
print(r.get('age'))  # 输出: 35

删除(Delete)

如果需要删除一个键值对,可以使用 delete() 方法。

python"># 删除键 'city'
r.delete('city')
print(r.get('city'))  # 输出: None,因为键 'city' 已被删除
  • delete():删除指定的键,如果键不存在,什么都不做。

其他常用操作

除了基本的 CRUD 操作外,Redis 还支持一些其他有用的操作:

检查键是否存在

python"># 检查键 'name' 是否存在
exists = r.exists('name')
print(exists)  # 输出: True

设置键的过期时间

python"># 设置键 'name' 在 10 秒后过期
r.expire('name', 10)

获取键的过期时间

python"># 获取键 'name' 的剩余过期时间
ttl = r.ttl('name')
print(ttl)  # 输出: 剩余的秒数

使用哈希类型存储数据

Redis 还支持哈希类型,适用于存储结构化数据。可以使用 hset(), hget() 等方法操作哈希。

python"># 设置哈希键 'user',并存储字段 'name' 和 'age'
r.hset('user', 'name', 'John Doe')
r.hset('user', 'age', 30)# 获取哈希中的字段
name = r.hget('user', 'name')
age = r.hget('user', 'age')
print(f'Name: {name}, Age: {age}')

总结

本文展示了如何在 Python 中使用 redis-py 库连接 Redis 并进行增删改查操作。Redis 的灵活性和高效性使其成为构建高性能应用的理想选择。除了本文介绍的基本操作,Redis 还提供了许多高级功能,如事务、管道、发布订阅等,可以根据具体应用场景进一步扩展。


完整示例

展示如何使用 Python 连接 Redis,并进行增、查、改、删等操作。将使用 redis-py 库,并使用 Redis 的多种数据结构进行操作。示例将包括基本的字符串操作、哈希操作、以及如何设置键的过期时间。

python">import redis# 连接到 Redis 服务
r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True)# 1. 增加(Create)操作
# 设置字符串类型的键值对
r.set('name', 'John Doe')
r.set('age', 30)
r.set('city', 'New York')# 设置一个哈希类型的键值对
r.hset('user:1000', 'name', 'Alice')
r.hset('user:1000', 'age', 25)# 批量设置多个键值对
r.mset({'country': 'USA', 'language': 'English'})# 打印结果
print(f"Set 'name': {r.get('name')}")
print(f"Set 'age': {r.get('age')}")
print(f"Set 'city': {r.get('city')}")
print(f"Set 'country' and 'language': {r.mget('country', 'language')}")# 2. 查询(Read)操作
# 获取单个键值
print("\n--查询操作--")
name = r.get('name')
print(f"Name: {name}")# 获取多个键值
user_data = r.mget('name', 'age', 'city', 'country', 'language')
print(f"User data: {user_data}")# 获取哈希中的字段
user_name = r.hget('user:1000', 'name')
user_age = r.hget('user:1000', 'age')
print(f"User 1000 Name: {user_name}, Age: {user_age}")# 3. 更新(Update)操作
# 更新字符串类型的值
r.set('age', 35)
print(f"Updated 'age': {r.get('age')}")# 更新哈希中的字段
r.hset('user:1000', 'age', 26)
print(f"Updated 'user:1000' age: {r.hget('user:1000', 'age')}")# 4. 删除(Delete)操作
# 删除单个键
r.delete('city')
print(f"Deleted 'city', current value: {r.get('city')}")# 删除哈希中的字段
r.hdel('user:1000', 'name')
print(f"Deleted 'name' from 'user:1000', current fields: {r.hgetall('user:1000')}")# 5. 设置键的过期时间
# 设置 'country' 键在 5 秒后过期
r.expire('country', 5)
print(f"Is 'country' key expired? {r.exists('country')}")  # 初始为 True# 等待 6 秒钟,键应该过期
import time
time.sleep(6)
print(f"After waiting 6 seconds, is 'country' expired? {r.exists('country')}")  # 应该为 False# 6. 其他操作:检查键是否存在
key_exists = r.exists('name')
print(f"Does 'name' exist? {key_exists}")# 获取键的剩余生存时间
ttl = r.ttl('age')
print(f"The remaining time-to-live for 'age' is: {ttl} seconds")# 获取哈希中所有字段和值
user_data_all = r.hgetall('user:1000')
print(f"All fields in 'user:1000': {user_data_all}")# 完成
print("\n-- 完成所有操作 --")

代码说明:

  1. 连接 Redis
    使用 redis.StrictRedis() 来创建一个 Redis 连接对象,指定主机名、端口和数据库索引。这里使用了 decode_responses=True,让返回的结果是字符串而不是字节。

  2. 增(Create)操作

    • 使用 set() 设置字符串类型的键值对。
    • 使用 hset() 设置哈希类型的字段。
    • 使用 mset() 批量设置多个键值对。
  3. 查(Read)操作

    • 使用 get() 获取单个字符串类型的值。
    • 使用 mget() 批量获取多个键的值。
    • 使用 hget() 获取哈希类型的指定字段的值。
    • 使用 hgetall() 获取哈希中所有的字段及其对应的值。
  4. 改(Update)操作
    更新操作通过调用 set()hset() 来实现。Redis 会自动覆盖已有的值。

  5. 删(Delete)操作

    • 使用 delete() 删除单个键。
    • 使用 hdel() 删除哈希中的某个字段。
  6. 过期时间
    使用 expire() 设置键的过期时间,单位为秒。使用 ttl() 获取剩余的生存时间。

  7. 检查键是否存在
    使用 exists() 判断一个键是否存在。

运行结果示例:

Set 'name': John Doe
Set 'age': 30
Set 'city': New York
Set 'country' and 'language': ['USA', 'English']--查询操作--
Name: John Doe
User data: ['John Doe', '30', 'New York', 'USA', 'English']
User 1000 Name: Alice, Age: 25Updated 'age': 35
Updated 'user:1000' age: 26
Deleted 'city', current value: None
Deleted 'name' from 'user:1000', current fields: {'age': '26'}Is 'country' key expired? True
After waiting 6 seconds, is 'country' expired? False
Does 'name' exist? True
The remaining time-to-live for 'age' is: -1 seconds
All fields in 'user:1000': {'age': '26'}-- 完成所有操作 --

总结

通过这个完整的示例,我们展示了如何使用 Python 通过 redis-py 库与 Redis 进行基本的增删改查操作,并且涵盖了 Redis 中一些常用的功能,如设置过期时间和检查键是否存在。这些操作适用于缓存管理、会话存储、实时数据处理等应用场景。


http://www.ppmy.cn/news/1546938.html

相关文章

MySQL数据库常用命令大全(完整版——表格形式)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

C语言 | Leetcode C语言题解之第552题学生出勤记录II

题目: 题解: const int MOD 1000000007;struct Matrix {long mat[6][6];int row, col; };struct Matrix multiply(struct Matrix a, struct Matrix b) {int rows a.row, columns b.col, temp b.row;struct Matrix c;memset(c.mat, 0, sizeof(c.mat)…

MySQL技巧之跨服务器数据查询:基础篇-如何获取查询语句中的参数

MySQL技巧之跨服务器数据查询:基础篇-如何获取查询语句中的参数 上一篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQL 以…

Flink CEP 入门

1.复杂事件处理 大数据应用领域存在业务逻辑非常复杂的应用系统,比如,一个应用要检测特定顺序先后发生的一组事件,对事件组进行分析或报警提示,若使用SQL 或者DataStream API 处理这类应用,过程相对来说比较…

「QT」几何数据类 之 QLine 整型直线类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

学术论文写作丨机器学习与深度学习

目录 第一章、ChatGPT-4o使用方法与技巧 第二章、ChatGPT-4o辅助文献检索、总结与分析 第三章、ChatGPT-4o辅助学术论文选题、创新点挖掘与实验方案设计 第四章、ChatGPT-4o辅助学术论文开题与大纲生成 第五章、ChatGPT-4o辅助学术论文写作马拉松活动介绍 第六章、ChatGP…

.Net Core根据文件名称自动注入服务

.Net Core根据文件名称自动注入服务 说明分析逻辑所有代码一键注入 说明 这个适用于.Net Core 的Web项目,且需要在服务中注入接口的需求.因为之前些Java Web习惯了,所以会有Dao层,Serivce层和Controller层.但是如果一个项目里面对于不同的数据库会有多个Dao,如果一个一个引入会…

【数据结构】10.线索二叉树

一、线索二叉树的产生 采用先序、中序、后序三种方法遍历二叉树后都可以得到一个线性序列,序列上的每一个结点(除了第一个和最后一个)都有一个前驱和一个后继,但是,这个线性序列只是逻辑的概念,不是物理结…