用户信息使用比较频繁,登录时把用户信息已hash值的方式存入redis表内,代码中若需要用户信息,优先从redis表内获取,获取不到再到mysql内查找(同时写入信息到redis),若用户信息有更新,需同步到redis库内。代码写一下
时间: 2024-11-25 15:13:33 浏览: 18
在Python中,我们可以使用Redis作为快速数据存储来提升用户信息查询的性能。首先,你需要安装`redis`库(如果还没有的话)。这里是一个简单的示例,展示如何操作Redis并实现这个需求:
```python
import redis
import hashlib
from sqlalchemy import create_engine
# 初始化Redis连接
redis_client = redis.Redis(host='localhost', port=6379, db=0) # 根据实际情况调整host和port
# 初始化数据库连接
engine = create_engine('your_mysql_connection_string') # 用你的MySQL连接字符串替换
def get_user_info_from_redis(user_id):
hashed_id = hashlib.sha256(str(user_id).encode()).hexdigest() # 对用户ID进行哈希处理
user_info_key = 'user:' + hashed_id
user_info = redis_client.get(user_info_key)
if user_info is not None:
return user_info.decode() # 解码bytes为str
else:
with engine.connect() as conn:
result = conn.execute("SELECT * FROM users WHERE id = ?", (user_id,))
user_data = result.fetchone()
if user_data:
# 将用户数据保存到Redis,并返回
user_info = json.dumps(user_data) # 使用json将数据转为字典序列化
redis_client.setex(user_info_key, 3600, user_info) # 设置过期时间(1小时)
return user_info
else:
return None
def update_user_info_in_redis(user_id, updated_info):
hashed_id = hashlib.sha256(str(user_id).encode()).hexdigest()
user_info_key = 'user:' + hashed_id
redis_client.set(user_info_key, updated_info)
# 同步到MySQL(实际应用中可以考虑异步处理)
sync_to_mysql(user_id, updated_info)
def sync_to_mysql(user_id, updated_info):
# 这里省略了具体的SQL插入操作,直接更新用户的记录即可
pass # 用你的SQL语句替换这里的None
# 使用示例
user_id = 123
user_info = get_user_info_from_redis(user_id)
```
阅读全文