springboot2与cache-redis整合

Springboot 2.X 强化课程:Spring-Cache 与 Redis 整合实践 在现代企业级应用中,数据访问速度对用户体验和系统性能有直接影响。缓存作为一种提升数据读取速度的技术手段,被广泛应用。Spring Cache是Spring框架提供的声明式缓存抽象,旨在简化缓存操作,使开发者能够专注于业务逻辑。在Spring Boot应用程序中,配置文件通常以或.yml为扩展名。在这些文件中,可以定义各种连接属性,使得应用程序能够根据不同的运行环境(如开发环境、测试环境、生产环境等)加载不同的配置。 阅读详情

缓存,两个字经常出现在我们的耳旁,它被用作数据的高性能读写,防止每次都需要进行数据库的读写,减少性能消耗。Spring从3.1版本开始就提供了cache支持,SpringBoot更是提供了spring-boot-starter-cache用于我们快速进行缓存开发,支持多种缓存组件整合:Redis、EhCache、Hazelcast等。接下来我们就以当前最火的Redis来为大家介绍cache的使用。

简介

Spring虽然提供了cache支持,但是它只提供org.springframework.cache.Cache和 org.springframework.cache.CacheManager两个接口做缓存逻辑抽象,不做具体的数据存储,所以我们需要选择一种数据库去存储,这里选择Redis。

cache的核心思想:Spring会去检查缓存方法,若该方法已经被执行过并且已经缓存数据,则下次调用该方法会直接从缓存中获取数据,而不是每次调用都执行处理逻辑。使用缓存,在多次调用结果返回值都一样的情况下,性能特别好,缓解数据库压力,提高响应速度。即使数据库数据发生变化,大家也不用担心,缓存数据也会进行相应更改。至于是如何做到的,先不用深究,我们先来一个示例,展示一下cache如何使用,再来思考为什么。

项目搭建

在这里,我们使用Idea+Maven的方式创建项目,大家应该清楚,就不展示具体步骤了。

项目版本:SpringBoot (2.1.4)

首先,引入redis和cache依赖:

pom.xml:

<!--cache公共依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--redis依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redis pool 依赖-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.6.1</version>
</dependency>

SpringBoot会根据依赖自动配置redis缓存,我们无需做过多的配置,只需添加如下参数。

application.properties:

#开启redis缓存
spring.cache.type=redis
#redis地址
spring.redis.host=192.168.159.130
#redis cache默认配置 非必须
spring.cache.redis.cache-null-values=true
spring.cache.redis.key-prefix=REDIS_CACHE_
spring.cache.redis.time-to-live=600000
spring.cache.redis.use-key-prefix=true

User:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private Integer id;
    private String name;
    private Date birth;
}

UserService:

@Service
public class UserService {

    /**
     * 第一次,会执行业务逻辑,获取用户数据并缓存到user中
     * 第二次,会直接从user缓存中获取数据
     * ...
     * @param id id
     * @return user
     */
    @Cacheable(value = "user", key = "#id")
    public User findUserById(Integer id) {
        System.out.println("查找" + id + "用户并缓存");
        return new User(id, "张三", new Date());
    }

    /**
     * 删除user::id的缓存数据
     * @param id id
     */
    @CacheEvict(value = "user", key = "#id")
    public void deleteUserById(Integer id) {
        System.out.println("删除" + id + "用户及缓存");
    }

    /**
     * 在修改{id}用户数据之后,更新user::id缓存数据
     * @param user 用户
     * @return user
     */
    @CachePut(value = "user", key = "#user.id")
    public User updateUserById(User user) {
        System.out.println("更新" + user + "用户并更新缓存");
        return user;
    }
}

UserController:

@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;

    @GetMapping("/{id}")
    public User findUserById(@PathVariable  Integer id) {
        return userService.findUserById(id);
    }

    @DeleteMapping("/{id}")
    public void deleteUserById(@PathVariable Integer id) {
        userService.deleteUserById(id);
    }

    @PutMapping("/{id}/update")
    public void updateUserById(@PathVariable Integer id) {
        User user = new User(id, "李四", new Date());
        userService.updateUserById(user);
    }
}

