本文目录导读:

我来为您详细介绍Python连接Redis缓存的几种常见方式:
基础安装
pip install redis
基本连接方式
1 基础连接
import redis
# 方式1:直接连接(默认连接本地6379端口)
r = redis.Redis(host='localhost', port=6379, db=0)
# 方式2:使用URL连接
r = redis.from_url('redis://localhost:6379/0')
# 测试连接
print(r.ping()) # 返回True表示连接成功
2 带密码的连接
# 有密码认证
r = redis.Redis(
host='localhost',
port=6379,
password='your_password',
db=0,
decode_responses=True # 自动解码返回为字符串
)
连接池方式(推荐)
import redis
# 创建连接池
pool = redis.ConnectionPool(
host='localhost',
port=6379,
password='your_password',
db=0,
max_connections=10, # 最大连接数
decode_responses=True
)
# 从连接池获取连接
r = redis.Redis(connection_pool=pool)
完整案例:用户缓存系统
import redis
import json
import time
class RedisCache:
def __init__(self):
# 初始化连接池
self.pool = redis.ConnectionPool(
host='localhost',
port=6379,
db=0,
decode_responses=True
)
self.client = redis.Redis(connection_pool=self.pool)
def set_user(self, user_id, user_data, expire=3600):
"""设置用户缓存"""
key = f"user:{user_id}"
# 将字典转为JSON字符串存储
value = json.dumps(user_data)
# 设置过期时间(秒)
return self.client.setex(key, expire, value)
def get_user(self, user_id):
"""获取用户缓存"""
key = f"user:{user_id}"
value = self.client.get(key)
if value:
return json.loads(value)
return None
def delete_user(self, user_id):
"""删除用户缓存"""
key = f"user:{user_id}"
return self.client.delete(key)
def is_logged_in(self, user_id):
"""检查用户是否在线"""
key = f"session:{user_id}"
return self.client.exists(key)
# 使用示例
def main():
cache = RedisCache()
# 设置用户缓存
user_info = {
"id": 1001,
"name": "张三",
"email": "zhangsan@example.com",
"login_time": time.time()
}
cache.set_user(1001, user_info)
# 获取用户缓存
cached_user = cache.get_user(1001)
print(f"缓存用户信息: {cached_user}")
# 删除缓存
cache.delete_user(1001)
if __name__ == "__main__":
main()
Redis Sentinel(哨兵模式)
from redis.sentinel import Sentinel
# 连接哨兵
sentinel = Sentinel([
('sentinel-host1', 26379),
('sentinel-host2', 26379),
], socket_timeout=0.1)
# 获取主节点连接
master = sentinel.master_for('mymaster', socket_timeout=0.1)
# 获取从节点连接(用于读操作)
slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
# 使用主节点写入
master.set('key', 'value')
# 使用从节点读取
value = slave.get('key')
Redis Cluster(集群模式)
from rediscluster import RedisCluster
# 安装:pip install redis-py-cluster
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)
# 使用示例
rc.set("foo", "bar")
print(rc.get("foo"))
常用操作方法
# 字符串操作
r.set('key', 'value')
r.get('key')
r.setex('key', 60, 'value') # 设置过期时间60秒
# 列表操作
r.lpush('list', 'a', 'b', 'c')
r.rpush('list', 'd', 'e')
r.lrange('list', 0, -1) # 获取所有元素
# 哈希操作
r.hset('hash', 'field', 'value')
r.hget('hash', 'field')
r.hgetall('hash')
# 集合操作
r.sadd('set', 'a', 'b', 'c')
r.smembers('set') # 获取所有元素
# 有序集合
r.zadd('zset', {'a': 1, 'b': 2, 'c': 3})
r.zrange('zset', 0, -1, withscores=True)
异常处理
import redis
from redis.exceptions import ConnectionError, TimeoutError
class RedisClient:
def __init__(self):
self.client = None
self.connect()
def connect(self):
try:
self.client = redis.Redis(
host='localhost',
port=6379,
socket_connect_timeout=2, # 连接超时
socket_timeout=2, # 操作超时
retry_on_timeout=True, # 超时重试
decode_responses=True
)
self.client.ping()
print("Redis连接成功")
except (ConnectionError, TimeoutError) as e:
print(f"Redis连接失败: {e}")
def get_data(self, key):
try:
return self.client.get(key)
except Exception as e:
print(f"获取数据失败: {e}")
return None
注意事项
- 连接池管理:生产环境务必使用连接池
- 异常处理:做好连接超时、异常重试机制
- 数据序列化:复杂对象需要序列化(JSON、pickle等)
- 内存管理:合理设置过期时间,避免内存溢出
- 安全认证:生产环境要设置密码,避免暴露在公网
这些是Python连接Redis的主流方式,您可以根据实际场景选择合适的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播