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

@Cacheable 注解的 @CacheManager 示例

pom.xml 依赖包:

        <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>

application.properties

配置如下:

# ############## redis config##########redis.host= xx.xx.xx.xx
redis.port=6579
redis.password=xxxxredis.master=xx
redis.host.proxy=xxxx
redis.port.proxy=6579
redis.password.proxy=xxxx#redis cluster
redis.cache.clusterNodes=xxx:xxx,xxx:xxx,xxx:xxx
redis.cache.password=xxx
redis.cache.commandTimeout=1000
redis.cache.soTimeout=3000
redis.cache.maxAttempts=5
redis.cache.expireSeconds=120
redis.pool.maxActive=30
redis.pool.maxIdle=10
redis.pool.maxTotal=1024
redis.pool.maxWaitMillis=2000
redis.pool.testOnBorrow=false# ############## redis config end##########

代码如下:

@ConfigurationProperties(prefix = “redis”) 表示读取 以redis 开头的配置。

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.*;
import redis.clients.jedis.JedisPoolConfig;import java.time.Duration;@Configuration
@ConfigurationProperties(prefix = "redis")
@Slf4j
public class RedisProxyConfig {@Value("${redis.host.proxy}")private String host;@Value("${redis.port.proxy}")private int port;@Value("${redis.password.proxy}")private String password;@Value("${redis.pool.maxActive}")private int maxActive;@Value("${redis.pool.maxIdle}")private int maxIdle;@Value("${redis.pool.maxTotal}")private int maxTotal;@Value("${redis.pool.maxWaitMillis}")private int maxWaitMillis;@Value("${redis.pool.testOnBorrow}")private boolean testOnBorrow;@Beanpublic JedisPoolConfig jedisPoolConfig() {JedisPoolConfig jc = new JedisPoolConfig();jc.setMaxTotal(maxTotal);jc.setMaxIdle(maxIdle);jc.setMaxWaitMillis(maxWaitMillis);jc.setTestOnBorrow(testOnBorrow);return jc;}@Bean@Autowiredpublic JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {log.info("RedisConfig jedisConnectionFactory Proxy Bean!");JedisConnectionFactory factory = new JedisConnectionFactory();factory.setHostName(host);factory.setPort(port);if (StringUtils.isNotEmpty(password)) {factory.setPassword(password);}factory.setPoolConfig(jedisPoolConfig);factory.setUsePool(true);return factory;}@Bean@Autowiredpublic StringRedisTemplate stringRedisTemplate(@Qualifier("jedisConnectionFactory") JedisConnectionFactory jedisConnectionFactory) {return new StringRedisTemplate(jedisConnectionFactory);}@Beanpublic RedisTemplate redisTemplate(@Qualifier("jedisConnectionFactory") JedisConnectionFactory jedisConnectionFactory) {RedisTemplate redisTemplate = new RedisTemplate();redisTemplate.setConnectionFactory(jedisConnectionFactory);RedisSerializer<String> stringSerializer = new StringRedisSerializer();RedisSerializer<Object> jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();redisTemplate.setKeySerializer(stringSerializer);redisTemplate.setHashKeySerializer(stringSerializer);redisTemplate.setValueSerializer(jdkSerializationRedisSerializer);redisTemplate.setHashValueSerializer(jdkSerializationRedisSerializer);return redisTemplate;}@Bean@PrimaryCacheManager cacheManager(@Qualifier("jedisConnectionFactory") JedisConnectionFactory jedisConnectionFactory) {Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisCacheManager redisCacheManager = RedisCacheManager.builder(jedisConnectionFactory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).entryTtl(Duration.ofMinutes(10))).build();
//        redisCacheManager.setUsePrefix(true);
//        redisCacheManager.setDefaultExpiration(600);return redisCacheManager;}/*** 默认1小时有效期,在cacheable注解中未指明时默认使用此cacheManager** @param jedisConnectionFactory* @return*/@BeanCacheManager cacheManagerOneHour(@Autowired RedisConnectionFactory jedisConnectionFactory) {Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisCacheManager redisCacheManager = RedisCacheManager.builder(jedisConnectionFactory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))//entryTtl 表示缓存的时间.entryTtl(Duration.ofMinutes(60))).build();return redisCacheManager;}}

@Cacheable 注解的使用

详情见:https://blog.csdn.net/sinat_32502451/article/details/134310654

相关文章:

@Cacheable 注解的 @CacheManager 示例

pom.xml 依赖包&#xff1a; <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jed…...

springboot二维码示例

pom.xml依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>…...

nacos做服务配置和服务器发现

一、创建项目 1、创建一个spring-boot的项目 2、创建三个模块file、system、gateway模块 3、file和system分别配置启动信息,并且创建一个简单的控制器 server.port9000 spring.application.namefile server.servlet.context-path/file4、在根目录下引入依赖 <properties&g…...

KCC@广州与 TiDB 社区联手—广州开源盛宴

10月21日&#xff0c;KCC广州与 TiDB 社区联手&#xff0c;在海珠区保利中悦广场 29 楼召开了一次难忘的开源盛宴。这不仅仅是 KCC广州的又一次线下见面&#xff0c;更代表着与 TiDB 社区及广州技术社区的首次深度合作。 活动的策划与组织由 KCC广州负责人 - 惠世冀、PingCAP 的…...

CSS3 分页、框大小、弹性盒子

一、CSS3分页&#xff1a; 网站有很多个页面&#xff0c;需要使用分页来为每个页面做导航。示例&#xff1a; <style> ul.pagination { display: inline-block; padding: 0; margin: 0; } ul.pagination li {display: inline;} ul.pagination li a { color: black; f…...

GEE问题——GEE中循环的使用map()函数,以提取指定范围内的逐日的二氧化氮平均浓度为例

问题: 我有一个简单的代码,可以帮助计算德克萨斯州每个县的对流层二氧化氮平均浓度。目前,我可以将其导出为我指定的任何日期范围的 csv 表,但我想 1) 提取每天平均值,例如 3 个月(2020 年 3 月至 2020 年 5 月,约 90 天)--手动多次运行肯定不是办法,而且我的编码技…...

