
正文
redis实现订单防重消费,redis防止数据重复存储
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一起讨论下,消息幂等(去重)通用解决方案
如果要保证一致性,需要生产者在失败后重试,不过重试又会导致消息重复的问题,一个解决方案是每个消息给一个唯一的id,通过服务端的主动去重来避免重复消息的问题,不过这一机制目前Kafka还未实现。
另外打造一个高可靠的幂等服务还需要考虑很多问题,比如一台机器虽然把全局ID先写入了存储,但是在写入之后挂了,这就需要引入全局ID的超时机制。使用全局唯一ID是一个通用方案,可以支持插入、更新、删除业务操作。
消息堆积的产生原因 消息堆积的原因主要在于两方面,其一为消费的太慢或消费方出现异常,其二为生产方生产的太快,总的来说就是 消息的速度赶不上生产的速度,生产和消费速度不匹配造成的 。
Kafka本身支持At least once消息送达语义,因此实现消息发送的幂等关键是要实现Broker端消息的去重。
相关问答
Q1: 利用Redis实现防止接口重复提交功能
1、其实这个也简单,可以使用Redis来做,用户名 + 接口 + 参数啥的作为唯一键,然后这个键的过期时间设置为注解里过期字段的值。设置一个过期时间可以让键过期自动释放,不然如果线程突然歇逼,该接口就一直不能访问。
2、vuejava防止重复创建订单的步骤:创建订单时,用订单信息计算一个哈希值。判断redis中是否有key,有则不允许重复提交。没有则生成一个新key,放到redis中设置个过期时间即可。
3、我们可以这样做:在这个数据库中增加一个消息消费记录表,把消息插入到这个表,并且把原来的订单更新和这个插入的动作放到同一个事务中一起提交,就能保证消息只会被消费一遍了。
4、而我们如果用Redis的list数据结构可以轻而易举的实现该功能。
5、服务端接收到请求后,用对称解密sign,得到secretID,核对值是否正确,那么说明请求方是可信任的。返回接口结果,并把sign记录到redis。 下次接收到同样请求时发现redis已经有对应的sign值说明是接口重放,不予以正常相应。
Q2: SpringBoot实现Redis失效监听事件—KeyExpirationEventMessageListener...
这样做是为了使 Repository 支持发布 RedisKeyExpiredEvent,只要一个键过期 expiring key ,就会在 Spring 的 ApplicationEventPublisher 中间保存过期的值,即使原始值已经被删除。
本文主要以来 Redis 为公共存储,实现定时任务的分布式锁。
Java中级:企业团队项目协同开发与维护、商业项目模块化基础与应用、软件项目测试与实施和企业主流开发框架应用与优化等。
关于redis实现订单防重消费和redis防止数据重复存储的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






