springboot集成redis

【SpringBoot3】Spring Boot 3.0 集成 Redis 缓存 Redis缓存是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它主要用于作为数据库、缓存和消息中间件,以快速读写和丰富的数据结构支持而著称。在应用程序和数据库之间,Redis缓存作为一个中间层起着关键作用。通过将常用的数据存储在Redis内存中,可以快速读取,从而避免了从数据库进行复杂的查询操作,减轻了数据库服务器的压力,并提高了应用程序的性能和响应速度。 阅读详情

springboot整合redis

1、配置redis连接池
2、配置redis连接工厂
3、获得java操作redis对象,jedis

注解

@Configuration

@Configuration底层是含有@Component ,所以@Configuration 具有和 @Component 的作用。
@Configuration可理解为用spring的时候xml里面的标签。
注:

  1. 配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib 动态代理)。

  2. 配置类不能是 final 类(没法动态代理)。

  3. 配置注解通常为了通过 @Bean 注解生成 Spring 容器管理的类。

  4. 配置类必须是非本地的(即不能在方法中声明,不能是 private)。

  5. 任何嵌套配置类都必须声明为static。

  6. @Bean方法不能创建进一步的配置类(也就是返回的bean如果带有@Configuration,也不会被特殊处理,只会作为普通的 bean)。
    @EnableCaching

  7. @EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。

  8. 如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。

  9. 当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。
    @Bean
    @Bean可理解为用spring的时候xml里面的标签。
    注:

  10. @Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同;

  11. @Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;

  12. 既然@Bean的作用是注册bean对象,那么完全可以使用@Component、@Controller、@Service、@Repository等注解注册bean(在需要注册的类上加注解),当然需要配置@ComponentScan注解进行自动扫描。

@Configuration所标注的类就是配置类

redis的配置类


package com.hsl.springboot02.redis;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.lang.reflect.Method;
import java.time.Duration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
 * @author water
 * @site www.water.com
 * @company xxx公司
 * @create 2019-12-30 15:19
 * redis配置类
 *
 */

