SpringBoot配置第三方专业缓存技术jetcache方法缓存方案

简介: SpringBoot配置第三方专业缓存技术jetcache方法缓存方案

jetcache方法缓存

我们可以给每个方法配置缓存方案

JetCache 是一个基于 Java 的缓存库,支持多种缓存方案和缓存策略,主要用于提升应用程序的性能和响应速度。它提供了多种缓存模式和特性,可以根据需求选择合适的缓存方案。

JetCache 的主要特点和功能

  1. 支持多种缓存后端
  • JetCache 支持多种缓存后端,包括 Redis、Caffeine、LevelDB 等,可以根据项目的需要选择合适的后端存储。
  1. 多种缓存模式
  • Local Cache:本地缓存,使用 Caffeine 或者 ConcurrentHashMap 等,适用于单个应用节点内的快速访问。
  • Remote Cache:远程缓存,例如 Redis,适用于分布式环境下的数据共享和访问。
  1. 缓存注解支持
  • 提供了注解方式来标记需要缓存的方法或者数据,简化了缓存的配置和管理。
  1. 缓存策略
  • 支持多种缓存策略,例如基于 TTL(Time-To-Live)的过期策略、基于定时刷新的刷新策略、基于手动更新的策略等,可以根据业务需求选择合适的策略。
  1. 二级缓存支持
  • 支持二级缓存,例如先从本地快速缓存中获取数据,如果未命中再从远程缓存中获取,可以有效减少远程调用带来的延迟。
  1. 数据序列化和反序列化
  • 提供了对缓存数据的序列化和反序列化支持,可以灵活地处理不同类型的数据对象。
  1. 监控和统计
  • 提供了监控和统计功能,可以实时查看缓存的使用情况、命中率等指标,便于性能调优和监控。

使用 JetCache 的步骤

使用 JetCache 进行方法级别的缓存通常涉及以下几个步骤:

  1. 引入 JetCache 依赖: 在项目的 Maven 或者 Gradle 配置文件中引入 JetCache 的相关依赖。
  2. 配置缓存后端: 配置 JetCache 使用的缓存后端,例如 Redis、Caffeine 等。需要配置缓存的地址、端口、密码等参数。
  3. 定义缓存配置: 可以通过 Java 代码或者配置文件的方式定义缓存的配置信息,包括缓存的名称、过期时间、缓存模式等。
  4. 在方法上添加缓存注解: 使用 JetCache 提供的注解,如 @Cached@CacheInvalidate 等,来标记需要进行缓存操作的方法。可以指定缓存的 key、条件、过期时间等参数。
  5. 调整缓存策略: 根据具体的业务需求和性能要求,调整缓存的策略和参数,例如缓存的过期时间、刷新策略等。
  6. 启动应用程序: 启动应用程序,JetCache 将根据配置和注解来管理和处理缓存,提升应用的性能和响应速度。

我们是在业务层的实现类里操作的

我们首先要在启动响应类里打开开关

@EnableCreateCacheAnnotation
@EnableMethodCache(basePackages = "com.example.demo")

在业务层的实现类里去修改代码

@Override
@Cached(name="book",key="#id",expire = 3600)
public User getById(Integer id) {
    return userDao.selectById(id);
}

注意 预防空指针异常

注意 预防序列化反序列化

配置中同样要进行修改

意思是告诉框架 这是个java对象

启动成功

但是我们有一个问题

如果取缓存

缓存中的数据变化了

我们确没有更新

我们怎么去做

我们要在更新操作里去修改

我们每次调用更新操作或者是删除操作的时候

都会有个数值的更新操作

@Override
@CacheUpdate(name="book_",key="#book.id",value="#book")
public boolean update(User user) {
    return userDao.updateById(user)>0;
}

如果我们有两个系统

同时对一个表进行操作

一个删除 对方也不知道

这就叫我们内存中的数据和系统中的数据不同步

我们要进行一个刷新

设置每十秒进行一次刷新

@CacheRefresh(refresh = 10)
package com.example.demo.service.impl;
 
import com.alicp.jetcache.anno.CacheInvalidate;
import com.alicp.jetcache.anno.CacheRefresh;
import com.alicp.jetcache.anno.CacheUpdate;
import com.alicp.jetcache.anno.Cached;
import com.example.demo.dao.UserDao;
import com.example.demo.domain.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class UserServiceImpl implements UserService {
 
    @Autowired
    private UserDao userDao;
 
    @Override
    @Cached(name="book_",key="#id",expire = 3600)
    @CacheRefresh(refresh = 10)
    public User getById(Integer id) {
        return userDao.selectById(id);
    }
 
    @Override
    public boolean save(User user) {
        return userDao.insert(user)>0;
    }
    @Override
    @CacheUpdate(name="book_",key="#book.id",value="#book")
    @CacheRefresh(refresh = 10)
    public boolean update(User user) {
        return userDao.updateById(user)>0;
    }
 
    @Override
    @CacheInvalidate(name="book_",key="#book.id")
    @CacheRefresh(refresh = 10)
    public boolean delete(Integer id) {
        return userDao.deleteById(id)>0;
    }
 
    @Override
    public List<User> getAll() {
        return userDao.selectList(null);
    }
}

我们还可以加上一个配置

设置每隔一分钟会进行jetcache信息的打印

jetcache:
  statIntervalMinutes: 1
  local:
    default:
      type: linkedhashmap
      keyConvertor: fastjson

你看在控制台就能打印了

我们进行查询后

有了数据

小结

目录
相关文章
|
2月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
103 0
|
1月前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
349 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
23天前
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
|
3月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
110 15
Android 系统缓存扫描与清理方法分析
|
1月前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
67 3
|
2月前
|
存储 缓存 安全
在 Service Worker 中配置缓存策略
Service Worker 是一种可编程的网络代理,允许开发者控制网页如何加载资源。通过在 Service Worker 中配置缓存策略,可以优化应用性能,减少加载时间,提升用户体验。此策略涉及缓存的存储、更新和检索机制。
|
2月前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
84 10
|
2月前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
68 5
|
2月前
|
存储 缓存 监控
配置 Webpack 5 持久化缓存时需要注意哪些安全问题?
【10月更文挑战第23天】通过全面、系统地分析和应对安全问题,能够更好地保障 Webpack 5 持久化缓存的安全,为项目的成功构建和运行提供坚实的安全基础。同时,要保持对安全技术的关注和学习,不断提升安全防范能力,以应对日益复杂的安全挑战。
|
3月前
|
存储 安全 Java