【SpringBoot笔记22】SpringBoot框架集成Redis数据库

news2025/4/7 7:40:46

这篇文章,主要介绍SpringBoot框架如何集成Redis数据库。

目录

一、SpringBoot集成Redis

1.1、引入依赖

1.2、配置redis连接信息

1.3、添加RedisTemplate配置类

1.4、编写测试类

1.5、运行测试


一、SpringBoot集成Redis

Redis是一个非关系型数据库,它是一个基于内存的数据,所有的操作都是在内存里面完成,所以它的执行效率非常的高,一般实际开发中,都会采用Redis数据库作为缓存组件,SpringBoot框架提供了Redis的starter启动器,下面介绍SpringBoot框架如何集成Redis。

1.1、引入依赖

  • 集成Redis数据库,需要引入【spring-boot-starter-data-redis】依赖。
  • 默认情况下,SpringBoot采用的lettuce客户端,所以如果想要使用jedis客户端,那就需要引入另外的依赖。
  • 【jedis】客户端依赖和【commons-pool2】连接池依赖。
  • 可以不写版本号,因为SpringBoot父工程里面已经定义了版本号。
<!-- 引入 父工程 依赖 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.0.RELEASE</version>
</parent>

<!-- 引入 web 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 引入 redis 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <!-- 排除 lettuce 依赖 -->
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入 jedis 客户端 -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

查看【spring-boot-starter-data-redis】的依赖,可以看到默认采用的lettuce客户端依赖。 

1.2、配置redis连接信息

引入redis依赖之后,这个时候SpringBoot还不知道具体连接哪个redis数据库,我们需要在【application.yml】配置文件里面,指定redis的连接地址相关信息,以及连接池信息。

# redis 配置信息
spring:
  redis:
    host: 127.0.0.1 # redis数据库主机地址
    port: 6379 # redis数据库端口,默认6379
    database: 0 # 选择哪个数据库,默认是0号数据库,redis右0-15个数据库可以选择
    password: root # 密码,没用密码可以不写
    jedis:
      pool: # 连接池信息
        max-active: 8 # 最大活跃连接数量
        max-idle: 8 # 最大空闲连接数量
        min-idle: 0 # 最小空闲连接数量
        max-wait: 60000 # 连接池中连接最大等待超时时间
        time-between-eviction-runs: 60000 # 空闲连接被剔除的时间间隔

1.3、添加RedisTemplate配置类

SpringBoot提供的启动器里面,给我们提供了一个RedisTemplate对象,使用这个对象可以实现Redis数据库的各种操作。一般我们在使用的时候,都会自定义Redis的序列化方式,这样写入redis数据库里面的时候,就可以看的更加直观,而不会是一些看不到的乱码。

package com.spring.boot.demo.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @version 1.0.0
 * @Date: 2022/11/2 15:43
 * @Author ZhuYouBin
 * @Description RedisTemplate 配置类
 */
@Configuration
public class RedisConfig {

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

        // 序列化设置
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 设置 key 采用字符串序列化方式
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);

        // 采用JSON序列化方式
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        
        // 设置value的序列化方式
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        // 重新设置默认的序列化机制
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

1.4、编写测试类

  • 下面这个测试类,是实现redis数据库的添加、删除、查询操作。
package com.spring.boot.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @version 1.0.0
 * @Date: 2022/11/3 11:04
 * @Author ZhuYouBin
 * @Description
 */
@RestController
@RequestMapping("/api/redis")
public class RedisController {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @GetMapping("/set")
    public String set() {
        ValueOperations<String, Object> ops = redisTemplate.opsForValue();
        for (int i = 0; i < 6; i++) {
            ops.set("k" + i, "v" + i + "00");
        }
        ops.set("k22", "v2200", 10, TimeUnit.SECONDS);
        return "success.";
    }

    @GetMapping("/get")
    public String get() {
        Set<String> keys = redisTemplate.keys("*");
        if (keys == null || keys.size() == 0) {
            return null;
        }
        ValueOperations<String, Object> ops = redisTemplate.opsForValue();
        StringBuilder sb = new StringBuilder();
        for (String key : keys) {
            Object val = ops.get(key);
            sb.append(key)
                    .append("=")
                    .append(val)
                    .append(", ");
        }
        return sb.toString();
    }

