订单系统 redis
时间: 2023-11-28 17:45:46 浏览: 188
订单系统中使用Redis主要是为了生成唯一的订单号并保证其不重复,同时也可以提高订单号的生成效率。具体实现如下:
1.创建定时任务,每天凌晨4点生成次日订单号,并将生成的订单号放入一个双向队列里Deque,队列Deque保存在redis的<key,value>结构中,其中key为yyyymmdd+7位有序数字,value为双向队列Deque。
2.订单系统从redis中的Deque队列获取首元素作为订单号,使用pollFirst()方法即时删除首元素,再加上redis是单线程,订单系统基本上不会获取到相同的订单号,即使订单系统是分布式服务也不会有问题。
3.为了防止出现订单不够用的情况,定时任务系统会定时检测Deque队列的长度,如果订单号过少,在队列Deque尾部追加一定数量的订单号,以当前尾元素为起点进行追加。
4.为了节省redis内存空间,每天凌晨3点删除保存前一天订单号的Deque队列。
除了生成订单号外,Redis还可以用于缓存订单信息,提高订单查询效率,同时也可以用于订单状态的更新和过期处理。具体实现如下:
1.用户点击付款,发送请求,后台接收到请求后,生成订单信息和商品销售信息,保存到数据库表中。
2.同时把订单信息存入到redis中,key可以设为订单编号,同时设置过期时间。
3.到了过期时间后,redis监听器监听到了过期的key,取出该key查询数据库订单表,如果发现支付状态不是成功(用户未付款,需要使订单失效),那么修改支付状态为失败。
4.如果用户付款了,在支付宝回调的接口里面会将支付状态修改为成功。
相关问题
redis缓存实现订单自动取消功能
Redis缓存可以通过设置键的过期时间来实现订单自动取消功能。当订单生成时,我们将订单信息存储到Redis缓存中,并设置一个过期时间(比如30分钟)。这样,订单信息将在30分钟后自动从Redis中移除。如果订单在30分钟内完成支付,我们可以根据订单号在Redis中查找订单信息并进行相应处理。如果订单在30分钟内未完成支付,则订单信息会在过期时间到达时自动从Redis中移除,并触发订单取消逻辑。
在实现过程中,可以使用Redis的SET命令将订单信息保存到Redis中,并通过EXPIRE命令设置该键的过期时间。例如:
```
SET order:12345 "待支付订单信息"
EXPIRE order:12345 1800
```
以上代码将"待支付订单信息"保存在键名为"order:12345"的键中,并设置其过期时间为1800秒(30分钟)。当订单完成支付时,可以通过GET命令获取订单信息。如果返回空值,则说明订单已被取消。如果返回订单信息,则可以继续处理。
另外,为了保证系统的可靠性,可以在订单取消时触发一些额外的操作,如发送通知给用户或其他相关系统。可以使用Redis的发布/订阅功能,将订单取消事件发布到指定的频道,然后其他订阅该频道的系统可以接收到该事件并执行相应的处理逻辑。
总之,通过使用Redis的缓存功能,可以轻松实现订单自动取消的功能,并且具备一定的灵活性和可扩展性。
支付系统和Redis和RabbitMQ整合
支付系统可以与Redis和RabbitMQ进行整合。在一个模拟购物支付库存交互流程的demo中,Redis和RabbitMQ是两个核心中间件。整合的流程可以简单描述如下:
1. 首先,需要初始化商品列表并存储在Redis中。
2. 当用户发起购买请求时,支付系统会接收到该请求,并将商品明细消息和10分钟支付等待消息发送到RabbitMQ。
3. 在RabbitMQ中,部分用户可能会下单但不支付,这些未支付的订单会被转发至库存队列。
4. 库存队列会对商品数量进行操作。
5. 如果10分钟支付等待时间到期,未支付的商品将会重新加入Redis的商品列表中。
在这个整合过程中,需要使用到一些相关的依赖,包括spring-webmvc、spring-data-redis、jedis、redisson、amqp-client、log4j-core、log4j-api、spring-rabbit、jackson-core、jackson-databind、jackson-annotations等。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* *2* [基于springboot并整合rabbitMQ和redis的一个支付-库存交互小demo](https://blog.csdn.net/weixin_46213419/article/details/128492744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [关于rabbitMQ和redis整合](https://blog.csdn.net/qq_37186247/article/details/84302978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文