自学内容网 自学内容网

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


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-- 完成所有操作 --")

代码说明:

  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: 25

Updated '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 中一些常用的功能,如设置过期时间和检查键是否存在。这些操作适用于缓存管理、会话存储、实时数据处理等应用场景。


原文地址:https://blog.csdn.net/weixin_42434700/article/details/143616023

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!