大家可以运行一下上述的代码,若大家发现缓存失败,请在启动类上加上@EnableCaching,用于开启缓存。现在一个简单的用户缓存系统就做好了,大家是不是觉得特别简单,我们都没有做过多的配置,就已经实现了缓存的效果。下面,我们就来逐步分析。

基于注解的缓存

在上述UserService中,我们使用了几个注解来支持不同情况下的缓存处理,它们是Spring提供的基于JSR-107 的缓存注解。总结如下:

  • @Cacheable:用于缓存结果。在每次执行的时候,都会判断当前逻辑是否已经执行,若执行过则从缓存中获取数据,否则执行具体逻辑并缓存结果。支持多个缓存名,例如:@Cacheable({"user", "person"})。该注解提供多个参数,主要参数如下:

参数

含义

示例

cacheNames / value

指定缓存名

@Cacheable(value = "user")

@Cacheable(cacheNames="user")

key

指定缓存key,采用SpEL表达式编写,若不指定则默认采用所有参数的组合进行缓存

@Cacheable(value = "user", key = "#id")

keyGenerator

用于指定缓存key的生成方式,若需要自定义的时候使用

@Cacheable(cacheNames="user", keyGenerator="myKeyGenerator")

condition

用于条件判断,只有当满足条件也就是返回为true时,才会进行缓存

@Cacheable(value = "user",condition = "#id > 10")

  • @CacheEvict:用于删除某个或多个缓存。该注解也支持上述@Cacheable中展示的参数,新增所属@CacheEvict的参数:

参数

含义

示例

allEntries

指定是否清空所有缓存内容,缺省为 false,若为true,则方法调用后将立即清空所有缓存。不允许与key同时使用

@CacheEvict(value = "user",allEntries = true)

beforeInvocation

是否在方法逻辑执行之前执行,缺省false,若为true,方法逻辑执行前就会删除

@CacheEvict(value = "user", beforeInvocation = true)

  • @CachePut:用于更新缓存而不影响方法的执行。每次执行,都会进行缓存更新。
  • @Caching:包含@Cacheable、@CachePut、@CacheEvict,用于组合多个注解的使用。例如:
    @Caching( 
       put = { 
            @CachePut(value = "user", key = "#user.id"), 
            @CachePut(value = "user", key = "#user.name")
       } 
    }
    public User updateUserById(User user) 

     

  • @CacheConfig:用于在类级别上做一些公用的配置。例如:@CacheConfig(cacheNames = "user")

源码分析

大家已经知道如何使用注解去实现缓存了,现在我们就来看看SpringBoot是如何实现缓存功能的。在这里,我们采用的是Redis的缓存,下面我们就来找找spring-boot-starter-cache包中是否存在相应配置,结果不负所望,在/cache包下找到了RedisCacheConfiguration类,部分源码如下:

/**
 * 该类初始化的前提:Redis自动配置
 * 该类只会上下文不存在CacheManager Bean的情况下初始化
 */