短信验证码实现(阿里云)

如果实现短信验证&#xff0c;上教程&#xff0c;这里用的阿里云短信服务 短信服务 (aliyun.com) 进入短信服务后开通就行&#xff0c;可以体验100条免费&#xff0c;刚好测试用 这里由自定义和专用&#xff0c;测试的话就选择专用吧&#xff0c;自定义要审核&#xff0c; Se…...

如何对element弹窗进行二次封装

方式一使用$refs 个人比较喜欢用这种的 通过$refs打开的同时 还能给弹窗组件传参 一些框架使用的也是这种方式 父组件 <template><div><el-button type"text" click"handleDialogOpen">打开嵌套表单的 Dialog</el-button><Dia…...

【微服务专题】手写模拟SpringBoot

目录 前言阅读对象阅读导航前置知识笔记正文一、工程项目准备1.1 新建项目1.1 pom.xml1.2 业务模拟 二、模拟SpringBoot启动&#xff1a;好戏开场2.1 启动配置类2.1.1 shen-base-springboot新增2.1.2 shen-example客户端新增启动类 三、run方法的实现3.1 步骤一&#xff1a;启动…...

七个优秀微服务跟踪工具

随着微服务架构复杂性的增加&#xff0c;在问题出现时确定问题的根本原因变得更具挑战性。日志和指标为我们提供了有用的信息&#xff0c;但并不能提供系统的完整概况。这就是跟踪的用武之地。通过跟踪&#xff0c;开发人员可以监控微服务之间的请求进度&#xff0c;从而使他们…...

redis 问题解决 1

1.1 常见考点 1、Redis 为何这么快? Redis 是一款基于内存的数据结构存储系统,它之所以能够提供非常快的读写性能,主要是因为以下几个方面的原因: 基于内存存储:Redis 所有的数据都存储在内存中,而内存的访问速度比磁盘要快得多。因此,Redis 可以提供非常快的读写性能…...

odoo16前端框架源码阅读——启动、菜单、动作

odoo16前端框架源码阅读——启动、菜单、动作 目录&#xff1a;addons/web/static/src 1、main.js odoo实际上是一个单页应用&#xff0c;从名字看&#xff0c;这是前端的入口文件&#xff0c;文件内容也很简单。 /** odoo-module **/import { startWebClient } from "…...

C/C++(a/b)*c的值 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C(a/b)*c的值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C(a/b)*c的值 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定整数a、b、c&#xff0c;计算(a / b)*c的值&…...

CIFAR-100数据集的加载和预处理教程

一、CIFAR-100数据集介绍 CIFAR-100&#xff08;Canadian Institute for Advanced Research - 100 classes&#xff09;是一个经典的图像分类数据集&#xff0c;用于计算机视觉领域的研究和算法测试。它是CIFAR-10数据集的扩展版本&#xff0c;包含了更多的类别&#xff0c;用…...

C#,数值计算——函数计算,Eulsum的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Eulsum { private double[] wksp { get; set; } private int n { get; set; } private int ncv { get; set; } public bool cnvgd { get; set; } pri…...

ChatGLM3 langchain_demo 代码解析

ChatGLM3 langchain_demo 代码解析 0. 背景1. 项目代码结构2. 代码解析2-1. utils.py2-2. ChatGLM3.py2-3. Tool/Calculator.py2-4. Tool/Weather.py2-5. main.py 0. 背景 学习 ChatGLM3 的项目内容&#xff0c;过程中使用 AI 代码工具&#xff0c;对代码进行解释&#xff0c;…...

asp.net学院网上报销系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net学院网上报销系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net学院网上报销系统 应用技术…...

ElasticSearch知识点

