广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)
  • 299
分享到

SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)

2024-04-02 19:04:59 299人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

1. 缓存、两级缓存 1.1 内容说明 spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明 SpringBoot+spring cache

1. 缓存、两级缓存

1.1 内容说明

spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明
SpringBoot+spring cache:Rediscache实现中的缺陷
caffeine简介
Spring Boot+spring cache实现两级缓存

使用缓存时的流程图

在这里插入图片描述

1.2 Sping Cache

spring cache是spring-context包中提供的基于注解方式使用的缓存组件,定义了一些标准接口,通过实现这些接口,就可以通过在方法上增加注解来实现缓存。这样就能够避免缓存代码与业务处理耦合在一起的问题。spring cache的实现是使用spring aop中对方法切面(MethodInterceptor)封装的扩展,当然spring aop也是基于Aspect来实现的。
spring cache核心的接口就两个:Cache和CacheManager

1.2.1 Cache接口

提供缓存的具体操作,比如缓存的放入,读取,清理,spring框架中默认提供的实现有

在这里插入图片描述

1.2.2 CacheManager接口

主要提供Cache实现bean的创建,每个应用里可以通过cacheName来对Cache进行隔离,每个CaheName对应一个Cache实现,spring框架中默认提供的实现与Cache的实现都是成对出现的

1.2.3 常用的注解说明

  • @Cacheable:主要应用到查询数据的方法上
  • @CacheEvict:清除缓存,主要应用到删除数据的方法上
  • @CachePut:放入缓存,主要用到对数据有更新的方法上
  • @Caching:用于在一个方法上配置多种注解
  • @EnableCaching:启用spring cache缓存,作为总的开关,在spring boot的启动类或配置类上需要加入次注解才会生效

2.实战多级缓存的用法


package com.xfgg.demo.config;

import lombok.AllArgsConstructor;
import com.GitHub.benmanes.caffeine.cache.Caffeine;

import org.springframework.cache.CacheManager;

import org.springframework.cache.caffeine.CaffeineCacheManager;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
@AllArgsConstructor
//把定义的缓存加入到Caffeine中
public class CacheConfig {
    @Bean
    public CacheManager cacheManager(){
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                //使用refreshAfterWrite必须要设置cacheLoader
                //在5分钟内没有创建/覆盖时,会移除该key,下次取的时候从loading中取【重点:失效、移除Key、失效后需要获取新值】
                .expireAfterWrite(5, TimeUnit.MINUTES)
                //初始容量
                .initialCapacity(10)
                //用来控制cache的最大缓存数量
                .maximumSize(150)
        );
        return cacheManager;
    }
}


package com.xfgg.demo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassWord;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

//生成的redis连接
public class RedisConfig<GenericObjectPoolConfig> {
    @Value("${spring.redis1.host}")
    private String host;
    @Value("${spring.redis1.port}")
    private Integer port;
    @Value("${spring.redis1.password}")
    private String password;
    @Value("${spring.redis1.database}")
    private Integer database;

    @Value("${spring.redis1.lettuce.pool.max-active}")
    private Integer maxActive;
    @Value("${spring.redis1.lettuce.pool.max-idle}")
    private Integer maxIdle;
    @Value("${spring.redis1.lettuce.pool.max-wait}")
    private Long maxWait;
    @Value("${spring.redis1.lettuce.pool.min-idle}")
    private Integer minIdle;


    @Bean
    public RedisStandaloneConfiguration redis1RedisConfig() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
        config.setHostName(host);
        config.setPassword(RedisPassword.of(password));
        config.setPort(port);
        config.setDatabase(database);
        return config;
    }
    //配置序列化器
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<String,Object>template=new RedisTemplate<>();
        //关联
        template.setConnectionFactory(factory);
        //设置key的序列化器
        template.seTKEySerializer(new StringRedisSerializer());
        //设置value的序列化器
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}

一个使用cacheable注解,一个使用redistemplate进行缓存
因为公司项目中用到的是jedis和jediscluster所以这里只是做个了解,没有写的很细

到此这篇关于SpringBoot+SprinGCache实现两级缓存(Redis+Caffeine)的文章就介绍到这了,更多相关SpringBoot SpringCache两级缓存内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)

