JAvawebショッピングモール秒殺システム--分布式session(二)
16010 ワード
ユーザーがログインに成功するとセッションが発生します.秒殺システムセッションがクラスタに格納されている各マシンに加わるため、ユーザーがセッションを抽出するとセッションが一致しないという問題が発生し、一定のリソースが浪費されます.そのため、セッションはredisのサーバ上に存在し、UUIDは唯一のクッキーを生成します.
二、生成したクッキーを第三者キャッシュに入れる(redis)事前に書いたサービスでtokenにセットする
三、私たちが書いたtokenを取得する
四、商品詳細ページと商品リストにおけるtokenのcontrollerでの使用判断
/**
* @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";
}