亿级流量高并发下,缓存与数据库不一致,咋办?
发布时间:2025-11-04 04:01:21 作者:玩站小弟
我要评论
复制/** *请求异步处理的service实现 *@authorAdministrator * */
。

复制/** * 请求异步处理的亿级service实现 * @author Administrator * */ @Service("requestAsyncProcessService") publicclass RequestAsyncProcessServiceImpl implements RequestAsyncProcessService { @Override publicvoid process(Request request) { try { // 先做读请求的去重 RequestQueue requestQueue = RequestQueue.getInstance(); Map<Integer, Boolean> flagMap = requestQueue.getFlagMap(); if(request instanceof ProductInventoryDBUpdateRequest) { // 如果是一个更新数据库的请求,那么就将那个productId对应的流量标识设置为true flagMap.put(request.getProductId(), true); } elseif(request instanceof ProductInventoryCacheRefreshRequest) { Boolean flag = flagMap.get(request.getProductId()); // 如果flag是null if(flag == null) { flagMap.put(request.getProductId(), false); } // 如果是缓存刷新的请求,那么就判断,高并如果标识不为空,发下而且是缓存true,就说明之前有一个这个商品的免费信息发布网数据数据库更新请求 if(flag != null && flag) { flagMap.put(request.getProductId(), false); } // 如果是缓存刷新的请求,而且发现标识不为空,致咋但是亿级标识是false // 说明前面已经有一个数据库更新请求+一个缓存刷新请求了,大家想一想 if(flag != null && !flag) { // 对于这种读请求,流量直接就过滤掉,高并不要放到后面的发下内存队列里面去了 return; } } // 做请求的路由,根据每个请求的缓存商品id,高防服务器路由到对应的数据内存队列中去 ArrayBlockingQueue<Request> queue = getRoutingQueue(request.getProductId()); // 将请求放入对应的队列中,完成路由操作 queue.put(request); } catch (Exception e) { e.printStackTrace(); } } /** * 获取路由到的致咋内存队列 * @param productId 商品id * @return 内存队列 */ private ArrayBlockingQueue<Request> getRoutingQueue(Integer productId) { RequestQueue requestQueue = RequestQueue.getInstance(); // 先获取productId的hash值 String key = String.valueOf(productId); int h; int hash = (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); // 对hash值取模,将hash值路由到指定的亿级内存队列中,比如内存队列大小8 // 用内存队列的数量对hash值取模之后,结果一定是在0~7之间 // 所以任何一个商品id都会被固定路由到同样的一个内存队列中去的 int index = (requestQueue.queueSize() - 1) & hash; System.out.println("===========日志===========: 路由内存队列,云服务器提供商商品id=" + productId + ", 队列索引=" + index); return requestQueue.getQueue(index); } } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.
相关文章
探究maingear笔记本的性能和特点(一款极致游戏体验的选择)
摘要:maingear笔记本作为一款专注于游戏性能和高品质的笔记本电脑品牌,备受游戏爱好者的追捧。本文将就maingear笔记本的性能和特点展开探究,帮助读者了解该品牌在游戏领域的独特之...2025-11-04揭秘各大品牌路由器默认用户名密码的安全问题(隐私保护在默认配置中的薄弱环节)
摘要:路由器是我们日常生活中必不可少的网络设备,但很多人对于路由器的默认配置并不太了解。本文将以各大品牌路由器默认用户名密码为主题,探讨其安全问题。一、为何路由器有默认用户名密码...2025-11-04从零开始学习机械师DOS装系统教程(掌握DOS装系统,轻松解决电脑问题)
摘要:在当今信息爆炸的时代,电脑已经成为我们生活中不可或缺的工具。然而,随之而来的也有一系列的问题。作为一个机械师,掌握DOS装系统技术可以帮助我们解决很多常见的电脑问题。本文将以机械师...2025-11-04电脑剪映成品教程(轻松学会电脑剪映,制作出令人惊艳的影片效果)
摘要:随着社交媒体和视频平台的兴起,越来越多的人开始追求高质量的视频内容。而电脑剪映作为一款功能强大且易于使用的视频编辑软件,成为了众多视频制作者的首选。本文将为您详细介绍如何利用电脑剪...2025-11-04解决电脑上Xbox游戏安装错误的有效方法(遇到电脑上Xbox游戏安装错误?快来学习解决办法!)
摘要:随着电脑成为我们日常娱乐的重要工具之一,许多玩家选择在电脑上安装并玩Xbox游戏。然而,有时候在安装过程中可能会遇到一些错误,这给玩家带来了困扰。本文将为大家介绍解决电脑上Xbox...2025-11-04- 摘要:随着科技的发展,越来越多的人喜欢利用电脑进行各种创作和设计。本教程将向大家介绍如何利用电脑设计个性化明信片,为我们的祝福和问候增添一份独特的魅力。选择设计软件——打开Pho...2025-11-04

最新评论