自研cloud框架专题–通用cache模块(五)

通用cache模块

  • 项目特点
    • 1.保留原框架的集成,扩展,配置能力
    • 2.对于spring-cache增强
    • 1.引入核心依赖
    • 2.开启多cache配置
    • 2.自选缓存pom依赖
  • 二:使用示例
    • 1.api示例
    • 2.注解示例
    • 三:配置说明
    • 1.REDISSON_LOCAL_MAP
    • 2.REDISSON_2PC

开源地址:https://github.com/2892824942/ty-cloud/blob/main/ty-framework/ty-framework-cache

项目特点

1.保留原框架的集成,扩展,配置能力

  • 集成
    通过依赖对应的cache实现,可自动装载对应配置
  • 扩展
    依赖原spring-cache核心能力,保留其扩展能力
  • 配置
    原spring配置同样生效,如不使用cache-plus框架能力,原生配置不受影响
    使用cache-plus相关功能,仅更换配置前缀即可

2.对于spring-cache增强

  • 支持多cache同时使用
  • 支持Redisson实现的CacheManager自动注入
  • 支持具体缓存失效时间配置,全局配置及注解均支持
  • 支持二级缓存
  • 支持强一致事务缓存

1.引入核心依赖

暂时未发到中央仓库(准备中)…


<dependency><groupId>com.ty</groupId><artifactId>ty-framework-cache-starter</artifactId><version>${最新版本}</version>
</dependency>

2.开启多cache配置

application.yml示例:

application:cache:multi-enable: truetype: redis,caffeineredis:cache-names: test1,test2enable-transactions: truestore-type: key_valuecache-null-values: truenull-value-time-to-live: PT20stime-to-live: PT20muse-key-prefix: truekey-prefix: cachecaffeine:cache-names: caffeine-name

2.自选缓存pom依赖

  • 如使用redis缓存,按照Spring Boot data Redis官方配置即可,以下为使用Redisson客户端pom:
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

正确配置redis示例

  redis:host: localhostport: 6379timeout: 1200
  • 如使用caffeine缓存,添加如下pom:
 <dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId>
</dependency>

二:使用示例

1.api示例

和常规spring cache一致

@Component
public class test {@AutowiredCacheManager cacheManager;public void cache() {Cache cache = cacheManager.getCache("test1");cache.put("aaa", 123);Integer value = cache.get("aaa", Integer.class);}
}

2.注解示例

和spring cache一致

@Service
@Slf4j
@CacheConfig(cacheNames = CacheNameConstant.CAHCE_NAME)
public class CapitalAccountCacheService {@Autowiredprivate MyCapitalCacheDAO myCapitalDAO;@Autowired@Lazyprivate CapitalAccountCacheService _self;public List<MyCapitalAccount> getAll() {return myCapitalDAO.getAll();}@Cacheable(key = "#id", sync = true)public MyCapitalAccount getById(Long id) {MyCapitalAccount byId = myCapitalDAO.getById(id);log.info("CapitalAccountCacheService getById from db,myCapitalAccount:{}", byId);return byId;}@CachePut(key = "#myCapitalAccount.id", condition = "#result.getId()!=null&&#result.getId()>0")public MyCapitalAccount insert(MyCapitalAccount myCapitalAccount) {log.info("CapitalAccountCacheService insert to db,myCapitalAccount:{}", myCapitalAccount);myCapitalDAO.insert(myCapitalAccount);return myCapitalAccount;}@CachePut(key = "#myCapitalAccount.id", condition = "#result!=null")public MyCapitalAccount update(MyCapitalAccount myCapitalAccount) {log.info("CapitalAccountCacheService update to db,myCapitalAccount:{}", myCapitalAccount);int update = myCapitalDAO.update(myCapitalAccount);if (update > 0) {return myCapitalAccount;}return null;}@CacheEvict(key = "#myCapitalAccount.id")public int delete(MyCapitalAccount myCapitalAccount) {log.info("CapitalAccountCacheService delete to db,myCapitalAccount:{}", myCapitalAccount);return myCapitalDAO.deleteById(myCapitalAccount.getId());}@CacheEvict(allEntries = true)public int deleteAll() {log.info("CapitalAccountCacheService delete All from db");return myCapitalDAO.deleteAll();}
}    

三:配置说明

