javaweb商城秒杀系统--分布式session(二)

用户登陆成功的时候会产生一个session,因为是秒杀系统session加入放在集群中的每个机器上面,当用户提取session的时候便会出现session不一致的问题,并且会浪费一定的资源,所以,我们将session存在一台redis的服务器上
一,UUID生成一个唯一cookie

/**
 * @Author:zhangyx
 * @Date:Created in 22:192018/11/15
 * @Modified By:
 */
public class UUIDUtil {

    public static String UUID(){
        return UUID.randomUUID().toString().replace("-","");
    }
}

二、将生成的cookie放入第三方缓存中(redis)
在提前写好的service中,set进我们的token

/**
 * @Author:zhangyx
 * @Date:Created in 22:222018/11/15
 * @Modified By:
 */
public class MiaoshaUserKey extends BasePrefix {

    public static final int TIKEN_EXISTS=3600*24*2;
    public MiaoshaUserKey(String prefix) {
        super(prefix);
    }

    public MiaoshaUserKey(int expireSeconds, String prefix) {
        super(expireSeconds, prefix);
    }

    public static MiaoshaUserKey token=new MiaoshaUserKey(TIKEN_EXISTS,"tk");

    public static MiaoshaUserKey getById=new MiaoshaUserKey(0,"tk");

}

三、获取我们写入的token

    //把生成token给提出来
    public void addCookie(HttpServletResponse response,String token,MiaoshaUser miaoshaUser){
//生成一个自定义cookie
        UUIDUtil.UUID();
        redisService.set(MiaoshaUserKey.token,token,miaoshaUser);
        Cookie cookie=new Cookie(COOKIE_NAME_TOKEN,token);
        cookie.setMaxAge(MiaoshaUserKey.token.expireSeconds());
        cookie.setPath("/");
        response.addCookie(cookie);

    }
    //从缓存中根据token取user
    public MiaoshaUser getByToken(HttpServletResponse response,String token) {
        //延长token的有效期
        if(token==null) {

            return null;
        }

        MiaoshaUser miaoshaUser=redisService.get(MiaoshaUserKey.token,token,MiaoshaUser.class);
        if(miaoshaUser!=null){
            addCookie(response,token,miaoshaUser);
        }

        return miaoshaUser;
    }

四、商品详情页和商品列表中token在controller的使用判断

//商品列表
@RequestMapping("/to_list")
    public String toLogin(Model model, @CookieValue(value =MiaoshaUserService.COOKIE_NAME_TOKEN,required = false)
        String cookieToken, @RequestParam(value = MiaoshaUserService.COOKIE_NAME_TOKEN,required = false)String paramtoken,
                          HttpServletResponse response){
if(StringUtils.isEmpty(cookieToken)&&StringUtils.isEmpty(paramtoken)){
    return "login";
}
String token=StringUtils.isEmpty(paramtoken)?cookieToken:paramtoken;

MiaoshaUser user=userService.getByToken(response,token);
  model.addAttribute("user",user);
    return "goods_list";
}
//商品详情
@RequestMapping("/to_detail")
public String detail(Model model, @CookieValue(value =MiaoshaUserService.COOKIE_NAME_TOKEN,required = false)
        String cookieToken, @RequestParam(value = MiaoshaUserService.COOKIE_NAME_TOKEN,required = false)String paramtoken,
                      HttpServletResponse response){
    if(StringUtils.isEmpty(cookieToken)&&StringUtils.isEmpty(paramtoken)){
        return "login";
    }
    String token=StringUtils.isEmpty(paramtoken)?cookieToken:paramtoken;

    MiaoshaUser user=userService.getByToken(response,token);
    model.addAttribute("user",user);
    return "goods_list";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值