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

jetcache方法缓存

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

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

JetCache 的主要特点和功能

  1. 支持多种缓存后端

    • JetCache 支持多种缓存后端,包括 Redis、Caffeine、LevelDB 等,可以根据项目的需要选择合适的后端存储。
  2. 多种缓存模式

    • Local Cache:本地缓存,使用 Caffeine 或者 ConcurrentHashMap 等,适用于单个应用节点内的快速访问。
    • Remote Cache:远程缓存,例如 Redis,适用于分布式环境下的数据共享和访问。
  3. 缓存注解支持

    • 提供了注解方式来标记需要缓存的方法或者数据,简化了缓存的配置和管理。
  4. 缓存策略

    • 支持多种缓存策略,例如基于 TTL(Time-To-Live)的过期策略、基于定时刷新的刷新策略、基于手动更新的策略等,可以根据业务需求选择合适的策略。
  5. 二级缓存支持

    • 支持二级缓存,例如先从本地快速缓存中获取数据,如果未命中再从远程缓存中获取,可以有效减少远程调用带来的延迟。
  6. 数据序列化和反序列化

    • 提供了对缓存数据的序列化和反序列化支持,可以灵活地处理不同类型的数据对象。
  7. 监控和统计

    • 提供了监控和统计功能,可以实时查看缓存的使用情况、命中率等指标,便于性能调优和监控。

使用 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

你看在控制台就能打印了

我们进行查询后

有了数据

小结

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

相关推荐
刘九灵8 小时前
Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构
redis·缓存
煎饼小狗17 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
雯0609~19 小时前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
菠萝咕噜肉i21 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
只因在人海中多看了你一眼1 天前
分布式缓存 + 数据存储 + 消息队列知识体系
分布式·缓存
Dlwyz1 天前
redis-击穿、穿透、雪崩
数据库·redis·缓存
Oak Zhang1 天前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
门牙咬脆骨1 天前
【Redis】redis缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存
门牙咬脆骨1 天前
【Redis】GEO数据结构
数据库·redis·缓存
Dlwyz1 天前
问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
数据库·redis·缓存