@Configuration
@ConditionalOnClass(RedisConnectionFactory.class)
@AutoConfigureAfter(RedisAutoConfiguration.class)
@ConditionalOnBean(RedisConnectionFactory.class)
@ConditionalOnMissingBean(CacheManager.class)
@Conditional(CacheCondition.class)
class RedisCacheConfiguration {
    /**
     * redis缓存的配置Bean
     */
   @Bean
   public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory,
         ResourceLoader resourceLoader) {
      RedisCacheManagerBuilder builder = RedisCacheManager
            //设置RedisConnectionFactory
            .builder(redisConnectionFactory)
            //设置缓存的默认配置
            .cacheDefaults(determineConfiguration(resourceLoader.getClassLoader()));
      //获取application.properties -> spring.cache.cache-names配置的默认缓存名
      List<String> cacheNames = this.cacheProperties.getCacheNames();
      if (!cacheNames.isEmpty()) {
          //初始化到 initialCaches  map中
         builder.initialCacheNames(new LinkedHashSet<>(cacheNames));
      }
      return this.customizerInvoker.customize(builder.build());
   }

    //redis缓存的默认配置
   private org.springframework.data.redis.cache.RedisCacheConfiguration determineConfiguration(
         ClassLoader classLoader) {
      if (this.redisCacheConfiguration != null) {
         return this.redisCacheConfiguration;
      }
      //获取application.properties -> spring.cache.redis.* 的配置信息
      Redis redisProperties = this.cacheProperties.getRedis();
      //用于获取Redis包下的默认配置
      org.springframework.data.redis.cache.RedisCacheConfiguration config = org.springframework.data.redis.cache.RedisCacheConfiguration
            .defaultCacheConfig();
      //默认采用JdkSerializationRedisSerializer序列化value
      config = config.serializeValuesWith(SerializationPair
            .fromSerializer(new JdkSerializationRedisSerializer(classLoader)));
      //设置key的过期时间 
      if (redisProperties.getTimeToLive() != null) {
         config = config.entryTtl(redisProperties.getTimeToLive());
      }
      //设置缓存key的前缀
      if (redisProperties.getKeyPrefix() != null) {
         config = config.prefixKeysWith(redisProperties.getKeyPrefix());
      }
      //是否允许value为null
      if (!redisProperties.isCacheNullValues()) {
         config = config.disableCachingNullValues();
      }
      //是否开启key前缀配置
      if (!redisProperties.isUseKeyPrefix()) {
         config = config.disableKeyPrefix();
      }
      return config;
   }
}

org.springframework.data.redis.cache.RedisCacheConfiguration (Redis包下的缓存配置):

public static RedisCacheConfiguration defaultCacheConfig(@Nullable ClassLoader classLoader) {

   DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
    //用于注册默认转换配置  String类型获取byte[]采用UTF-8编码  SimpleKey类型转换为String类型
   registerDefaultConverters(conversionService);
    //默认参数配置
   return new RedisCacheConfiguration(Duration.ZERO, true, true, CacheKeyPrefix.simple(),
           //key 采用string->byte[] 形式序列化
         SerializationPair.fromSerializer(RedisSerializer.string()),
          //value 采用JdkSerializationRedisSerializer 序列化
         SerializationPair.fromSerializer(RedisSerializer.java(classLoader)), conversionService);
}
    //构造函数 ttl 键的过期时间 、 cacheNullValues value是否允许null、 usePrefix 是否开启key前缀、  keyPrefix key前缀配置
    //keySerializationPair key的序列化方式、valueSerializationPair value的序列化方式、ConversionService 内容转换器
    RedisCacheConfiguration(Duration ttl, Boolean cacheNullValues, Boolean usePrefix, CacheKeyPrefix keyPrefix,
      SerializationPair<String> keySerializationPair, SerializationPair<?> valueSerializationPair,
      ConversionService conversionService) 

由于value默认采用JdkSerializationRedisSerializer序列化的方式,所以会自动把结果转化为字节数组进行保存,通过客户端查询,我们是看不出具体保存的内容,数据不直观。这时我们就可以通过修改默认配置来进行特定的序列化,例如json,如下所示:

@Bean
public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
    //设置value为json的序列化方式
    config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
    //获取spring.cache.redis.*的配置
    CacheProperties.Redis redisProperties = cacheProperties.getRedis();
    if (redisProperties.getTimeToLive() != null) {
        config = config.entryTtl(redisProperties.getTimeToLive());
    }
    if (redisProperties.getKeyPrefix() != null) {
        config = config.prefixKeysWith(redisProperties.getKeyPrefix());
    }
    if (!redisProperties.isCacheNullValues()) {
        config = config.disableCachingNullValues();
    }
    if (!redisProperties.isUseKeyPrefix()) {
        config = config.disableKeyPrefix();
    }
    return config;
}

GenericJackson2JsonRedisSerializer是已经封装好的json序列化器,使用它就可以达到我们的效果,当然大家也可以通过FastJson去自定义自己的序列化方式。这时,我们就可以看到比较直观的显示了,例如:

{
"@class": "com.fanqie.springboot2.cache.entity.User",
"id": 29,
"name": "张三",
"birth": [
"java.util.Date",
1554732381704
]
}

同理,Key的序列化器也可以进行修改,不过默认采用StringRedisSerializer已经适合大部分业务了,具体业务可以根据自己的需要定义,不做过多描述。

总结

基于Springboot2的自动配置,在使用缓存的过程中已经不需要太多的配置,会根据我们的依赖自动生成需要的Bean。当然,若大家在某些业务上,需要自定义相关配置,也是比较简单的。具体的内容,需要大家自行深入了解,上述内容是笔者自己的一些见解,若有不对的地方,望大家指正,共同努力,进步。

源码见于:https://gitee.com/hpaw/SpringBoot2Demo/tree/master/springboot-cache-redis

 

Win11系统下Abaqus 2025子程序开发环境一站式配置指南 本文详细介绍了在Win11系统下配置Abaqus 2025子程序开发环境的完整流程,包括VS2022和Intel oneAPI的安装与优化,以及Abaqus 2025的目录规划与环境联调。通过避坑指南和实战案例,帮助用户高效完成开发环境配置,避免常见错误,提升工作效率。 阅读详情

相关推荐

Meta开源Ego-Exo4D数据集:如何用1400小时多模态视频训练你的AI模型

Meta开源的Ego-Exo4D数据集包含1400小时多模态视频,涵盖第一人称和第三人称视角、眼动追踪、IMU传感器等多种模态,是AI模型训练的宝贵资源。本文详细介绍了从数据集下载、预处理到模型训练的全流程,帮助研究者高效利用这一多模态数据集进行AI模型开发。

weixin_29159441的博客 345

SpringBoot专题学习Part26:Spring Cache整合Redis实现缓存及SpringBoot 2.x新版本自定义CacheManager

Spring Cache默认使用的是ConcurrentMapCacheManager管理器 创建的是ConcurrentMapCache缓存 然后将数据保存在ConcurrentMap中 实际使用缓存中间件的场合会更多 例如Redis EhCache等 Redis是一个高性能的支持网络 可基于内存亦可持久化的日志型 Key-Value数据库 Spring Cache默认使用的是SimpleCac...

"✧treasure mountain✧" 8505

TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

HRPWM的学习记录。

whyorwhnt的专栏 9536

Springboot 2.X中Spring-cache与redis整合

本文转自:Springboot 2.X中Spring-cache与redis整合 Springboot中Spring-cache与redis整合。这也是一个不错的框架,与spring的事务使用类似,只要添加一些注解方法,就可以动态的去操作缓存了,减少代码的操作。如果这些注解不满足项目的需求,我们也可以参考spring-cache的实现思想,使用AOP代理+缓存操作来管理缓存的使用。 在这个例子中我...

我飞故我在的专栏 3146

ConnectionResetError 10054 根因分析与全链路防御指南

ConnectionResetError(错误码10054)是TCP协议中服务端主动发送RST包导致的强制断连,本质并非网络连接失败,而是服务端基于空闲超时、连接满载、TLS协商失败等策略做出的确定性终止决策。理解其底层原理有助于跳出‘重试’误区,转向连接生命周期管理。该错误高频出现在HTTP长连接、WebSocket、第三方API对接等场景,尤其在Nginx反向代理、负载均衡器(如AWS ALB)、WAF设备及内核conntrack机制下极易触发。本文结合Wireshark抓包分析、客户端心跳保鲜、协议指

weixin_30225755的博客 641

【问题解析】Matlab Function的易错点(Variable Size)

Matlab Function的易错点

CrazyRabbit的博客 9869

springBoot2 下配置springCache redis 缓存配置及使用

学习内容: springCache + redis 缓存 例如: 1、 springBoot2 配置springCache + redis 缓存生存周期 + 配置redis 序列化方式 Json 2、 配置SpringCache Key自定义Key 下篇学习: 1、 统一配置springCache 缓存redis expireTIme yml配置 及如何定制个性化时间 2 springCache 注解详细解答 3, 提供demo git 代码 学习时间: 提示:这里可以添加计划学习的时间 例如:

