JAvawebショッピングモール秒殺システム--分布式session(二)


ユーザーがログインに成功するとセッションが発生します.秒殺システムセッションがクラスタに格納されている各マシンに加わるため、ユーザーがセッションを抽出するとセッションが一致しないという問題が発生し、一定のリソースが浪費されます.そのため、セッションはredisのサーバ上に存在し、UUIDは唯一のクッキーを生成します.
/**
 * @Author:zhangyx
 * @Date:Created in 22:192018/11/15
 * @Modified By:
 */
public class UUIDUtil {

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

二、生成したクッキーを第三者キャッシュに入れる(redis)事前に書いたサービスで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";
}