L2Cache 核心原理解析

news2024/11/17 7:49:10

源码地址:L2Cache

L2Cache是什么

  • L2Cache 是一个基于内存、 Redis 、 Spring Cache 实现的满足高并发场景下的分布式二级缓存框架。

L2Cache如何使用

  • 如何使用 L2cache

L2Cache架构图

请添加图片描述
核心逻辑

  • 1、发起 get(key) 请求
  • 2、从localCache中get缓存,若存在则返回缓存,若不存在则从Redis中get缓存
  • 3、若从Redis中get到缓存,则返回缓存并put到localCache中
  • 4、若redis中不存在缓存,则执行load从数据源加载数据,并将数据put到localCache和Redis
  • 5、发送refresh消息到MQ,其他节点订阅到消息,则refresh缓存

L2Cache底层原理图

请添加图片描述
模块介绍

  • 业务层: 系统中实际的业务逻辑【也就是你的业务代码】
  • 缓存层: 承载各种业务维度的缓存实现,简化开发和维护【最佳实践】
  • 缓存构建模块: 用于构建各种类型的缓存对象
  • 缓存容器: 作为一个容器,用来存储各种业务维度的缓存对象,以便复用【类spring容器】
  • 缓存模块: 实际的缓存对象,分为混合缓存、一级缓存、二级缓存
  • 热key探测模块: 用于探测热key,并缓存到本地缓存,提高性能
  • 缓存同步模块: 用于保证分布式环境下,各个POD节点中本地缓存的一致性

L2Cache模块演进图

请添加图片描述

  • 初始版本: 基于快速迭代的理念,优先实现核心功能并快速验证。
  • 当前版本: 基于可拔插的设计理念,设计出具有高可扩展性和松耦合的代码体系,实现整个框架的模块化、可复用性和职责分离,让后续可能发生的变更更加容易、升级成本更低。

L2Cache缓存层

为什么有了L2Cache缓存框架这一层后,还定义了缓存层呢?

  1. 承上启下: 通过缓存层连接业务层和缓存框架。
  2. 标准化: 定义一套标准的业务缓存操作,降低系统复杂度,简化开发,便于维护和扩展。

缓存层的核心接口:CacheService 。小接口,大功能。
请添加图片描述

  • 业务层 只需根据 缓存层 实现的各种维度的CacheService 来组装复杂的业务逻辑即可。
  • 业务层 的难点在于缓存维度的划分

最后,希望以上内容对你有些帮助,若有疑问,可以在此处 github - l2cache - issues 提交你的疑问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言获取13位时间戳以及格式化时间戳

定义time_util.h头文件 #ifndef TIME_UTIL_H #define TIME_UTIL_H #include <stdio.h> #include <time.h> #ifdef _WIN32 #include <windows.h> #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 #else #include <sys/time.h> #endifvoid ge…

DoIP学习笔记系列:(一)DoIP协议概述

文章目录 1. 为什么会有DoIP协议的需求产生?2. DoIP协议入门2.1 传输层协议和网络层服务2.2 物理层和数据链路层2.3 协议介绍2.3.1 报文封装结构2.3.2 端口号2.3.3 DoIP报文格式2.3.3.1 DoIP首部,协议版本号2.3.3.2 DoIP首部,协议版本号取反2.3.3.3 DoIP首部,负载类型2.3.3…

简要介绍 | 自回归生成:探索序列的未来之旅

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对Autoregressive Generation进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 自回归生成&#xff1a;探索序列的未来之旅 Approach - Autoregressive Conditional Generation using Transformer…

Array(20) 和 Array.apply(null, {length: 20})

1.Array(20) 其结果是&#xff1a; 创建了一个长度为20&#xff0c;但元素均为 empty 的数组。 2.Array.apply(null, { length: 20 }) 其结果是&#xff1a; 创建了一个长度为20&#xff0c;但元素均为 undefined 的数组。 3.异同 3.1相同 console.log(arr1[0] arr2[0]) /…

工具推荐:Linux Busybox

文章首发地址 BusyBox是一个开源的、轻量级的、可嵌入式的、多个Unix工具的集合。BusyBox提供了各种Unix工具的实现&#xff0c;包括文件处理工具、网络工具、shell工具、系统管理工具、进程管理工具等等。它被设计为一个小巧、高效、可靠、易于维护的工具&#xff0c;适用于嵌…

iOS--KVO和KVC

KVC 简单介绍 KVC的全称是KeyValueCoding&#xff0c;俗称“键值编码”&#xff0c;可以通过一个key来访问某个属性&#xff1b; KVC提供了一种间接访问其属性方法或成员变量的机制&#xff0c;可以通过字符串来访问对应的属性方法或成员变量&#xff1b; 它是一个非正式的…

数据结构笔记

数据结构笔记 1. 绪论 随着计算机深入到各个领域&#xff0c;它的作用已不再局限于科学计算&#xff0c;而更多的用于控制&#xff0c;管理及数据处理等非数值计算的处理工作。而它加工出理的对象也由纯粹的数值发展到字符&#xff0c;表格和图像等各种具有一定结构的数据。…

overleaf上踩的坑~