    @GetMapping("/del")
    public String del() {
        Set<String> keys = redisTemplate.keys("*");
        if (keys == null || keys.size() == 0) {
            return null;
        }
        for (String key : keys) {
            Boolean ans = redisTemplate.delete(key);
            System.out.println(key + "删除是否成功: " + ans);
        }
        return "success.";
    }

}

1.5、运行测试

启动工程,浏览器依次访问上面三个接口地址,然后查看redis数据库。

到此,SpringBoot框架集成Redis就成功啦。

综上,这篇文章结束了,主要介绍SpringBoot框架如何集成Redis数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCIe ECAM机制访问PCIE的配置空间

1.PCIe ECAM机制 PCI Express Enhanced Configuration Access Mechanism (ECAM)是访问PCIe配置空间的一种机制。是将PCIe的配置空间映射到MEM空间&#xff0c;使用MEM访问其配置空间的一种实现。可参考NCB-PCI_Express_Base_5.0r1.0-2019-05-22.pdf的第7.2.2小节。 其地址映射…

上海亚商投顾:沪指录得6连阳 两市成交再度破万亿

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日横盘震荡&#xff0c;收盘集体小幅上扬&#xff0c;日K线均录得6连阳。虚拟现实概念股集体拉升&#…

【SA-Token】授权 鉴权中心微服务

授权 鉴权中心微服务 1 什么是JWT 1.2 JWT 的基本概念 1.3 JSON Web Token jwt 是一个开放标准 它定义了一种紧凑的、自包含的方式 用于作为JSON 对象在各方之间安全地传输信息 1.4.那些场景下可以考虑使用JWT &#xff1f; ​ 1.用户授权 信息交换 1.5 JWT的结构及其含义 …

镜频抑制滤波器对射频接收前端输出噪声的影响

射频接收前端包括LNA、Filter、Mixer等部件&#xff0c;从噪声因子级联的角度讲&#xff0c;希望接收链路第一级为高增益、低噪声系数放大器&#xff0c;以期望得到较低的系统噪声系数&#xff0c;提高接收灵敏度。除LNA外&#xff0c;接收链路还有一个关键的部件——镜频抑制滤…

精读大型网站架构:前端架构模块化的方法及困境,自研框架Trick

模块化的方法 网页和网页之间有很多相似或者相同的模块&#xff0c;模块化就是把这些模块抽离并独立管理。而模块化的方法&#xff0c;就是把模块的HTML、CSS和JavaScript文件独立出来&#xff0c;然后通过某种方法关联到使用这些模块的网页上。 在介绍模块化的具体方法之前&…

consul--基础--05--api

consul–基础–05–api 1、介绍 主要接口是RESTful HTTP API&#xff0c;该API可以用来增删查改nodes、services、checks、configguration。所有的endpoints主要分为以下类别 kv&#xff1a;Key/Value存储agent&#xff1a;Agent控制catalog&#xff1a;管理nodes和serviceshe…

数据结构-例题实训作业-二叉树相关

第1关:以先序的方式建立二叉树 任务描述 本关任务:以先序的方式建立二叉树并显示(顺时针90度后看) 相关知识 为了完成本关任务,你需要掌握: 1.二叉树的概念 2.二叉树的先序遍历方式 3.二叉树的遍历。 编程要求 在以下空白处补写代码,以先序方式完成二叉树的建立。 //…

计算机组成原理浮点数表示

浮点数表示 浮点数的表示分为阶码和尾数&#xff1b; 比如3.026*1011;阶码是11;尾数是3.026&#xff1b; 对于阶码&#xff1a; 阶符为正&#xff0c;小数点向后移n位&#xff08;n表示阶的大小&#xff09;; 阶符为负&#xff0c;小数点向前移n位&#xff08;n表示阶的大小&a…

基础IO(上)——Linux