除了spring-cache提供的缓存类型外,框架提供redis额外两个实现:
REDISSON_2PC,

 REDISSON_LOCAL_MAP 基于redisssonRLocalMap实现的二级缓存CacheManagerREDISSON_2PC 基于redisson实现的支持强一致性事务的缓存CacheManager

1.REDISSON_LOCAL_MAP

Redisson官方宣传的,增加了本地的缓存,性能提升最高45倍,适用于对数据一致性要求不高,但访问量较大,对性能要求极高,甚至连网络请求都成为瓶颈的场景

2.REDISSON_2PC

基于redisson实现的支持强一致性事务的缓存CacheManager,整合mysql事务请求,在RR隔离级别下,通过事务线程绑定方式,在本地增加TreadLocal二级缓存,
保证缓存事务过程的可重复读,在mysql事务提交过程,通过redis事务提交或回滚redis相关操作,保证强一致性

更详细的使用案例,见:https://github.com/2892824942/framework-demo

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

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

相关文章

【论文阅读】Segment Anything论文梳理

Abstract 我们介绍了Segment Anything&#xff08;SA&#xff09;项目&#xff1a;新的图像分割任务、模型和数据集。高效的数据循环采集&#xff0c;使我们建立了迄今为止最大的分割数据集&#xff0c;在1100万张图像中&#xff0c;共超过10亿个掩码。 该模型被设计和训练为可…

一例APC注入型病毒分析

概述 这个病毒通过可移动存储介质传播&#xff0c;使用了应用层APC注入和dga域名技术&#xff0c;整个执行过程分为4个阶段&#xff0c;首先从资源节中解密出一段shellcode和一个PE&#xff0c;执行shellcode&#xff0c;创建一个同名的傀儡进程&#xff0c;将解密出来的PE注入…

多轨迹建模方法的介绍与实操-基于R语言

本文介绍了多轨迹建模方法&#xff08;Group-Based Multivariate Trajectory Modeling&#xff09;&#xff0c;这是一种扩展了单指标组基轨迹建模的技术&#xff0c;用于分析多个疾病生物标志物或临床重要因素的联合轨迹&#xff0c;以更好地理解和追踪疾病进程、行为或健康状…

2024蓝桥杯每日一题(归并排序)

一、第一题&#xff1a;火柴排队 解题思路&#xff1a;归并排序 重点在于想清楚是对哪个数组进行归并排序求逆序对 【Python程序代码】 from math import * n int(input()) a list(map(int,input().split())) b list(map(int,input().split())) na,nb [],[] for …

c++结构体中定义函数方法介绍

在C中&#xff0c;结构体&#xff08;Struct&#xff09;是一种用户自定义的数据类型&#xff0c;用于组织不同数据类型的成员。结构体可以包含变量、常量、函数等&#xff0c;使得数据的组织更加灵活。以下是关于C结构体中函数的介绍&#xff1a; 结构体声明&#xff1a; 在介…

【OpenGL手册12】 统一变量Uniform

OpenGL基础 - 统一变量Uniform 目录 一、说明二、 Uniform变量概念2.1 Uniform变量和特点2.2 Uniform变量定义方法2.3 Uniform变量赋值和传参 三、如何在Shader中自定义Location四、赋值五、统一变量缓冲对象六、赋值函数 一、说明 关于统一变量&#xff0c;也有一系列概念和方…

【嵌入式】字体极限瘦身术:Fontmin在嵌入式UI中的魔法应用(附3500常用汉字)

1. 概述 在嵌入式系统的用户界面&#xff08;UI&#xff09;设计中&#xff0c;字体的选择和优化至关重要。一个恰当的字体不仅能够提升用户体验&#xff0c;还能彰显产品特色。然而&#xff0c;由于嵌入式设备常常受限于存储空间和处理能力&#xff0c;大型字体文件可能成为性…

代码随想录算法训练营第五十五天丨583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 开窍了 class Solution:def minDistance(self, word1: str, word2: str) -> int:n1, n2 len(word1), len(word2)dp [[0] * (n2 1) for _ in range(n1 1)]for i in range(1, n1 1):dp[i][0] ifor j in range(1, n2 1):dp[0][j] jfor i i…

LeetCode的使用方法

