ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

在库存服务中实现缓存与数据库双写一致性保障方案(一)

2022-02-05 13:02:10  阅读:144  来源: 互联网

标签:缓存 请求 队列 数据库 库存 内存 一致性 双写


库存服务和数据库双写一致性方案

库存服务架子搭起来了,访问数据都是ok的,解决方案都分析过了。
我们需要把思路进行代码实现。
1.系统启动的时候初始化线程池和相关内存队列。
2.两种请求对象的封装,1种发生交易进行库存更新,2是读库存可能在商品页面读的时候先读缓存
,如果缓存里面它正好清空了,发送读请求到库存服务里来,读请求过来的时候,会申请把数据库最新值查询出来更新到缓存中。
3.封装好之后封装操作逻辑,对请求对象执行service,封装controller,扔给异步执行service,根据标识,根据商品标识取出hash值,
对hash值取模,扔到内存队列里面去,监听内存队列线程池里的线程,消费线程。
把对同一个商品更新库存,读取库存更新缓存进行串行化。
4.读请求的去重优化,一个队列里,对一个商品的库存的数据库更新操作已经在内存队列中了,
对商品库存的读取操作,要求读取库存数据库数据,然后更新到缓存中,一下子过来多个读,
这多个读其实只要有一个读请求操作压到队列里就可以了,其他的读操作全部都wait,读请求的操作刷新缓存就可以读到缓存中的最新数据了。
5.空数据的过滤优化,如果读请求发现redis缓存中没有数据,就会发送读请求给库存服务,
此时缓存中为空,可能因为写请求先删除了缓存,也可能数据库中压根没有这条数据。如果是数据库压根没有这条数据的场景,
就不应该将读请求操作压入队列中,而是直接返回空就可以了。

这两个操作都是为了减少内存队列中的请求积压,内存队列中积压的请求越多,就可能导致每个读请求hang住的时间越长,也可能导致多个读请求被hang住,尽量把一定要执行的压倒内存队列中。

标签:缓存,请求,队列,数据库,库存,内存,一致性,双写
来源: https://www.cnblogs.com/q1359720840/p/15864092.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有