什么是ElasticSearch ElasticSearch: 智能搜索&#xff0c;分布式的搜索引擎&#xff0c;是ELK的一个非常完善的产品&#xff0c;ELK代表的是: E就是ElasticSearch&#xff0c;L就是Logstach&#xff0c;K就是kibana Elasticsearch是一个建立在全文搜索引擎 Apache Lucene基础…...

STM32 GPIO

STM32 GPIO GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口&#xff0c;也就是我们俗称的IO口 根据使用场景&#xff0c;可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 数据0就是低电平&#xff0c…...

Electron 开发页面应用

简介 Electron集成了包括chromium&#xff08;理解为具备chrom浏览器的工具&#xff09;&#xff0c;nodejs&#xff0c;native apis chromium&#xff1a;支持最新特性的浏览器。 nodejs&#xff1a;js运行时&#xff0c;可实现文件读写等。 native apis &#xff1a;提供…...

AudioSeal Pixel Studio惊艳效果展示:水印嵌入前后MOS语音质量主观评测结果

AudioSeal Pixel Studio惊艳效果展示&#xff1a;水印嵌入前后MOS语音质量主观评测结果 1. 专业级音频水印技术揭秘 AudioSeal Pixel Studio是一款基于Meta开源的AudioSeal算法构建的音频保护工具。它能在几乎不影响音质的情况下&#xff0c;为音频添加隐形的数字水印&#x…...

5大方法实现Alienware灯光、风扇与电源的深度个性化控制

5大方法实现Alienware灯光、风扇与电源的深度个性化控制 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools Alienware设备用户常面临原厂软件功能受限、个…...

Qwen3-VL-8B AI聊天系统Web版效果展示:实测图文对话能力,惊艳的AI聊天体验

Qwen3-VL-8B AI聊天系统Web版效果展示&#xff1a;实测图文对话能力&#xff0c;惊艳的AI聊天体验 1. 开篇&#xff1a;当AI开始"看图说话" 想象一下这样的场景&#xff1a;你随手拍下办公桌上凌乱的文件堆&#xff0c;发给AI问&#xff1a;"这些文件该怎么分…...

.NET 磁盘BitLocker加密-技术选型览

在之前的文章中&#xff0c;我们花了大量的篇幅&#xff0c;从记录后端pod真实ip开始说起&#xff0c;然后引入envoy&#xff0c;再解决了各种各样的需求&#xff1a;配置自动重载、流量劫持、sidecar自动注入&#xff0c;到envoy的各种能力&#xff1a;熔断、流控、分流、透明…...

GME-Qwen2-VL-2B-Instruct在法律文书中的应用:证据图与案情描述匹配

GME-Qwen2-VL-2B-Instruct在法律文书中的应用&#xff1a;证据图与案情描述匹配 1. 引言&#xff1a;当法律文书遇上AI图文匹配 想象一下这样的场景&#xff1a;一位律师或法务人员&#xff0c;面对一份厚厚的卷宗&#xff0c;里面夹杂着几十张现场照片、监控截图、物证图片。…...

Qwen3-4B商业应用案例:电商文案、代码生成、多语言翻译实战

Qwen3-4B商业应用案例&#xff1a;电商文案、代码生成、多语言翻译实战 1. 为什么选择Qwen3-4B进行商业应用 在当今商业环境中&#xff0c;效率和质量是企业竞争力的核心。Qwen3-4B Instruct-2507作为阿里通义千问系列中的轻量级纯文本大模型&#xff0c;凭借其专注的文本处理…...

ESP32-S3 + INMP441麦克风没声音?手把手教你用Arduino I2S库快速诊断(附完整代码)

ESP32-S3与INMP441麦克风无声故障全排查指南 当你兴奋地将INMP441麦克风焊接到ESP32-S3开发板&#xff0c;准备开始音频采集项目时&#xff0c;却发现设备一片寂静——这种挫败感我深有体会。去年在开发智能语音门锁原型时&#xff0c;我曾连续三天被这个看似简单的问题困扰。本…...

一般的app开屏广告全都能拦截了

我说&#xff1a;凡是我拦截不了的app&#xff0c;一律删除测试通过app包括&#xff1a;camhipro----这个app弹广告很频繁的&#xff0c;但是监控总不能自己写个物联网app去连接吧&#xff0c;没准还真的可以。通过爱奇艺 通过酷狗音乐 能拦截网易音乐-----我能拦截成功了别人…...

HCIA复习——瑕疵版

AR4配置部分system-view sysname AR3 undo info-center enable# 接 AR1 interface GigabitEthernet 0/0/0ip address 202.100.1.2 255.255.255.252quit# 接 AR4 interface GigabitEthernet 0/0/1ip address 10.1.34.1 255.255.255.252quit# 接 AR5 interface GigabitEthernet 0…...

PyTorch Profiler调优超简单

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 PyTorch Profiler&#xff1a;超越"超简单"的深度性能调优实践目录PyTorch Profiler&#xff1a;超越"超简单&qu…...