2023年7月21日发(作者:)
详解java解决分布式环境中⾼并发环境下数据插⼊重复问题java 解决分布式环境中 ⾼并发环境下数据插⼊重复问题前⾔原因:服务器同时接受到的重复请求
现象:数据重复插⼊ / 修改操作解决⽅案 : 分布式锁对请求报⽂⽣成 摘要信息 + redis 实现分布式锁⼯具类分布式锁的应⽤package t;import til;import pe;import il;import ;import tRequest;import rvletRequest;import p;import ;/** * 并发拦截 * ⾼并发下 过滤掉 相同请求的⼯具 * @author 杨. * */public class ContextLJ { private static final Integer JD = 0; /** * 上锁 使⽤redis 为分布式项⽬ 加锁 * @param sign * @param tiD * @return * @throws Exception */ public static boolean lock(String sign, String tiD) { synchronized (JD) { // 加锁 Jedis jedis = is(); String uTid = (sign); if (uTid == null) { (sign, tiD); (sign, 36); return true; } return false; } } /** * 锁验证 * @param sign * @param tiD * @return */ public static boolean checklock(String sign, String tiD){ Jedis jedis = is(); String uTid = (sign); return (uTid); } /** * 去掉锁 * @param sign * @param tiD */ public static void clent (String sign, String tiD){ if (checklock(sign, tiD)) { Jedis jedis = is(); (sign); } } /** * 获取摘要 * @param request * @return */ public static String getSign(ServletRequest request){ // 此⼯具是将 request中的请求内容 拼装成 key=value&key=value2 的形式 源码在线⾯ Map
if (!(sign, tiD)) { ("放弃相同 并发请求" + sign); frequentlyError(myResp); return; } if (!ock(sign, tiD)) { ("加锁验证失败 " + sign + " " + tiD); frequentlyError(myResp); return; } er(request, myResp); // 放⾏ } catch (Exception e) { // 捕获到异常 进⾏异常过滤 ("", e); retrunErrorInfo(myResp); } finally { (sign, tiD); } } /** * 频繁请求 * @param myResp */ private void frequentlyError(ServletResponse myResp) throws IOException { ApiResult
* @param myResp */ private void retrunErrorInfo(ServletResponse myResp) throws IOException { ApiResult
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689899410a293277.html
评论列表(0条)