博客
关于我
python redis用法详解
阅读量:101 次
发布时间:2019-02-26

本文共 4118 字,大约阅读时间需要 13 分钟。

Python 操作 Redis 用法详解

作为一名开发人员,Redis 在缓存和数据存储领域一直扮演着重要角色。为了帮助你更好地理解和使用 Python 操作 Redis,本文将从基础知识开始,逐步引导你掌握 Redis 在 Python 中的应用方法。

Redis 连接

Redis 提供了两个主要的类:RedisStrictRedisStrictRedisRedis 的子类,主要用于兼容旧版本的 redis-py。它支持大部分 Redis 命令,并遵循官方的语法和命令结构。

当你需要操作多个 Redis 数据库或实例时,可以通过重新创建 Redis 实例来实现切换。值得注意的是,Python 的 Redis 模块没有实现 SELECT 命令,因此每次连接都需要指定明确的主机和端口。

安装 Redis

通过以下命令可以安装 Redis 模块:

pip install redis

连接 Redis

在代码中使用 Redis:

import redis
# 创建 Redis 实例,指定主机和端口,默认使用 Redis 默认端口 6379
redis_instance = redis.Redis(host='localhost', port=6379, decode_responses=True)
# 参数说明:
# - `decode_responses`:默认 `False`,表示读取的值将以字节类型返回。设置为 `True` 会将值转换为字符串类型。

简单的操作示例

# 创建新的键值对
redis_instance.set('name', 'junxi')
# 获取键值对信息
print(redis_instance.get('name')) # 输出: b'junxi'
# 删除键值对
redis_instance.delete('name')
# 批量删除多个键值对
redis_instance.delete('name', 'age')

Redis 的其他操作

设置键值对

Redis 提供了多种方式设置键值对,以下是常用的方法:

# 使用 `set` 方法设置键值对
redis_instance.set('key', 'value')
# 使用 `hset` 方法设置哈希键值对
redis_instance.hset('hash_key', 'field', 'value')
# 使用 `zset` 方法设置有序集合键值对
redis_instance.zset('sorted_set', 'member1', 'member2')
# 使用 `incr` 方法递增键值
redis_instance.incr('counter', 5)

查询键值

Redis 提供了多种方法来查询键值:

# 使用 `get` 方法获取单个键值
print(redis_instance.get('key'))
# 使用 `hget` 方法获取哈希字段值
print(redis_instance.hget('hash_key', 'field'))
# 使用 `zget` 方法获取有序集合成员
print(redis_instance.zget('sorted_set', 'member1'))
# 使用 `smembers` 方法获取集合所有成员
print(redis_instance.smembers('set_members'))

操作集合

Redis 提供了丰富的集合操作命令,例如 saddspopsadd 等:

# 将成员添加到集合
redis_instance.sadd('set_members', 'member1', 'member2')
# 移除集合中的成员
redis_instance.spop('set_members')
# 获取集合中的随机成员
print(redis_instance.srandmember('set_members'))
# 获取集合的大小
print(len(redis_instance.smembers('set_members')))

Redis事务

Redis 事务可以通过 MULTIEXEC 等命令来实现,确保一系列命令作为一个原子操作执行。不过,需要注意的事务在 Redis 中有一定的 overhead,因此在高并发场景下需要谨慎使用。

# 开启事务
redis_instance.begin()
# 执行事务中的多个命令
redis_instance.set('t1', 'value1')
redis_instance.set('t2', 'value2')
# 提交事务
redis_instance.exec()

Redis持久化

Redis 提供了几种持久化方式,如 RDBAOFPFAS。以下是简单的持久化操作示例:

生成 RDB 持久化文件

# 停止 Redis 服务
systemctl stop redis-server
# 生成 RDB 持久化文件
redis_instance.save()
# 恢复 Redis 数据
redis-server --loaddump /path/to/rdb.dump

生成 AOF 持久化文件

# 停止 Redis 服务
systemctl stop redis-server
# 生成 AOF 持久化文件
redis_instance.append('rdb') # 仅在 Redis 6.0+ 可用
# 恢复 Redis 数据
redis-server --load rdb

Redis高级功能

Redis Pub/Sub

Redis Pub/Sub 是一个轻量级的消息发布/订阅系统,适用于实时数据传输和事件驱动的场景。

# 发布消息
redis_instance.publish('channel', 'message')
# 订阅消息
def message_handler(ch):
print(f"接收到消息:{ch}, 内容:{message}")
# 创建订阅者
redis_instance.subscriptor('channel', message_handler)
# 取消订阅
redis_instance unsubscriptor('channel', message_handler)

Redis 键空间

Redis 键空间(Keyspace)提供了强大的键值查询功能,可以根据键的类型(如字符串、哈希、集合、列表)执行复杂的查询操作。

# 获取所有键
print(redis_instance.keys('*'))
# 获取特定模式的键
print(redis_instance.keys('prefix:*'))
# 删除多个键
redis_instance.delete(*['key1', 'key2'])

Redis 事务和管道

Redis 事务和管道都是优化 Redis 性能的重要工具。事务可以确保一系列命令作为一个原子操作执行,而管道则可以减少客户端延迟。

# 开启事务模式
redis_instance.watch()
# 执行事务中的命令
redis_instance.set('t1', 'value1')
redis_instance.set('t2', 'value2')
# 提交事务
redis_instance.execute()

Redis 批处理

Redis 批处理可以通过 pipelinelua脚本来实现,以减少客户端延迟。

# 开启批处理模式
redis_instance.pipelining()
# 执行批量命令
redis_instance.set('t1', 'value1')
redis_instance.set('t2', 'value2')
# 提交批量命令
redis_instance.execute()

Redis 安全

在生产环境中,Redis 安全是非常重要的一环。以下是一些常用的安全措施:

Redis密码

在 Redis 中设置密码可以通过以下命令实现:

redis-server --require-pass

Redis 访问控制

可以通过设置 Redis 的访问控制列表(ACL)来限制用户的操作权限。

redis-server --acl file:rw, user:alice,ip:192.168.1.1,db:0,sub:read

Redis 监控和告警

为了保证 Redis 的稳定性,可以通过工具如 RedisMonPrometheus 实现监控和告警。

# 安装监控工具
git clone https://github.com/RedisMon/RedisMon.git
cd RedisMon
./redismonit
# 在监控系统中添加 Redis 实例

Redis 故障排除

在实际应用中,可能会遇到一些常见问题,如连接超时、数据丢失等。以下是一些常见问题的解决方法:

连接超时

# 修改 Redis 连接参数,增加超时时间
redis_instance = redis.Redis(
host='localhost',
port=6379,
decode_responses=True,
timeout=5 # 超时时间
)

数据丢失

# 恢复数据
redis_instance.restore()

慢查询

# 清除旧的键值对
redis_instance.flushdb()

总结

通过本文的内容,你已经掌握了 Python 操作 Redis 的基本用法和一些高级功能。Redis 作为一款强大的开源数据库,在现代应用中发挥着重要作用。希望本文能为你的 Redis 开发之路提供帮助。如果你有更多问题或需要更深入的内容,欢迎在技术社区交流。

转载地址:http://jhxk.baihongyu.com/

你可能感兴趣的文章
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>