在Python中操作Redis及其集群,常用的库为redis(用于单节点Redis)和redis-py-cluster(用于Redis集群)。以下是详细操作指南:


​一、Python操作单节点Redis​

1. 安装库

pip install redis

2. 连接Redis

import redis

# 直接连接
r = redis.Redis(host='localhost', port=6379, db=0, password='your_password')

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

3. 基本操作示例

# 字符串操作
r.set('key1', 'value1')
value = r.get('key1')
print(value.decode())  # 输出: value1

# 哈希表操作
r.hset('user:1', 'name', 'Alice')
r.hset('user:1', 'age', 30)
user = r.hgetall('user:1')
print(user)  # 输出: {b'name': b'Alice', b'age': b'30'}

# 列表操作
r.lpush('mylist', 'a', 'b', 'c')
items = r.lrange('mylist', 0, -1)
print(items)  # 输出: [b'c', b'b', b'a']

# 设置过期时间
r.expire('key1', 60)  # 60秒后过期

# 删除键
r.delete('key1')

4. 管道(Pipeline)

pipe = r.pipeline()
pipe.set('key2', 'value2')
pipe.get('key2')
result = pipe.execute()
print(result)  # 输出: [True, b'value2']

​二、Python操作Redis集群​

1. 安装库

pip install redis-py-cluster

2. 连接Redis集群

from rediscluster import RedisCluster

startup_nodes = [
    {"host": "127.0.0.1", "port": 7000},
    {"host": "127.0.0.1", "port": 7001},
    {"host": "127.0.0.1", "port": 7002}
]

# 连接集群
rc = RedisCluster(
    startup_nodes=startup_nodes,
    decode_responses=True,  # 自动解码为字符串
    password='your_password'
)

3. 基本操作示例

# 写入数据
rc.set('cluster_key', 'cluster_value')

# 读取数据
value = rc.get('cluster_key')
print(value)  # 输出: cluster_value

# 哈希操作
rc.hset('user:100', 'name', 'Bob')
rc.hset('user:100', 'age', 25)
user_data = rc.hgetall('user:100')
print(user_data)  # 输出: {'name': 'Bob', 'age': '25'}

# 处理多个键(需确保在同一槽)
# 使用{}强制指定哈希标签,确保key分配到同一槽
rc.mset({"{tag}key1": "value1", "{tag}key2": "value2"})

4. 错误处理

from rediscluster.exceptions import RedisClusterException

try:
    rc.get('non_existent_key')
except RedisClusterException as e:
    print(f"Error: {e}")

​三、注意事项​

  1. 集群模式限制​:

    • 跨槽的多键操作(如mgetmset)需使用{}定义哈希标签,确保键在同一槽。

    • 事务(Transaction)和Lua脚本在集群中需所有键在同一槽。

  2. 连接池​:

    • 单节点建议使用连接池提升性能。

    • 集群模式下连接池由库自动管理。

  3. 兼容性​:

    • 某些命令在集群模式不可用(如KEYS *),需替换为SCAN

  4. 性能优化​:

    • 使用管道(Pipeline)减少网络往返次数。

    • 避免大键(Big Key)和慢查询。


​四、官方文档​

  • redis-py​:https://redis-py.readthedocs.io/

  • redis-py-cluster​:https://redis-py-cluster.readthedocs.io/

通过以上方法,可以高效地在Python中操作Redis及Redis集群。