仿牛客社区项目笔记-优化登陆模块(使用Redis)
1. 优化登陆模块
- 使用Redis存储验证码,存储登陆凭证已经在 UserService 层重构完成,详情见 仿牛客社区项目笔记-注册登录模块 :2.1,2.2,2.7小节。
- 使用Redis缓存用户信息也已经在 UserService 层重构完成。代码为:
// 1.优先从缓存中取值
private User getCache(int userId) {
String redisKey = RedisKeyUtil.getUserKey(userId);
return (User) redisTemplate.opsForValue().get(redisKey);
}
// 2.取不到时初始化缓存数据
private User initCache(int userId) {
User user = userMapper.selectById(userId);
String redisKey = RedisKeyUtil.getUserKey(userId);
redisTemplate.opsForValue().set(redisKey, user, 3600, TimeUnit.SECONDS);
return user;
}
// 3.数据变更时清除缓存数据
private void clearCache(int userId) {
String redisKey = RedisKeyUtil.getUserKey(userId);
redisTemplate.delete(redisKey);
}
以 findUserById 方法为例:先从缓存中获取用户,获取不到则初始化缓存数据。
public User findUserById(int id) {
// return userMapper.selectById(id);
User user = getCache(id);
if (user == null) {
user = initCache(id);
}
return user;
}
若用户信息修改,则清楚缓存数据:
public int updateHeader(int userId, String headerUrl) {
// return userMapper.updateHeader(userId, headerUrl);
int rows = userMapper.updateHeader(userId, headerUrl);
clearCache(userId);
return rows;
}