当前位置: 首页 > news >正文

Java并发编程中高效缓存设计的哲学

文章目录

    • 引言
    • 详解缓存的设计和演进
      • 基于缓存存储运算结果
      • 锁分段散列减小锁粒度
      • 异步化提升处理效率
      • 原子化避免重复运算
    • 小结
    • 参考

引言

本文将基于并发编程和算法中经典的哈希取模、锁分段、 异步化、原子化。这几个核心设计理念编写逐步推演出一个相对高效的缓存工具,希望对你有所启发。

我是 SharkChili ,Java 开发者,Java Guide 开源项目维护者。欢迎关注我的公众号:写代码的SharkChili,也欢迎您了解我的开源项目 mini-redis:https://github.com/shark-ctrl/mini-redis。

为方便与读者交流,现已创建读者群。关注上方公众号获取我的联系方式,添加时备注加群即可加入。

详解缓存的设计和演进

基于缓存存储运算结果

我们有一批数据需要通过运算才能获得结果,而每一次运算大约耗时是500ms,所以为了避免重复运算导致的等待,我们希望对应数据第一次运算的结果直接缓存到容器中,后续线程可直接通过容器获得结果:

在这里插入图片描述

于是我们就有了第一个版本,利用缓存避免非必要的重复计算,从而提升程序在单位时间内的吞吐量

public class ComputeCache {public final Map<Integer, Integer> cache = new HashMap<>();public synchronized int compute(int arg) {if (cache.containsKey(arg)) {//若存在直接返回结果return cache.get(arg);} else {//若不存在则计算后缓存并返回int result = doCompute(arg);cache.put(arg, result);return result;}}//模拟耗时的计算private int doCompute(int key) {ThreadUtil.sleep(500);return key << 1;}public synchronized int size() {return cache.size();}}

我们利用下面这段单元测试来验证缓存的性能和正确性,这里笔者也简单介绍一下几个比较核心的点:

  1. 声明本机CPU核心数+1的线程数执行并发运算
  2. 利用倒计时门闩控制线程并发流程起止,保证准确感知所有运算任务结束后,执行耗时统计
  3. 利用容器中最直观且容易检查出错误的属性size进行比对判断我们的缓存是否正确

最终在笔者的机器下5000并发的耗时大约是26765ms,整体还是不太符合我们的预期:

//初始化缓存工具<
http://www.lryc.cn/news/574444.html

相关文章:

  • 【格与代数系统】示例2
  • PyTorch 实现的 GlobalPMFSBlock_AP_Separate:嵌套注意力机制在多尺度特征聚合中的应用
  • 关于 pdd:anti_content参数分析与逆向
  • C#图书管理系统笔记(残缺版)
  • 【数据标注师】词性标注2
  • 【AI News | 20250623】每日AI进展
  • 基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现
  • 华为OD机试_2025 B卷_矩形相交的面积(Python,100分)(附详细解题思路)
  • leetcode82.删除排序链表中的重复元素II
  • EEG 分类攻略1- theta, alpha, beta和gamma频谱
  • C++语言发展历程-2025
  • python中学物理实验模拟:平抛运动和抛物运动
  • Python csv 模块
  • 数组题解——​轮转数组【LeetCode】
  • 华为云 Flexus+DeepSeek 征文|文案魔盒・Emoji 菌:基于华为云 CCE 集群 Dify 大模型,创意文案智能生成助手
  • 数组题解——​最大子数组和​【LeetCode】(更新版)
  • 黑马程序员苍穹外卖DAY1
  • 【软考高级系统架构论文】论数据分片技术及其应用
  • C指针总结复习(结合deepseek)
  • 深入浅出Node.js后端开发
  • 【TCL 脚本学习 4 -- tcl 脚本 数组定义和使用】
  • 触摸屏(典型 I2C + Input 子系统设备)从设备树解析到触摸事件上报
  • Redis哨兵模式深度解析与实战部署
  • 用 GitHub Issues 做任务管理和任务 List,简单好用!
  • 【图像】ubuntu中图像处理
  • Redis精简总结|一主二从哨兵模式(工作机制)|集群模式|缓存的穿透雪崩击穿
  • NFS服务配置超详细版
  • 第一节 布局与盒模型-Flex与Grid布局对比
  • 考研408《计算机组成原理》复习笔记,第三章(2)——存储器的ROM、RAM(DRAM和SRAM)、磁盘硬盘
  • 鸿蒙容器组件 Row 全解析:水平布局技术与多端适配指南