@Configuration
@EnableCaching//开启注解式缓存
//继承CachingConfigurerSupport,为了自定义生成KEY的策略。可以不继承。
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * 生成key的策略 根据类名+方法名+所有参数的值生成唯一的一个key
     *
     * @return
     */
    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }

    /**
     * 管理缓存
     *
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        //通过Spring提供的RedisCacheConfiguration类,构造一个自己的redis配置类,从该配置类中可以设置一些初始化的缓存命名空间
        // 及对应的默认过期时间等属性,再利用RedisCacheManager中的builder.build()的方式生成cacheManager:
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();  // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
        config = config.entryTtl(Duration.ofMinutes(1))     // 设置缓存的默认过期时间,也是使用Duration设置
                .disableCachingNullValues();     // 不缓存空值

        // 设置一个初始化的缓存空间set集合
        Set<String> cacheNames = new HashSet<>();
        cacheNames.add("my-redis-cache1");
        cacheNames.add("my-redis-cache2");

        // 对每个缓存空间应用不同的配置
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        configMap.put("my-redis-cache1", config);
        configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));

        RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)     // 使用自定义的缓存配置初始化一个cacheManager
                .initialCacheNames(cacheNames)  // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
                .withInitialCacheConfigurations(configMap)
                .build();
        return cacheManager;
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(factory);
        return stringRedisTemplate;
    }

}

pom依赖

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

 <jackson.version>2.9.3</jackson.version>
<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>

yml文件配置

spring:
  redis:
      database: 0
      host: 192.168.43.7
      port: 6379
      password: 123456
      jedis:
          pool:
              max-active: 100
              max-idle: 3
              max-wait: -1
              min-idle: 0
      timeout: 1000

实现序列化
在这里插入图片描述

springboot注解式开发

对照我博文https://blog.youkuaiyun.com/water_java/article/details/103760525
常用缓存注解
**@Cacheable:**作用是主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
主要参数说明:

  1. value :
    缓存的名称,在 spring 配置文件中定义,必须指定至少一个,
    例如:@Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”}。
  2. key :缓存的 key,可以为空,
    如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合,
    例如:@Cacheable(value=”testcache”,key=”#userName”)。
  3. condition :缓存的条件,可以为空,

测试类:

  @Test
    public void selOne() {
        System.err.println("查询成功" + booksService.selectByPrimaryKey(23).toString());
        System.err.println("查询成功" + booksService.selectByPrimaryKey(23).toString());
    }

没有开缓存:
在这里插入图片描述
开缓存后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再执行一次,无sql语句
在这里插入图片描述
一分钟后redis数据过期,清空
在这里插入图片描述
强制指定key
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
bid改成9后,使用了缓存
在这里插入图片描述
**@CachePut:**作用是主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实查询
方法的调用
主要参数说明:
参数配置和@Cacheable一样。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
用于高并发时的数据读写分离

**@CacheEvict:**作用是主要针对方法配置,能够根据一定的条件对缓存进行清空

主要参数说明:
1)value , key 和 condition 参数配置和@Cacheable一样。
2) allEntries :
是否清空所有缓存内容,缺省为 false,
如果指定为 true,则方法调用后将立即清空所有缓存,
例如:@CachEvict(value=”testcache”,allEntries=true)。
3) beforeInvocation :
是否在方法执行前就清空,缺省为 false,
如果指定为 true,则在方法还没有执行的时候就清空缓存,
缺省情况下,如果方法执行抛出异常,则不会清空缓存,
例如@CachEvict(value=”testcache”,beforeInvocation=true)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个可以用于电商秒杀活动

SpringBoot(二十四)SpringBoot集成redis哨兵集群 这里算是一篇总结笔记叭,先从linux服务器redis主从复制,哨兵集群搭建开始。首先我们来准备三个redis.conf配置文件:redis79.conf/redis80.conf/redis81.conf。至此,redis搭建哨兵模式集群,以及springboot集成redis哨兵模式到此完成。我没有多台服务器,因此我在一台服务器上边搭建redis集群,一主二从。哨兵要保证高可用,也要配置集群,需要多个配置文件,监听不同端口,启动多个哨兵。如果redis中和代码中的名称都是mymaster。 阅读详情

相关推荐

SpringBoot集成redis之Jedis

记录学习redis的一些理解,以及实操过程的雷雷清点。

2202_75317512的博客 1471

在SpringBoot项目中配置Redis

SpringBoot的Redis配置

m0_63445035的博客 1万+

从飞机翼型仿真到燃烧模拟:Fluent多物理场耦合的3种实战策略

本文深入探讨了Fluent在多物理场耦合仿真中的三种实战策略,涵盖可压缩流动与燃烧耦合、湍流模型选择及网格策略,以及顺序耦合、强耦合和混合耦合方法。通过具体案例和工程实践,帮助中高级用户提升仿真精度和效率,适用于航空航天和能源化工等领域。

aa123的博客 993

解析RedisTemplate默认是否使用连接池

介绍 在我们使用SpringBoot项目时使用Redis变的非常简单,我们只有引入springboot提供给我们的依赖就可以直接使用一个RedisTemplate的bean来操作redis了 使用 1、引入redis的依赖,这是一个starter自动装配组件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-

qq_31086797的博客 9814

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

Kettle安装与使用

Pentaho Data Integration作为一个端对端的数据集成平台,可以对多种数据源进行抽取(Extraction)、加载(Loading)、数据落湖(Data Lake Injection)、对数据进行各种清洗(Cleasing)、转换(Transformation)、混合(Blending),并支持多维联机分析处理(OLAP)和数据挖掘(Data mining)。勺子(spoon.bat/spoon.sh):是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。

jnrjian的博客 1万+

springboot整合redis配置

springboot整合redis配置

qq_19891197的博客 1万+

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 520

【突破舒适圈】在SpringBoot中配置Redis

首次尝试Springboot中配置Redis,初探一下。

qq_41997592的博客 2万+

手把手调试Android 10 DHCP服务:从dumpsys network_stack到DhcpServer.java的实战技巧

本文详细介绍了在Android 10中调试DHCP服务的实战技巧,从使用dumpsys network_stack分析服务状态到深入DhcpServer.java源码追踪问题。文章提供了完整的工具链配置、关键调试命令和常见问题解决方案,帮助开发者高效解决DHCP服务未启动、IP分配失败等典型问题,特别适合需要深入理解Android网络架构的开发者参考。

uu89012的博客 743

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 713

SpringBoot中Redis配置

#连接池最大阻塞等待时间(使用负值表示没有限制)# 连接池的最大数据库连接数。# 连接池中的最小空闲连接。# 连接池中的最大空闲连接。2、配置application.yml。# 端口,默认为6379。5、Service文件中使用。4、Redis工具类。3、Redis配置类。

ahwangzc的博客 8157

LangGraph 实战教程:搭建一个智能办公多Agent协作平台

只存储必要的信息:不要把所有的原始数据都存储在状态中,比如销售数据可以存储在数据库或向量数据库中,状态中只存储数据的 ID 或摘要。使用类型提示:避免类型错误,提高代码的可维护性。支持增量更新:LangGraph 默认支持状态的增量更新(通过reduce函数),比如messages列表可以通过追加新消息的方式更新,而不是每次都重新创建整个列表。Normal Edge 的定义非常简单,只需要在StateGraph对象(稍后会详细讲解)上调用add_edge# 创建一个 StateGraph 对象。

SuperAGI2025 221

SpringBoot集成redis

今天,日月在这里教大家如何使用springBoot集成redis,说实话比较简单,网上也有大把的教程。先套用一下网上的简介。 定义 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value...

真的愿意去努力,人生最坏的结果,也不过是大器晚成。 25万+

【STM32系统及仿真】基于STM32+蓝牙设计的智能窗帘系统__资料编号8

本项目设计并实现了一种基于STM32单片机的智能窗帘系统,集成了光敏传感器、温湿度传感器、蓝牙模块和OLED显示屏,实现了窗帘的自动调节、环境监测和远程控制功能。系统采用STM32F103C8T6作为主控制器,通过光敏传感器检测环境光强,温湿度传感器监测室内环境,蓝牙模块实现与手机APP的通信,用户可以通过APP远程控制窗帘的开合状态。系统在检测到环境光照强度或温度超出设定范围时,可自动调节窗帘的开合,以达到节能和提高舒适度的目的。

嵌入式阿齐Archie 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SpringBoot集成Redis(全流程详解)

通过在SpringBoot中集成Redis,详细梳理集成过程。包括SpringBoot启动过程中,容器的刷新、自动配置的流程、各类注解的处理。 类比在纯Spring中集成Redis,体验SpringBoot自动配置给开发带来了哪些便利。

懒惰蜗牛的博客 3040

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SpringBoot系列:Spring Boot集成redis

一、Redis Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value的非关系型数据库,并提供多种语言的API。 由于Redis实现使用C语言编写,且采用了I/O多路复用,在响应速度与并发支持上都要优于关系型数据库,所以常被用来配合关系型数据库做高速缓存、共享Session、分布式锁、消息系统等。 Redis的重要性不言而喻,无论是其对于系统,还...

Simple_Yangger的博客 589

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SAP B1中文培訓教材_SDK

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

SpringBoot集成Redis(全网最详细)

Redis是我们Java开发中,使用频次非常高的一个nosql数据库,数据以key-value键值对的形式存储在内存中。redis的常用使用场景,可以做缓存,分布式锁,自增序列等,使用redis的方式和我们使用数据库的方式差不多,首先我们要在自己的本机电脑或者服务器上安装一个redis的服务器,通过我们的java客户端在程序中进行集成,然后通过客户端完成对redis的增删改查操作。

tangjieqing的博客 1万+

【SpringBoot】| SpringBoot 集成 Redis

【SpringBoot】| SpringBoot 集成 Redis

m0_61933976的博客 8821

SpringBoot 集成 Redis

一:SpringBoot 集成 Redis①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list③通过Redis客户端可以使用多种语言在程序中,访问 Redis 数据;java 语言中使用的客户端库有 Jedis,lettuce, Redisson 等。

2301_79438104的博客 2353

springboot 集成redis_Spring Boot 2.X(六):Spring Boot 集成 Redis

Redis 简介什么是 RedisRedis 是目前使用的非常广泛的免费开源内存数据库,是一个高性能的 key-value 数据库。Redis 与其他 key-value 缓存(如 Memcached )相比有以下三个特点: 1.Redis 支持数据的持久化,它可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2.Redis 不仅仅支持简单的 key-value 类型的数据,同时还...

weixin_39637661的博客 242

Redis Java 集成到 Spring Boot

Redis Java 集成到 Spring Boot(基本练习)

明志の博客 1万+

Spring Boot 中集成Redis

SpringBoot 中集成Redis 文章目录SpringBoot 中集成Redis一、Redis 介绍二、Redis 安装三、Spring Boot 集成 Redis3.1 依赖导入3.2 Redis 配置3.3 常用 api 介绍3.3.1 redis:string 类型3.3.2 redis:hash 类型3.3.3 redis:list 类型总结 一、Redis 介绍 Redis 是一种非关系型数据库(NoSQL),NoSQL 是以 key-value 的形式存储的,和传统的关系型数据库不一样

GSCY 9158

SpringBoot中集成Redis

有了,并于Spring Boot配置文件中定义Redis相关属性后,就会在项目启动时会注入到Redis中去。前面说到spring中为redis定义了专门的自动配置类,其中定义创建泛型为的RedisTemplate对象,为了允许自定义配置Bean,自动配置类使用@ConditionalOnMissingBean注解,表示当其他地方定义一个RedisTemplate的Bean时,会替代自动配置中的结果。​@Bean​@Bean复制代码为了使用操作更方便,我们定义一个。

2401_83916355的博客 740

SpringBoot集成Redis

如果我们存储的是对象,默认使用的是 JdkSerializationRedisSerializer,也就是Jdk的序列化方式(通过ObjectOutputStream和ObjectInputStream实现,缺点是我们无法直观看到存储的对象内容)。redis的序列化也是我们在使用RedisTemplate的过程中需要注意的事情。我们的配置工作准备就绪以后,我们就可以在项目中操作redis了,操作的话,使用spring-data-redis中为我们提供的 RedisTemplate 这个类,就可以操作了。

qq_48508157的博客 1416
上一篇: Springboot整合mybatis
下一篇: springboot对jpa的支持
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值