Python操作Redis从基础到高级应用

 更新时间:2026年09月25日 09:21:30   作者:Seal^_^  
本文介绍了Python操作Redis的全面指南,从基础连接到高级应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 环境准备与安装

1.1 安装Redis-Py库

pip install redis

对于异步支持(Python 3.7+):

pip install redis[asyncio]

1.2 连接Redis服务器

基础连接示例:

import redis

# 创建连接池(推荐)
pool = redis.ConnectionPool(host='localhost', port=6379, db=0, password='yourpassword')
r = redis.Redis(connection_pool=pool)

# 简单连接
r = redis.Redis(host='localhost', port=6379, db=0)

2. 基础数据类型操作

2.1 字符串(String)操作

# 设置和获取
r.set('name', 'Alice')
print(r.get('name'))  # 输出: b'Alice'

# 批量操作
r.mset({'key1': 'value1', 'key2': 'value2'})
print(r.mget('key1', 'key2'))  # 输出: [b'value1', b'value2']

# 自增操作
r.set('counter', 1)
r.incr('counter')
print(r.get('counter'))  # 输出: b'2'

2.2 列表(List)操作

# 列表操作
r.lpush('tasks', 'task1', 'task2')
r.rpush('tasks', 'task3')
print(r.lrange('tasks', 0, -1))  # 输出: [b'task2', b'task1', b'task3']

# 弹出元素
task = r.lpop('tasks')
print(task)  # 输出: b'task2'

2.3 哈希(Hash)操作

# 哈希表操作
r.hset('user:1000', mapping={
    'name': 'John',
    'age': '30',
    'email': 'john@example.com'
})

print(r.hgetall('user:1000'))  # 输出: {b'name': b'John', b'age': b'30', b'email': b'john@example.com'}

# 获取单个字段
print(r.hget('user:1000', 'name'))  # 输出: b'John'

2.4 集合(Set)操作

# 集合操作
r.sadd('tags', 'python', 'redis', 'database')
print(r.smembers('tags'))  # 输出: {b'python', b'redis', b'database'}

# 集合运算
r.sadd('tags2', 'python', 'java')
print(r.sinter('tags', 'tags2'))  # 输出: {b'python'}

2.5 有序集合(ZSet)操作

# 有序集合
r.zadd('rankings', {'player1': 100, 'player2': 85, 'player3': 95})
print(r.zrevrange('rankings', 0, 1))  # 输出: [b'player1', b'player3']

3. 高级功能应用

3.1 事务处理

# 事务示例
pipe = r.pipeline()
pipe.set('tx_key1', 'value1')
pipe.set('tx_key2', 'value2')
pipe.execute()  # 提交事务

3.2 发布订阅模式

# 发布端
r.publish('news', 'Breaking news!')

# 订阅端
pubsub = r.pubsub()
pubsub.subscribe('news')

for message in pubsub.listen():
    if message['type'] == 'message':
        print(f"收到消息: {message['data']}")
        break

3.3 Lua脚本执行

# Lua脚本示例
script = """
local current = redis.call('GET', KEYS[1])
local new = current + ARGV[1]
redis.call('SET', KEYS[1], new)
return new
"""

counter = r.eval(script, 1, 'mycounter', 5)
print(counter)  # 输出增量后的值

4. 性能优化技巧

4.1 连接池配置

pool = redis.ConnectionPool(
    max_connections=50,
    host='localhost',
    port=6379,
    decode_responses=True  # 自动解码为字符串
)
r = redis.Redis(connection_pool=pool)

4.2 管道(Pipeline)批量操作

# 管道批量操作
with r.pipeline() as pipe:
    for i in range(1000):
        pipe.set(f'key:{i}', f'value:{i}')
    pipe.execute()  # 一次性提交所有命令

4.3 连接流程图

5. 实战案例:缓存装饰器

def redis_cache(ttl=60):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            # 生成唯一缓存键
            cache_key = f"{func.__name__}:{args}:{frozenset(kwargs.items())}"
            
            # 尝试从缓存获取
            cached = r.get(cache_key)
            if cached is not None:
                return json.loads(cached)
                
            # 缓存未命中,执行函数
            result = func(*args, **kwargs)
            
            # 设置缓存
            r.setex(cache_key, ttl, json.dumps(result))
            return result
        return wrapper
    return decorator

