redis2防止重复提交

1.用户短时间内提交次数过多导致的重复提交 

   同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击,复点击是指在指定的时间段内多次点击按钮。

  解决方案:通过将该次操作的唯一标识作为key存入redis,如果在规定时间内该key依然存在的话则代表重复提交

2.为什么需要分布式锁?(Redis分布式锁)

  参考链接 https://blog.csdn.net/weixin_39704078/article/details/86508137

      https://blog.csdn.net/qq_42617455/article/details/115400004

  2.1 使用lua+redis的方法。之所以使用lua是为了保证原子性

  2.2 分布式锁演变流程 主要从多种情况进行考虑的

 3.Oauth2协议 进行请求接口之前的授权

 

 6.幂等性

   6.2 https://blog.csdn.net/weixin_42412601/article/details/108412439

 

 7.先删除token还是后删除token 可能存在的问题!

      如果是先删除令牌,获取redis里的令牌操作,和前端带来的token比较的操作以及删除令牌的操作, 即:获取,对比,删除 这三个操作必须是原子的,给上个分布式锁

复制代码
@Autowired
    private RedisTemplate redisTemplate;
    @Transactional
    @Override
    public SubmitOrderResponseVo submitOrder(OrderSubmitVo orderSubmitVo) {
        //1、验令牌【令牌:获取,对比,删除。必须保证原子性】
        //前端传的token
        String token = orderSubmitVo.getOrderToken();
        //0令牌验证失败  1验证成功
        String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        //lua脚本保证原子性:获取令牌,验证令牌和删除令牌
        Long result = (Long) redisTemplate.execute(new DefaultRedisScript<Long>(script, Long.class),
                Arrays.asList(OrderConstant.USER_ORDER_TOKEN_PREFIX + memberResponseVo.getId()),
                token);
        //验证失败
        if (result==0){
            submitOrderResponseVo.setCode(1);
            return submitOrderResponseVo;
        }
        //验证成功
        else {
            //下单
            xxx

            //验价
            xxx

            //保存订单
           xxx

            //库存锁定。只要有异常回滚订单数据
            //需要:订单号,所有订单项(sku_id,sku_name),锁几件
            //远程锁库存
            xxx
        }
    }
————————————————
版权声明:本文为CSDN博主「weixin_42412601」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42412601/article/details/108412439
复制代码

 8. redis 防止 延展出的问题 如防止数据丢失  防止缓存雪崩。。。

9.防止重复提交 设置key值存在一分钟 如果有 重复提交 如果没有 第一次提交

  

复制代码
    @Override
    public boolean unRepeatCheck(String unRepeatFlag) {
        if(jedisUtil.exists(unRepeatFlag)){
            return true;
        }else {
            jedisUtil.setJson(unRepeatFlag,"1", RedisConstant.EXRP_MINUTE);  //60s
        }
        return false;
    }
复制代码

 

9.1 还有是对redis 进行加解锁 进行删除key操作??继续学习、、

 

10. redis如何设置有效期为一天的缓存

11. redis的过期时间和过期删除机制

 

 

 

 

 

 

 

 

 

 

 

 
 
 
posted @   BBS_自律  阅读(208)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
点击右上角即可分享
微信分享提示