redis2防止重复提交
同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击,复点击是指在指定的时间段内多次点击按钮。
解决方案:通过将该次操作的唯一标识作为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协议 进行请求接口之前的授权
- 共享Cache ,不怕丢数据,丢了可以从DB中reload;
- 共享Session ,不怕丢数据,丢了可以重新登录;
- batch job的中间结果。不怕丢数据,丢了重新跑job就可以了;
- 一些简单数据的存储,低频改动,但是会被频繁读取。比如首页推荐的产品列表。但此时必须增加HA的防护,sentinel、cluster或者自定义的机制都可以;
- 一些更加复杂存储的building block,比如分布式锁,此时需要多节点来实现一个简单的quorum
其他场景,往往有更好的、更成熟的方案。
特别注意,不要用Redis存储任何需要“认真对待”的数据,请用支持ACID事务的数据库。
Redis是非常优秀的工具,但非是银弹。只有认真的了解业务对“保证”的要求,认真的了解所用工具的工作原理,才能做出正确的设计决策。
5.Redis特点:
1、Redis是纯内存操作,需要的时候需要我们手动持久化到硬盘中
2、Redis是单线程,从而避开了多线程中上下文频繁切换的操作。
3、Redis数据结构简单、对数据的操作也比较简单
4、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求
5、使用多路I/O复用模型,非阻塞I/O
5.分布式环境使用redis防止重复提交
思路:自定义注解+spring aop+redis分布式锁
转载于:https://my.oschina.net/u/3734816/blog/3030940
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如何设置有效期为一天的缓存
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升