Python 连接 Redis 进行增删改查(CRUD)操作
文章目录
- Python 连接 Redis 进行增删改查(CRUD)操作
- 介绍
- 安装 `redis-py`
- 连接 Redis
- 增加(Create)
- 查询(Read)
- 更新(Update)
- 删除(Delete)
- 其他常用操作
- 检查键是否存在
- 设置键的过期时间
- 获取键的过期时间
- 使用哈希类型存储数据
- 总结
- 完整示例
- 代码说明:
- 运行结果示例:
- 总结
Python 连接 Redis 进行增删改查(CRUD)操作
介绍
Redis 是一个开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),广泛用于缓存、会话管理、消息队列等场景。本文将介绍如何在 Python 中使用 redis-py
库连接 Redis 数据库,并进行常见的增删改查操作。
安装 redis-py
首先,需要安装 redis-py
库,这是 Python 与 Redis 交互的官方客户端。
pip install redis
连接 Redis
在进行增删改查操作前,我们首先需要连接到 Redis 服务器。假设 Redis 服务运行在本地默认端口 6379。
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()
方法来设置一个键值对。
# 设置一个字符串类型的键值对
r.set('name', 'John Doe')# 设置多个键值对
r.mset({'age': 30, 'city': 'New York'})
set()
:设置一个键的值,如果该键已经存在,则会覆盖原有的值。mset()
:批量设置多个键值对。
查询(Read)
可以通过 get()
方法来获取 Redis 中存储的值。
# 获取单个键的值
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()
会覆盖已存在的键值对。
# 更新键 'age' 的值
r.set('age', 35)
print(r.get('age')) # 输出: 35
删除(Delete)
如果需要删除一个键值对,可以使用 delete()
方法。
# 删除键 'city'
r.delete('city')
print(r.get('city')) # 输出: None,因为键 'city' 已被删除
delete()
:删除指定的键,如果键不存在,什么都不做。
其他常用操作
除了基本的 CRUD 操作外,Redis 还支持一些其他有用的操作:
检查键是否存在
# 检查键 'name' 是否存在
exists = r.exists('name')
print(exists) # 输出: True
设置键的过期时间
# 设置键 'name' 在 10 秒后过期
r.expire('name', 10)
获取键的过期时间
# 获取键 'name' 的剩余过期时间
ttl = r.ttl('name')
print(ttl) # 输出: 剩余的秒数
使用哈希类型存储数据
Redis 还支持哈希类型,适用于存储结构化数据。可以使用 hset()
, hget()
等方法操作哈希。
# 设置哈希键 '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 的多种数据结构进行操作。示例将包括基本的字符串操作、哈希操作、以及如何设置键的过期时间。
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-- 完成所有操作 --")
代码说明:
-
连接 Redis
使用redis.StrictRedis()
来创建一个 Redis 连接对象,指定主机名、端口和数据库索引。这里使用了decode_responses=True
,让返回的结果是字符串而不是字节。 -
增(Create)操作
- 使用
set()
设置字符串类型的键值对。 - 使用
hset()
设置哈希类型的字段。 - 使用
mset()
批量设置多个键值对。
- 使用
-
查(Read)操作
- 使用
get()
获取单个字符串类型的值。 - 使用
mget()
批量获取多个键的值。 - 使用
hget()
获取哈希类型的指定字段的值。 - 使用
hgetall()
获取哈希中所有的字段及其对应的值。
- 使用
-
改(Update)操作
更新操作通过调用set()
或hset()
来实现。Redis 会自动覆盖已有的值。 -
删(Delete)操作
- 使用
delete()
删除单个键。 - 使用
hdel()
删除哈希中的某个字段。
- 使用
-
过期时间
使用expire()
设置键的过期时间,单位为秒。使用ttl()
获取剩余的生存时间。 -
检查键是否存在
使用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 中一些常用的功能,如设置过期时间和检查键是否存在。这些操作适用于缓存管理、会话存储、实时数据处理等应用场景。