# 使用示例
@redis_cache(ttl=300)
def get_user_profile(user_id):
    # 模拟数据库查询
    time.sleep(2)
    return {"id": user_id, "name": f"User{user_id}", "score": 85}

6. 常见问题解决方案

6.1 连接超时处理

from redis.exceptions import TimeoutError

try:
    r.ping()
except TimeoutError:
    print("Redis连接超时")
    # 重连逻辑
    r = redis.Redis(host='localhost', socket_timeout=5)

6.2 大Key问题检测

# 检测大Key
big_keys = r.execute_command('MEMORY USAGE', 'some_large_key')
if big_keys > 1024 * 1024:  # 大于1MB
    print(f"警告: 大Key detected - {big_keys} bytes")

6.3 集群模式支持

from redis.cluster import RedisCluster

rc = RedisCluster(
    startup_nodes=[
        {"host": "127.0.0.1", "port": "7000"},
        {"host": "127.0.0.1", "port": "7001"}
    ],
    decode_responses=True
)
rc.set("cluster_key", "value")

7. 最佳实践总结

  1. 连接管理:始终使用连接池,避免频繁创建/关闭连接
  2. 数据序列化:使用JSON或Msgpack等格式存储复杂对象
  3. 错误处理:实现健壮的重试机制和降级策略
  4. 性能监控:定期检查慢查询和大Key
  5. 合理过期:为缓存数据设置适当的TTL

8. 扩展资源

通过本指南,您应该已经掌握了Python操作Redis的核心技术。合理使用Redis可以显著提升应用性能,但也要注意数据一致性和内存管理等问题。

到此这篇关于Python操作Redis从基础到高级应用的文章就介绍到这了,更多相关Python操作Redis内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python字符串格式化之f-string高效用法详解

    Python字符串格式化之f-string高效用法详解

    f-string(格式化字符串字面量,formatted string literals)是Python 3.6引入的特性,也是现代Python开发者的首选字符串格式化方式,下面小编就和大家详细介绍一下f-string的高效用法吧
    2026-09-09
  • Django接收自定义http header过程详解

    Django接收自定义http header过程详解

    这篇文章主要介绍了Django接收自定义http header过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 写了个监控nginx进程的Python脚本

    写了个监控nginx进程的Python脚本

    接上一文用iptables让SSH服务对陌生人说不。还是有点担心这个学期内,nginx可能会因为系统各种原因而出现异常退出,导致Web服务暂停。所以,又来了一个方案
    2012-05-05
  • 使用Python读取和修改Excel文件(基于xlrd、xlwt和openpyxl模块)

    使用Python读取和修改Excel文件(基于xlrd、xlwt和openpyxl模块)

    本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件,需要的朋友可以参考下
    2021-11-11
  • python实现简易猜数小游戏

    python实现简易猜数小游戏

    大家好,本篇文章主要讲的是python实现简易猜数小游戏,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Python测试框架pytest核心库pluggy详解

    Python测试框架pytest核心库pluggy详解

    这篇文章主要为大家介绍了Python测试框架pytest核心库pluggy使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 基于python实现图书管理系统

    基于python实现图书管理系统

    这篇文章主要为大家详细介绍了基于python实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • django authentication 登录注册的实现示例

    django authentication 登录注册的实现示例

    本文主要介绍了使用Django内置的authentication功能实现用户注册和登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • python实现DNS正向查询、反向查询的例子

    python实现DNS正向查询、反向查询的例子

    这篇文章主要介绍了python实现DNS正向查询、反向查询的例子,需要的朋友可以参考下
    2014-04-04
  • 基于Python开发一个PDF文件元数据查看器

    基于Python开发一个PDF文件元数据查看器

    这篇文章主要介绍了如何基于Python开发PDF文件元数据查看器,包括作者信息、创建或修改日期、所用产品信息等,文中有完整的代码示例供大家参考,需要的朋友可以参考下
    2026-01-01

最新评论