本次主要是记录R2M在项目中的使用以及降级处理
public static void setOrderRid(String cacheKey,R2MCacheService redisUtils,OrderConfimVO confirmVo,HttpServletResponse response,int cacheTime) {
try {
redisUtils.setex(cacheKey, cacheTime, JSON.toJSONString(confirmVo));
} catch (Exception e) {
// redis异常降级
Cookie cookie = new Cookie(cacheKey,JSON.toJSONString(confirmVo));
cookie.setMaxAge(cacheTime);
cookie.setDomain(".xx.com");//域名
cookie.setPath("/");
response.addCookie(cookie);
}
}
public static String getOrderRidValue(String cacheKey,R2MCacheService redisUtils,HttpServletRequest request) {
try {
return redisUtils.get(cacheKey);
} catch (Exception e) {
// redis异常降级
Cookie[] cookies = request.getCookies();
if(cookies!=null&& cookies.length >0){
for(Cookie cookie:cookies){
if(cacheKey.equals(cookie.getName())){
return cookie.getValue();
}
}
}
}
return null;
}
public static void delOrderRid(String cacheKey,R2MCacheService redisUtils, HttpServletResponse response) {
try {
redisUtils.del(cacheKey);
} catch (Exception e) {
// // redis异常降级
Cookie cookie = new Cookie(cacheKey, "");
//立即销毁cookie
cookie.setDomain(".xx.com");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
使用redis锁防止重复提交
private final int REDISTIME = 60;
public boolean tryLockFlow(String key) {
try {
long increValue = r2MCacheService.incr(key);
r2MCacheService.expire(key, REDISTIME);
if (increValue == 1) {
return true;
}
r2MCacheService.decr(key);
return false;
} catch (Exception e) {
LOGGER.error("redis加锁异常", e);
// 异常情况下,保证业务流程正常
return true;
}
}
public void releaseLock(String key) {
try {
r2MCacheService.decr(key);
} catch (Exception e) {
LOGGER.error("redis解锁异常", e);
}
}