LeetCode的使用方法 一、LeetCode是什么&#xff1f;1.LeetCode简介2.LeetCode官网 二、LeetCode的使用方法1.注册账号2.力扣社区力扣编辑器 2.1 讨论发起讨论参与讨论关注讨论 2.2 文章撰写文章关注文章 3.力扣面试官版测评面试招聘竞赛 4.力扣学习LeetBook 书架我的阅读猜您喜…

支付宝开放平台证书验签生成签名接入方式的操作流程之公钥证书,密钥证书的生成

#小李子9479# 调用支付宝接口的安全验证方式均使用sign_type为RSA2的方式&#xff0c;有两种 1。密钥模式&#xff1a;应用公钥、应用私钥、平台公钥生成签名和验签方式 2。证书模式&#xff1a;支付宝根证书、支付宝公钥证书、应用公钥证书、应用私钥&#xff0c;采用RSA20…

【2024.3.8练习】[2015 国 AC] 穿越雷区

题目描述 题目分析 最短步数问题&#xff0c;采用BFS算法即可。 我的代码 #include <iostream> #include <algorithm> #include <queue> #include <cmath> using namespace std; int n; int ans; int flag; const int max_n 102; char map[max_n][m…

Qt初识 - 编写Hello World的两种方式 | 对象树

目录 一、通过图形化方式&#xff0c;在界面上创建出一个控件 二、通过代码方式&#xff0c;创建Hello World 三、Qt 内存泄漏问题 (一) 对象树 一、通过图形化方式&#xff0c;在界面上创建出一个控件 创建项目后&#xff0c;打开双击forms文件夹中的ui文件&#xff0c;可…

【java基础】异常处理机制

目录 1、异常体系介绍 1.1、异常是什么? 1.2、运行时异常和编译时异常的区别? 2、异常的用法 2.1、捕获异常 2.2、异常中的常见方法 2.3、抛出异常 2.4、自定义异常 1、异常体系介绍 1.1、异常是什么? java异常是指在程序运行时可能出现的一些错误&#xff0c;如&am…

把flask 项目部署在windows上步骤

1.激活虚拟环境 # 激活到系统Python环境&#xff08;如果当前已经在venv中&#xff0c;需要先退出&#xff09; C:\xxx>deactivate # 删除现有的虚拟环境文件夹 C:\xxx>rmdir /s /q venv # 创建新的虚拟环境 C:\xxx>python -m venv venv # 激活新的虚拟环…

责任链模式(Chain of Responsibility Pattern)

责任链模式 说明 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;属于行为型模式&#xff0c;它是指使多个对象都有机会处理请求&#xff0c;将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。从而避免请求…

IntelliJ IDEA自定义关闭当前文件的快捷方式

前言 idea中关闭当前标签页的默认快捷键是CtrlF4,这个组合键在键盘上操作起来很是不方便&#xff0c;我们可以在设置中自定义自己习惯的快捷方式。 自定义步骤 要在 IntelliJ IDEA 中将关闭当前文件的快捷方式设置为 Alt Q&#xff0c;请按照以下步骤操作&#xff1a;打开 …

Vue+Element页面生成快照截图

页面部分: <template><div ref"homePage" class"home-container rel"><div class"snap-box abs"><div title"页面快照" class"z-pointer" click"newSnapShot()"><img :src"snap…

ES分布式搜索-索引库操作

索引库操作 1、mapping映射属性 可以查看官方文档学习&#xff1a;ES官方手册 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数据类型&#xff0c;常见的简单类型有&#xff1a; 字符串&#xff1a;text&#xff08;可…

github Commits must have verified signatures

1.首先确认是否有权限&#xff0c;如有权限的情况下那就是配置有问题了 我的情况是&#xff0c;能拉取代码&#xff0c;提交的时候出现这种情况&#xff1a;Commits must have verified signatures 这里是生成证书&#xff0c;如果已经生成过的&#xff0c;就不用生成了 ssh…

ARM/Linux嵌入式面经(一):海康威视

海康威视 1.函数指针和指针函数区别 1.定义的差异 函数指针&#xff1a;函数指针的定义涉及到函数的地址。例如&#xff0c;定义一个指向函数的指针 int (*fp)(int)&#xff0c;这里 fp 是一个指针&#xff0c;它指向一个接受一个整数参数并返回整数的函数。 指针函数&#…