本文链接: https://www.lsjlt.com/news/124956.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)
    1. 缓存、两级缓存 1.1 内容说明 Spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明 springboot+spring cache...
    99+
    2022-11-12
  • Redis+Caffeine两级缓存的实现
    目录优点与问题准备工作V1.0版本V2.0版本V3.0版本在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没...
    99+
    2022-06-22
    RedisCaffeine两级缓存 RedisCaffeine缓存
  • SpringBoot+SpringCache实现两级缓存的示例分析
    这篇文章给大家分享的是有关SpringBoot+SpringCache实现两级缓存的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。springboot是什么springboot一种全新的编程规范,其设计目...
    99+
    2023-06-14
  • 基于Spring接口集成Caffeine+Redis两级缓存
    目录前言改造JSR107 规范CacheCacheManager配置&使用分布式环境改造定义消息体Redis消息配置消息消费逻辑修改DoubleCache测试总结前言 在上一...
    99+
    2022-11-13
  • 基于Spring Cache实现Caffeine+Redis二级缓存
    目录一、聊聊什么是硬编码使用缓存?二、Spring Cache简介1、Cache接口2、CacheManager接口3、常用注解说明三、使用二级缓存需要思考的一些问题?四、Caffe...
    99+
    2022-11-13
  • 基于Spring Cache如何实现Caffeine+Redis二级缓存
    这篇文章主要为大家展示了“基于Spring Cache如何实现Caffeine+Redis二级缓存”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Spring Cache如...
    99+
    2023-06-29
  • SpringBoot怎么使用Caffeine实现缓存
    这篇文章主要介绍“SpringBoot怎么使用Caffeine实现缓存”,在日常操作中,相信很多人在SpringBoot怎么使用Caffeine实现缓存问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Sprin...
    99+
    2023-07-02
  • SpringBoot集成Caffeine缓存的实现步骤
    目录Maven依赖 配置 示例 Maven依赖 要开始使用咖啡因Caffeine和Spring Boot,我们首先添加spring-boot-starter-cache和咖啡因Ca...
    99+
    2022-11-12
  • Redis+Caffeine实现分布式二级缓存组件实战教程
    目录前言所谓二级缓存分布式二级缓存的优势如何使用组件?核心实现方法关于分布式本地缓存失效前言 在生产中已有实践,本组件仅做个人学习交流分享使用。github:https://github.com/axinSoochow/...
    99+
    2022-08-08
    Redis Caffeine分布式二级缓存 Redis Caffeine二级缓存
  • SpringCache如何实现请求级别缓存
    这篇文章将为大家详细讲解有关SpringCache如何实现请求级别缓存,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 方案分析 要将数据缓存在一次请求周期内,那我们先...
    99+
    2022-10-19
  • SpringBoot使用Caffeine实现缓存的示例代码
    目录为什么要在应用程序中添加缓存在Spring Boot应用程序中实现缓存SpringBoot提供了什么缓存支持?添加生成依赖项缓存配置缓存方法结果测试缓存是否正常工作为什么缓存有时...
    99+
    2022-11-13
  • 利用Springboot+Caffeine实现本地缓存实例代码
    目录简介Caffeine 介绍思路本文使用开发环境总结简介 之前在项目中遇到了一个新需求,领导让我使用本地缓存,来缓存数据库查出的用户信息,经过一番资料查阅和实验,最终确定了使用Ca...
    99+
    2023-01-07
    spring boot 本地缓存 springboot缓存框架 springboot caffeine
  • 浅谈SpringCache与redis集成实现缓存解决方案
    缓存可以说是加速服务响应速度的一种非常有效并且简单的方式。在缓存领域,有很多知名的框架,如EhCache 、Guava、HazelCast等。Redis作为key-value型数据库,由于他的这一特性,Redis也成为一种流行的数据缓存工具...
    99+
    2023-05-30
    spring cache redis
  • Redis实现多级缓存
    本文实例为大家分享了Redis实现多级缓存的具体代码,供大家参考,具体内容如下 一、多级缓存 1. 传统缓存方案 请求到达tomcat后,先去redis中获取缓存,不命中则去mysql中获取 2. 多级缓存方案 tom...
    99+
    2022-07-28
    Redis 多级缓存
  • redis实现缓存的两种方式
    本篇文章给大家分享的是有关redis实现缓存的两种方式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。redis实现缓存大致为两种措施:一、脚本...
    99+
    2022-10-18
  • springboot+mybatis+redis 二级缓存问题实例详解
    前言什么是mybatis二级缓存?二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace。即,在不同的sqlsession中,相同的namespace下,相同的sql语句,并且sql模板中参数也相同的,会...
    99+
    2023-05-30
    spring boot mybatis
  • redis如何实现多级缓存
                                 ...
    99+
    2022-10-18
  • SpringBoot实现redis缓存菜单列表
    因为系统的菜单列表是不轻易改变的,所以不需要在每次请求的时候都去查询数据库,所以,在第一次根据用户id请求到菜单列表的时候,可以把菜单列表的数据缓存在redis里,在第二次请求菜单列...
    99+
    2022-11-13
  • SpringBoot使用Redis实现分布式缓存
    目录springboot使用Redis实现分布式缓存Redis实现主从复制Redis集群的构建 springboot使用Redis实现分布式缓存 1、环境构建 ​ 1.1 ...
    99+
    2023-05-14
    Java Springboot使用Redis分布式缓存 Redis分布式缓存 Springboot分布式缓存
  • SpringBoot如何实现redis缓存菜单列表
    这篇文章主要为大家展示了“SpringBoot如何实现redis缓存菜单列表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何实现redis缓存菜单列表”这篇文章吧。因为系统...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作