ywtech的博客 1344

FileZilla Server目录显示失败的处理方法

这两天河南大暴雨挺严重导致多处停电,我远在郑州机房的服务器也断网连不上了。一直到今天下午才恢复,影响较大,有些客户要数据,可是数据因为断网拿不到。于是我想,要是能把服务器的数据备份到其他地方,比如我的本机或者另外一台电脑该多好。 于是今天一整天我都在找远程备份数据的方法,把一台服务器上的数据实时同步到另外一台上。或者两台服务器互相同步。 找了半天发现了FreeFileSync这个宝藏软件,它的原理很简单是通过ftp传输数据。 我得先在服务器上安装个ftp服务,首选filezilla server,安..

两天打鱼三天晒网 4453

springboot2+spring cache+redis缓存

@JsonIgnore1 项目场景2 问题描述3 解决过程4 nginx的root、alias指令区别4.1 区别对照4.2 示例 参考文章: https://zhuanlan.zhihu.com/p/131009164 https://www.nginx.cn/4658.html 1 项目场景 配置nginx访问静态资源文件。 2 问题描述 在测试环境配置完成后访问正常,在另一个环境配置后访问失败 3 解决过程 对比了一下两个环境nginx的配置信息,发现指定文件路径的指令不太一样,测试环境是a

LOOPY_Y的博客 1416

30天入门 SAP BTP 开发系列之四:SAP BTP 控制台里 Global Account 的常规操作介绍

笔者前一篇文章,介绍了 SAP BTP 中 Global Account 的概念。本文咱们一起来看看 SAP BTP 控制台里,给 Global Account 开放了哪些操作功能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 872

RK3588 DDR5 方案

RK3588 DDR5方案支持多种LPDDR5/LPDDR5X内存型号,包括美光、三星、海力士、江波龙和佰维等品牌。文档详细列出了已验证的DDR5内存规格,涵盖2GB-16GB容量范围,提供组织形式、封装类型和测试状态等信息。其中美光型号最全面,支持12GB/16GB大容量方案。部分型号处于测试验证阶段(T/A),需量产进一步确认性能。该方案为RK3588平台开发提供可靠的内存选型参考。

501846585_QQAndroid_java 1085

springboot2整合redis,并自定义@Cache

Springboot2整合Redis,并自定义@Cache实现注解缓存

tommer911 689

5、自动化代码结构与运维系统的优化

本文探讨了自动化代码结构与运维系统的优化方法,涵盖审批流程的模块化设计、日志记录与工单系统的集成、通知方式的选择、错误处理的策略以及持续改进的实践。同时,深入分析了运维盲目性问题,通过故障案例揭示了关键指标缺失和日志未充分利用的弊端,提出了开发与运维角色转变的必要性。文章还介绍了如何生成有用的系统指标、建立良好的日志习惯以及实施日志聚合,以提升系统的可观测性和可靠性。最终通过总结和流程图展示了优化措施的核心要点,为构建高效、可靠的运维体系提供了指导。

pp12345的博客 71

Springboot使用J2Cache,整合ehcache和redis缓存框架,实现两级缓存

首先看下整合过程 1、pom.xml添加相关依赖 <!-- 添加ehcache支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId&gt...

月光秦城 6912

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【开源项目 h2cache-spring-boot-starter】自研 Starter:基于 Spring Cache 实现多级缓存(同时整合 Ehcache & Redis)

自研 Spring Boot Starter。 基于 Spring Cache 实现多级缓存。 同时使用本地缓存 Ehcache 和 分布式缓存 Redis。 实现自动化配置自定义缓存。

Howinfun的博客 1412

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringBoot整合(四)整合Ehcache、Redis、Memcached、jetcache、j2cache缓存

SpringBoot整合Ehcache、Redis、Memcached、jetcache、j2cache缓存

qq_44665283的博客 1638

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring Boot2 总结(一) Spring Boot 整合Redis实现Cache

