SpringBoot自定义缓存

手把手教你用MaxEnt+ArcGIS玩转物种分布预测 本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。 阅读详情

上一篇文章说了默认的缓存实际上是:ConcurrentMap,有很多功能都没有,比如:定期删除、容量上线、容量不够的策略(LRU、LFU)等等。

自定义缓存步骤

1. 定义一个属于自己的Cache,需要实现org.springframework.cache.Cache
public class MyCache implements Cache {
    private MyLinkedHashMap<String> myMap = new MyLinkedHashMap<>(2, 1, true);
    private String name;

    @Override
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Object getNativeCache() {
        return myMap;
    }

    @Override
    public ValueWrapper get(Object key) {
        String value = myMap.get(key);
        return value == null ? null : () -> value;
    }

    @Override
    public <T> T get(Object key, Class<T> type) {
        Object value = myMap.get(key);
        if (value != null && type != null && !type.isInstance(value)) {
            throw new IllegalStateException(
                    "Cached value is not of required type [" + type.getName() + "]: " + value);
        }
        return (T) value;
    }

    @Override
    public <T> T get(Object key, Callable<T> valueLoader) {
        return Optional.ofNullable((T) myMap.get(key)).orElseGet(() -> {
            try {
                return valueLoader.call();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
    }

    @Override
    public void put(Object key, Object value) {
        myMap.put((String) key, (String) value);
    }

    @Override
    public ValueWrapper putIfAbsent(Object key, Object value) {
        return () -> Optional.ofNullable((Object) myMap.get(key)).orElse(value);
    }

    @Override
    public void evict(Object key) {
    }

    @Override
    public boolean evictIfPresent(Object key) {
        return false;
    }

    @Override
    public void clear() {
        myMap.clear();
    }

    @Override
    public boolean invalidate() {
        return false;
    }

}
2. 重写缓存底层数据结构(当然也可以用Java自带的数据结构,比如:HashMap、LinkedHashMap、ConcurrentMap等)
public class MyLinkedHashMap<T> extends LinkedHashMap<String, T> {
    private int capacity;

    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > capacity;
    }

    public MyLinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) {
        //可选参数accessOrder 设置为true 即可实现LRU逻辑
        super(initialCapacity, loadFactor, accessOrder);
        this.capacity = initialCapacity;
    }
}
3. 注入到SimpleCacheManager
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/cache
           http://www.springframework.org/schema/cache/spring-cache.xsd">