IEEE模板伪代码 问题&#xff1a; 格式显示不对&#xff0c;且 \\ 换行后不会自动标序号 解决办法&#xff1a; 在宏包中只保留 \usepackage[algo2e,linesnumbered,lined,boxed,commentsnumbered,ruled]{algorithm2e} 删除其他伪代码宏包&#xff1a; %\usepackage{algorith…

“嵌入式应用:超越想象的智能化时代“

从传统的家电如空调、电饭煲、电风扇到现代的智能手机、路由器、洗衣机&#xff0c;嵌入式技术无处不在。这些设备通过结合互联网和智能化功能&#xff0c;变得更加智能和便捷。例如&#xff0c;通过添加Wi-Fi模块&#xff0c;空调可以实现远程控制和预约开机功能。 嵌入式技术…

做独立站跨境出海,需要考虑哪些要素?

对于不少中小卖家而言&#xff0c;利用独立站出海已然成为下一个跨境热潮。但是采用独立站模式做出海生意前&#xff0c;卖家需要考虑哪些要素&#xff1f; 产品选择 对于国内的卖家来说&#xff0c;依托于国内强大的供应链优势&#xff0c;只要能把握住消费者心态&#xff0c;…

Linux 为什么还要坚持使用宏内核?

假如一家三口都生活在同一个房间&#xff0c;那么可以直接说话&#xff0c;对方都能听到&#xff0c;这样子效率就比较高。 假如一家三口都有自己的房间&#xff0c;那么对话时&#xff0c;一方就需要跑到对方的房间去了。这样子效率就会下降。 对于内核来说&#xff0c;第一…

PDF怎么转成Excel?4个方法非常实用!

如何使用记灵在线工具将PDF转成Excel&#xff1f;在日常工作中&#xff0c;我们经常需要转换PDF文件为Excel文件以方便我们处理数据。虽然PDF格式对于文本和图片的可视化效果效果不错&#xff0c;但是在处理数据时&#xff0c;Excel表格更加便捷。当我们将PDF文件转换成Excel文…

基于 STM32+FPGA 的通用工业控制器设计(一)系统方案设计

本章首先介绍了现有 PLC 系统的概况&#xff0c;然后提出了本文设计的通用工业控制器的 整体方案架构&#xff0c;分析了硬件和软件上需要实现的功能&#xff0c;最后对各部分功能进行分析并提 出具体的实现方案。 2.1 PLC 系统简介 可编程逻辑控制器&#xff08; Progra…

linux----软连接和硬链接

介绍 # 文件分 文件名 inode信息:文件类型&#xff0c;大小&#xff0c;位置,时间 文件真正存储位置block# 软连接---》复制一份inode信息(win的快捷方式)软链接文件会将inode指向源文件的block&#xff0c;当我们访问这个软链接文件时&#xff0c;其实访问的是源文件本身…

数据决定AIGC的高度,什么又决定着数据的深度?

有人曾言&#xff0c;数据决定人工智能发展的天花板。深以为然。 随着ChatGPT等AIGC应用所展现出的强大能力&#xff0c;人们意识到通用人工智能的奇点正在来临&#xff0c;越来越多的企业开始涌入这条赛道。在AIGC浪潮席卷全球之际&#xff0c;数据的重要性也愈发被业界所认同…

使用ComPDFKit PDF SDK 构建iOS PDF阅读器

在当今以移动为先的世界中&#xff0c;为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加&#xff0c;使用ComPDFKit这个强大的PDF软件开发工具包&#xff08;SDK&#xff09;来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。 …

嵌入式行业真的没前途吗?

就嵌入式而言&#xff0c;需要学的东西比较多。linux底层驱动的了解&#xff0c;单片机底层驱动开发、RTOS、bootloader、应用层开发&#xff08;MBD&#xff09;、各种标准、服务、协议等等&#xff0c;还要懂一些硬件&#xff0c;看得懂硬件原理图&#xff0c;最好自己能画板…

【业务功能篇53】Springboot 数据封装对象

Entity、VO、DTO解释 1&#xff09;Entity&#xff1a;实体&#xff0c;与数据库的每一行数据打交道的&#xff0c;它的属性对应数据库每个字段 class User{ private Long idCard; private String name; private Date birthday; ...... } 对应数据库的id&#xff0c;name&…

VMware虚拟机安装VMware tools

一、挂载光驱 执行以下命令来创建 /mnt/cdrom 目录&#xff1a; mkdir -p /mnt/cdrom-p 参数会确保如果 /mnt/cdrom 的上级目录&#xff08;例如 /mnt&#xff09;不存在的话也会被创建。 然后&#xff0c;你可以再次尝试挂载光盘&#xff1a; mount /dev/sr0 /mnt/cdrom这次…

DragGAN:用崭新的方式进行图像处理

该项目的论文被SIGGRAPH 2023 收录&#xff0c;论文以 StyleGAN2 架构为基础&#xff0c;实现了 “Drag” 关键点就能轻松 P 图的效果。 https://github.com/XingangPan/DragGAN https://vcai.mpi-inf.mpg.de/projects/DragGAN/ 目录 原图1测试一测试二测试三 原图2测试一测试…