介绍
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: 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 中一些常用的功能,如设置过期时间和检查键是否存在。这些操作适用于缓存管理、会话存储、实时数据处理等应用场景。
到此这篇关于python连接redis进行增删改查(crud)操作的文章就介绍到这了,更多相关python连接redis增删改查内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论