    <cache:annotation-driven/>

    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <property name="caches">
            <set>
                <!-- 自定义cache -->
                <bean class="com.dong.springuseehcacheredis.cache.MyCache">
                    <property name="name" value="帅东自定义cache"/>
                </bean>
            </set>
        </property>
    </bean>
</beans>

GitHub代码

https://github.com/shuaidongshuai/spring-use-ehcache-redis

有限元分析-静力学分析-与分析解对比-——以阶梯轴的静力分析为例——静态结构分析 150mm,a=300mm{a=300mm}a=300mm,b=200mm{b=200mm}b=200mm,L=1000mm{L=1000mm}L=1000mm,F=300kN{F=300kN}F=300kN,材料为45,弹性模量E=2.1e11Pa{E=2.1e11Pa}E=2.1e11Pa,泊松比v=0.28{v=0.28}v=0.28,屈服应力δs=355MPa{δ_s=355MPa}δ。使用line body生成的模型,可以选择自动划分网格的,WB会将以梁单元将其划分完成,例如图2所示。 阅读详情

相关推荐

手把手教你逆向分析某里系bx-ua参数(以225版本为例)

本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。

weixin_33220360的博客 411

Spring Boot(十四):自定义缓存管理器

1. 介绍 目前业界使用广泛的内存数据存储有redis、Memcached。相比 Memcached,Redis 支持更丰富的数据结构。同时支持数据持久化。除此之外,Redis 还提供一些类数据库的特性,比如事务,HA,主从库。可以说 Redis 兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。不过本篇文件的重点不是redis,重点是手写一个简易的内存型缓存数据库。 ...

qq_25432245的博客 1283

FortiClient EMS实战:从安装到配置的全流程优化指南

本文详细解析了FortiClient EMS 7.0版本的部署与优化全流程,帮助企业构建零信任终端安全体系。从环境规划、高效安装、终端纳管到高级运维,提供实战指南和优化技巧,特别适用于Windows Server环境,助力企业提升终端安全管理效率。

weixin_29325007的博客 547

springboot:缓存不止redis,学会使用本地缓存ehcache

ehcache是基于java开发的本地缓存组件,无需单独安装部署,只要引入jar包就可利用它来实现缓存。所谓本地缓存,就是指存储在JVM堆内存中的临时缓存数据,当然ehcache本身也支持Off-Heap Store机制来使用堆外内存,本地缓存相较于redis性能和响应速度更高。Ehcache的本地缓存还支持过期时间、最大容量、持久化等特性,使得它可以适用于各种不同的缓存场景。

55555的博客 8403

Python中优化模块scipy.optimize的优化算法介绍

如果你有一个特殊的优化问题,你可以使用对象来自定义问题的求解。# 自定义目标函数# 自定义优化问题custom_problem.fun = custom_objective_function # 目标函数custom_problem.x = [1, 1] # 初始猜测# 执行优化# 打印结果在上述例子中,我们自定义了一个对象,并指定了目标函数和初始猜测,然后使用minimize函数进行求解。Scipy的优化模块提供了丰富的功能,适用于各种优化问题。

Pandas120的博客 3045

Etcd教程 — 第三章 Etcd集群动态发现、DNS发现

Etcd教程 — 第三章 Etcd集群动态发现、DNS发现

Mr_XiMu的博客 2819

springboot微服务实战:SpringCache 分布式缓存(规避redis解锁的问题)

简介 spring 从3.1 开始定义 org.springframework.cache.Cache org.springframework.cache.CacheManager 来统一不同的缓存技术 并支持使用JCache(JSR-107)注解简化我们的开发 基础概念 实战使用 整合SpringCache简化缓存开发 常用注解 常用注解 说明 @CacheEvict 触发将数据从缓存删除的操作 (失效模式) @CachePut 不影响方法执行更新缓存 @Caching 组合

CTRA®王大大技术中心 1204

2023-11-20 MySQL ARM64 银河麒麟

背景 MySQL是常用数据库,Windows安装比较容易,笔者也有记录。现在国产化系统银河麒麟中安装,不同的是软件安装包不容易下载。一是安装的方式,再一个是MySQL本身的版本,网上很多文档说明其实都是对的,但是为什么那么多都不一样呢?就是MySQL本身的版本差异比较大,这些差异笔者也不是很清楚,但是不要用8和5.7的差异非常大,8即使安装的很顺利,在使用过程也会很多坑,导致我宁愿卸载8,也要重新...

jxmh1991@163.com 808

JSR107缓存规范

Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。 CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。 CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个Cachi

会写Bug的攻城狮 444

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

杰理AC695N芯片跑iic接口的oled驱动分享

本文介绍了一个基于IIC接口的0.96寸OLED显示屏驱动程序,适用于SSD1306控制器。驱动采用软件模拟IIC方式,支持字符、数字、字符串、汉字和图片显示,测试平台为杰理AC695N系列芯片。硬件参数包括128×64分辨率,IIC接口(地址0x78),使用IO_PORTA_02(SDA)和IO_PORTA_03(SCL)引脚。驱动包含OLED主文件(oled.c/h)、软件IIC实现(soft_iic.c/h)和字体/图片数据文件(oledfont.h/bmp.h),可通过修改soft_iic.h中的引

qq_42014563的博客 882

Springboot本地缓存和redis缓存

存储简介:最开始使用的存储结构是文件形式(如:操作系统),但这时就存在一个问题,比如:查一个大的文件的时候,就是需要全量IO(在全部文件堆中找到你需要的文件),受磁盘寻址(毫秒)和带宽的影响会很慢,所以应运而生是的数据库(如mysql),数据库通过索引和分治(一堆数据分成m块-建表)降低了复杂度,但数据库在数据量过大、高并发等场景出现时也会出现瓶颈,这时有两种解决方案,一是换高并发处理、负载均衡和分布式数据库(如:HANA-成本高),二是放缓存(纳秒)里,还有一种折中的方法就是将数据库做全量数据,1/N的热

qq_35789269的博客 3567

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络数据集不同于几何网络,是一种高级的连接模型,能够展示复杂的细节,拥有丰富的网络属性模型,可以模拟网络阻力、网络限制以及网络层次等。 本实验重点演示网络分析中最短路径的实现过程。 二、实验内容 1、网络数据集...

智慧空间实验室 5681

SpringBoot下自定义缓存

SpringBoot下自定义缓存 1.依赖导入 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <depen

GuessHat的博客 543

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

springboot自定义缓存@Cache

声明: 本篇文章根据个人项目经验,进行的项目总结,仅代表个人意见,给大家提供个参考,如有不当之处,敬请提出,共同讨论,共同进步。 本篇文章的源码已上传百度网盘。 链接: https://pan.baidu.com/s/1lS6Ff6gZFk6mirEagP-rcQ 提取码: ric4 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 Spring Boot应用中,数据库中有许多基础数据长时间是不会变化的。 当..

zll的专栏 2378

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

springboot自定义redis缓存机制

核心代码 启动类 import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springfr...

阳光 662

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring-Boot-内存缓存Caffiene自定义CacheManager

上一篇介绍了Caffiene整合Spring的缓存注解@Cacheable,在这篇示例中,所有的缓存公用,但是实际的场景中,我们可能会更希望针对不同的场景,配置不同的缓存(比如我的关键数据,虽然访问频率可能没那么高,但是每次实际读取的成本很高,又不怎么变动,我希望可以更长久的缓存;不希望这些数据因为缓存的淘汰策略被其他的热点数据给淘汰掉),那么可以怎么处理呢?接下来我们来看一下两种不同的方式,来实现上面的诉求。

Java程序员的知识博客 3337

Springboot @Cacheable自定义缓存过期时间

文章目录pomymlRedisConfigCustomRedisCacheManager使用 pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId

今天星期六 2931

springboot自定义缓存工具类

缓存是高并发系统的利器,可以大大减轻数据库压力,提高响应速度。 以下介绍在spring boot中使用redis来自定义缓存工具类 引入redis pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

James 1010

使用Spring Boot和自定义缓存注解优化应用性能

Spring Boot提供了@Cacheable@CachePut和等注解来管理缓存,但有时这些注解可能无法满足特定需求。例如,你可能需要更细粒度的缓存控制,或者希望在缓存中存储自定义数据结构。这时,自定义缓存注解就显得尤为重要。首先,我们需要创建一个自定义的缓存注解。这个注解将允许我们指定缓存的键和过期时间。@Inherited/*** 缓存名称* @return*//*** 缓存条件* @return*//*** 过期时间,单位秒*/

北尘 1290

SpringBoot结合Redis 自定义数据缓存

缓存的主要目的是提升系统的性能、处理高并发情况,并减少对数据库的压力。通过将数据存储在内存中,当数据没有本质变化时,我们可以避免频繁地连接数据库进行查询。相反,我们可以首先尝试从缓存中读取数据,只有当缓存中未找到数据时,才会去数据库中查询。这样做可以显著减少数据库的读写操作,提高系统的性能和并发能力。接下来我将写一个简单的缓存小栗子。

Tzeao 1017

springBoot 自定义缓存注解

注解无法声明缓存时间,所以在这里可以自定义一个缓存注解。在声明缓存注解的过程中使用了redis,因为在上一篇文章中已经说明了SpringBoot如何整合redis组件了,所以在此就不做过多的说明了。...

xiayz的博客 943

springboot ehcache缓存使用及自定义缓存存取

添加依赖 首先在pom.xml添加必要依赖 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-cache&lt;/artifactId&gt; ...

open_yu的博客 6575

springboot 自定义缓存 之Redis

概述 缓存在springboot项目中很常见,分布式项目中最常见的缓存机制就是通过redis缓存mybatis的查询数据,如下示例代码: @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { @Bean public CacheManager redisCacheManager(RedisConnectionFactory connectionFactory) { R

LWT_博客 496

springboot redis缓存 可自定义过期时间

自定义MyRedisCacheManager类 import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.ToStringSerializer; import com.alibaba.fastjson.serializer.ValueFilter; impor

wanwandeyue的博客 1288

Spring Boot 实践之九 Spring Boot 缓存管理(默认缓存管理/缓存注解/Spring Boot整合Redis缓存实现/自定义Redis缓存序列化机制)

Spring Boot 实践之九 Spring Boot 缓存管理 ​ 缓存是分布式系统中的重要组件,主要解决数据库数据的高并发访问。在实际开发中,尤其是用户访问量较大的网站,用户对高频热点数据的访问非常频繁,为了提高服务器访问性能、减少数据库的压力、提高用户体验,使用缓存显得尤为重要。 ​ 本章将针对Spring Boot的缓存管理进行介绍,并完成与Redis缓存中间件的整合使用。 1 Spring Boot默认缓存管理 ​ Spring Boot 管理缓存的枋心是

qq_26665293的博客 4084
上一篇: SpringBoot缓存原理
下一篇: Mac的iTerm2安装lrzsz卡死问题
帅东
博客等级 码龄11年 676粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值