文章目录1.储备知识2. 文件描述符2.1 c接口2.2 直接使用系统接口2.3 open函数返回值2.4 文件描述符fd2.5 周边文件3. 重定向3.1 输出重定向3.2 输出重定向3.3 追加重定向3.4 dup4. 如何理解一切皆文件&#xff1f;1.储备知识 对文件的操作范畴&#xff1a; 在系统角度理解文件 …

R语言生物群落数据统计分析

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。本教学以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来…

中医-通过舌象判断身体状况

本文分享通过舌象判断身体的整体状况&#xff08;中医角度&#xff09;&#xff0c;得出一个可供辨证的参考&#xff0c;并且可以根据舌象做出相关的饮食调整&#xff0c;本文主讲理论&#xff0c;相关舌象图片易引人不适&#xff0c;如需找相关图片&#xff0c;可根据本文中的…

【SpringBoot】一文了解SpringBoot配置高级

文章目录前言ConfigurationProperties使用场景小结宽松绑定/松散绑定&#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315;! &#x1f30e;文章说明&#xff1a;SpringBoot配置高级&#x1f30e; ✅系列专栏&#xff1a;SpringBoot &#x1f334;本篇内容&#xff1…

javaweb JavaScript快速入门 对象 BOM DOM 事件监听

JavaScript 引入方式 1.内部脚本&#xff1a;将 JS代码定义在HTML页面中 2.外部脚本&#xff1a;将 JS代码定义在外部 JS文件中&#xff0c;然后引入到 HTML页面中 JavaScript 基础语法 windows.alert可以省略windows var: 1.作用域为全局变量 2.变量可以重复定义 &#xf…

半桥LLC谐振变换器及同步整流MATLAB仿真(一)

在开关电源中&#xff0c;LLC谐振变换器是最常见的DC-DC变换器之一。 LLC谐振电路早在上世纪80年代就已经提出&#xff0c;到如今仍有广泛的应用&#xff0c;可见其优越性。其优点表现在&#xff1a; 1.LLC的开关器件能实现软开关&#xff0c;开关损耗小 2.效率高、功率密度大 …

[附源码]计算机毕业设计JAVA 宠物医院管理系统

[附源码]计算机毕业设计JAVA 宠物医院管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

计算结构体大小(内存对齐原则)struct、union、class

这篇博客详细的介绍结构体的大小sizeof&#xff1a;union、struct、class。 一、不同数据类型所占的内存大小&#xff1a; 二、union联合体的结构体大小 1、关注点&#xff1a; &#xff08;1&#xff09;联合体的大小为所有成员变量中所占字节数最大的&#xff1b; &#xf…

【Redis 常用五大数据类型】

常用五大数据类型 官方获取redis常见数据类型操作命令&#xff1a; http://www.redis.cn/commands.html 1.Redis键(key) keys * 查看当前库所有key (匹配&#xff1a;keys *1) exists key 判断某个key是否存在 type key 查看你的key是什么类型 del key 删除指定的key数据 unli…

springmvc1:初探springmvc

一.springmvc简介 1.springmvc是什么&#xff1f; ①mvc解释 m&#xff1a;模型层&#xff08;javabean处理数据&#xff09;例如pojo类 Service或Daov&#xff1a;视图层&#xff08;页面展示数据&#xff09;c&#xff1a;控制层&#xff08;接受请求和响应浏览器&#xf…

python基于PHP+MySQL 校园二手闲置商品交易系统

每年我国都有几百万的学生参加高考,当学生接到高校的录入通知书的那一刻就要学会独立生活了,大多数学生一般都要奔袭到离家几百设置几千公里之外的地方进行求学,这对初次离开父母远离家乡求学的学子来说是人生的一次挑战。为了能够更好的适应高校的环境,他们的入校之初或者在日…

【Qt】QMainWindow |QDialog对话框

文章目录1、QMainWindow1.1 菜单栏1.2 工具栏1.3 状态栏1.4 停靠部件1.5 核心部件&#xff08;中心部件&#xff09;1.6 使用UI文件创建窗口1.6.1 UI设计窗口介绍1.6.2 菜单1.1.6.1 添加/删除菜单栏1.1.6.2 添加菜单1.1.6.3 添加菜单项1.1.6.4 添加多级菜单1.6.3 工具1.1.6.1 添…