// 登录验证码
public static String getKaptchaKey(String owner) {
return PREFIX_KAPTCHA + SPLIT + owner;
}
//生成验证码key保存到cookie
String kaptchaOwner=CommunityUtil.generateUUID();
Cookie cookie=new Cookie("kaptchaOwner",kaptchaOwner);
cookie.setMaxAge(60);
cookie.setPath(contextPath);
httpServletResponse.addCookie(cookie);
//保存验证码到Redis
String redisKey= RedisKeyUtil.getKaptchaKey(kaptchaOwner);
redisTemplate.opsForValue().set(redisKey,text,60, TimeUnit.SECONDS);
// 检查验证码
// String kaptcha = (String) session.getAttribute("KaptchaCode");
String kaptcha=null;
if(StringUtils.isNotBlank(kaptchaOwner))
{
String redisKey=RedisKeyUtil.getKaptchaKey(kaptchaOwner);
kaptcha =(String) redisTemplate.opsForValue().get(redisKey);
}
// 登录的凭证
public static String getTicketKey(String ticket) {
return PREFIX_TICKET + SPLIT + ticket;
}
把之前的LoginTicketMapper设置为不推荐使用
//使用Redis来存储登录凭证
String redisKey= RedisKeyUtil.getTicketKey(loginTicket.getTicket());
redisTemplate.opsForValue().set(redisKey,loginTicket);
退出的时候把登录凭证的状态设置为1,在重新放入Redis,没有直接删除,因为需要保存用户登录信息
//退出
public void logout(String ticket)
{
//LoginTicket loginTicket = loginTicketMapper.selectLoginTicket(ticket);
//System.out.println("退出时候的Expired"+loginTicket.getExpired());
//loginTicketMapper.updateLoginTicket(ticket,1);
//使用Redis来修改状态
String redisKey= RedisKeyUtil.getTicketKey(ticket);
LoginTicket loginTicket = (LoginTicket)redisTemplate.opsForValue().get(redisKey);
loginTicket.setStatus(1);
redisTemplate.opsForValue().set(redisKey,loginTicket);
}
public LoginTicket findLoginTicket(String ticket) {
//return loginTicketMapper.selectLoginTicket(ticket);
String redisKey= RedisKeyUtil.getTicketKey(ticket);
LoginTicket loginTicket = (LoginTicket)redisTemplate.opsForValue().get(redisKey);
return loginTicket;
}
1、当查询的时候,优先从缓存中取值;
2、缓存中取不到的时候初始化缓存数据;
3、数据变更时清除缓存数据(如果采取更新缓存中数据的方法可能会带来并发问题,并且比较繁琐);
直接存取user对象,会序列化成Json字符串
private static final String PREFIX_USER = "user";
// 用户
public static String getUserKey(int userId) {
return PREFIX_USER + SPLIT + userId;
}
//1、当查询的时候,优先从缓存中取值;
private User getCache(int userId)
{
String redisKey=RedisKeyUtil.getUserLikeKey(userId);
return (User)redisTemplate.opsForValue().get(redisKey);
}
//2、缓存中取不到的时候初始化缓存数据;
private User initCache(int userId)
{
User user=userMapper.queryById(userId);
String redisKey=RedisKeyUtil.getUserLikeKey(userId);
redisTemplate.opsForValue().set(redisKey,user,3600, TimeUnit.SECONDS);
return user;
}
//3、数据变更时清除缓存数据(如果采取更新缓存中数据的方法可能会带来并发问题,并且比较繁琐);
private void clearCache(int userId)
{
String redisKey=RedisKeyUtil.getUserLikeKey(userId);
redisTemplate.delete(redisKey);
}
public User queryUserById(int userId) {
//return userMapper.queryById(userId);
User user=getCache(userId);
if(user==null)
{
user=initCache(userId);
}
return user;
}
在更新数据的地方清理缓存
//更新头像路径
public int updateHeader(int id,String header_url)
{
//return userMapper.UpdateHeader(id,header_url);
int rows=userMapper.UpdateHeader(id,header_url);
clearCache(id);
return rows;
}
//修改密码 这里传入的password应该为加密后的
public int updatePassword(int id,String password)
{
int rows= userMapper.UpdatePassword(id,password);
clearCache(id);
return rows;
}