因为Spring Boot 的自动化配置以及整合封装,开发者只需要在项目中引入Spring Data Redis 依赖,然后在配置文件中配置redis相关的基本信息,系统就会提供RedisTemplate和StringRedisTemplate供开发者使用。Cache是Spring3.1版本中引入的,在Spring Boot 中,Spring Cache相当于规范,而Redis是Spring Cache的实现,从而实现数据的缓存。 ...

318

SpringBoot--中间件技术-2:整合redis,redis实战小案例,springboot cache,cache简化redis的实现,含代码

SpringBoot整合redis的实现及cache简化redis的实现

HakerDONG的博客 797

Redis总结 -- springboot2.0整合spring cache + redis

文章目录一,spring cache简介二,springboot2.0整合spring cache + redis手动配置1.新建redis配置类RedisConfig继承 CachingConfigurerSupport类完成对redis的基本配置CacheErrorHandlerKeyGeneratorcacheManager2.使用基于注解的缓存3.注意问题@Cacheable注解不生效问题...

kevin的博客 2448

spring boot 整合j2cache 项目启动警告 Redis mode [null] not defined. Using ‘single‘

我们直接在 j2cache.properties 下面加上 redis.mode = single。我们 项目启动时 日志会有一个关键信息 Redis的模式 没有定义 默认使用 single。Redis 的这个模式有四种 大家可以自己去网上找一下 做个了解 不用很纠结。在spring boot环境中整合了 j2cache。我们直接主动的将模式设为 single 就OK了。然后 重新启动项目 那条警告就找不到啦。

weixin_45966674的博客 640

spring boot 整合j2cache 基础操作

简单说 就是 告诉它 你第一个用什么 我们用 ehcache 然后 第二级缓存 用 redis。第一个 是 j2cache 的核心包 第二个是 j2cache与spring bott整合的工具。get 接受 名称 key表示 然后返回的 我们可以通过 asString 转为字符串类型。然后 最后是 ehcache的包 因为我们还需要用 ehcache。然后 同目录 我们再创建一个 ehcache.xml。然后 我们打开项目 pom.xml 注入依赖。

weixin_45966674的博客 1164

SpringBoot 2.X 默认Cache的运行过程 + 整合Redis使用

SpringBoot 使用cacahe 非常简单,只要把依赖导入,使用简单的注解就可以使用缓存机制了。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> 常用的有三个 @Cacheble @CachePut @...

weixin_42633481的博客 574

springboot的原生cache_SpringBoot2.3.4整合Redis实现缓存

文章主要内容一、SpringCache 介绍二、SpringCache 注解三、注解方式实现Redis缓存(Windows版Redis)四、RedisUtils工具类原生方式实现Redis缓存(Windows版Redis)一、SpringCache介绍在Spring Boot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springframework.cache.Cache...

weixin_39944542的博客 337

springboot整合J2cache简单使用

第一步 pom.xml文件加入j2cache的依赖 <dependency> <groupId>net.oschina.j2cache</groupId> <artifactId>j2cache-spring-boot2-starter</artifactId> <version>2.7.2-release</version> </dependency> 第二步 从J2cache的gi

qq_38192851的博客 2506

SpringBoot整合第三方技术-缓存

缓存是一种介于数据永久存储介质与应用程序之间的数据临时存储介质,使用缓存可以有效的减少低速数据读取过程的次数(例如磁盘IO),提高系统性能。此外缓存不仅可以用于提高永久性存储介质的数据读取效率,还可以提供临时的数据存储空间。

我是程序员Amin,关注我,带你学习有趣的计算机知识 1921

6.springboot2.X整合redis-cache-shiro

1.案例中shrio 逻辑认证会频繁的查询数据库,消耗性能 2.改造一下,把之前学习的缓存中间件拿来用 <!--shiro整合redis缓存,和之前的缓存不同--> <dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artif...

qq_45394274的博客 474
上一篇: springboot2与redis整合
下一篇: springboot2与mongodb整合
西红柿丶番茄
博客等级 码龄10年 21粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值