首页 > 数据库 >Redis和Spring Boot:如何协作提高您的应用程序性能

Redis和Spring Boot:如何协作提高您的应用程序性能

时间:2023-10-22 12:02:40浏览次数:42  
标签:Boot Spring Redis value RedisTemplate key redisTemplate

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

前言

Redis 是一种高效的非关系型数据库,能够支持复杂的数据结构和操作。在 Spring Boot 应用中,集成 Redis 可以提供更好的性能和扩展性。本文将介绍如何在 Spring Boot 应用中集成 Redis 并使用其基本功能。

摘要

本文将分为以下几个部分:

  1. Redis 集成介绍
  2. Redis 常用操作介绍
  3. Spring Boot 中 Redis 集成实现
  4. Redis 使用方法
  5. 测试用例
  6. 全文小结

Redis 集成介绍

Redis 简介

Redis(Remote Dictionary Server)是一种开源的、高性能的键值对存储数据库。Redis 的出色性能和完善的功能使得它成为最受欢迎的 NoSQL 数据库之一。

Redis 支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。Redis 提供了多种操作命令,能够用于对数据结构进行增删改查等操作。

Redis 优点

Redis 具有以下优点:

  • 性能优异:Redis 内置了多种优化机制,能够提供非常高的读写速度。
  • 数据结构丰富:Redis 支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。
  • 持久化支持:Redis 支持多种持久化方式,包括 RDB 持久化和 AOF 持久化。
  • 高并发支持:Redis 内置了多种高并发支持机制,能够有效地应对高并发访问。
  • 分布式支持:Redis 支持分布式架构,能够轻松应对大规模数据存储需求。

Redis 常用操作介绍

Redis 提供多种命令,能够对数据进行增删改查等操作。下面介绍 Redis 中常用的命令:

  • SET key value:设置 key 对应的值为 value。
  • GET key:获取 key 对应的值。
  • DEL key:删除 key 对应的值。
  • INCR key:将 key 对应的值加一。
  • DECR key:将 key 对应的值减一。
  • EXISTS key:判断 key 是否存在。
  • KEYS pattern:根据 pattern 获取匹配的 keys。
  • HSET key field value:将 key 对应的哈希表中 field 对应的值设置为 value。
  • HGET key field:获取 key 对应的哈希表中 field 对应的值。
  • HDEL key field:删除 key 对应的哈希表中 field 对应的值。
  • LPUSH key value:将 value 插入到 key 对应的列表的左侧。
  • RPUSH key value:将 value 插入到 key 对应的列表的右侧。
  • LPOP key:弹出并返回 key 对应的列表的左侧元素。
  • RPOP key:弹出并返回 key 对应的列表的右侧元素。
  • SADD key member:将 member 加入到 key 对应的集合中。
  • SMEMBERS key:返回 key 对应的集合中的所有成员。

Spring Boot 中 Redis 集成实现

Spring Boot 已经提供了 Redis 的集成支持,只需要引入相应的依赖后进行配置即可使用 Redis。下面介绍 Redis 在 Spring Boot 中的集成实现。

引入依赖

在 pom.xml 文件中加入以下依赖:

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

配置 Redis

在 application.properties 文件中进行 Redis 配置,例如:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword

使用 RedisTemplate

Spring Boot 提供了 RedisTemplate 用于对 Redis 进行操作。可以通过构造方法或者注入方式进行 RedisTemplate 的创建,并进行相应操作。

我们先来创建一个 RedisTemplate 对象:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setDefaultSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

上述代码中通过 @Bean 注解创建了一个 RedisTemplate 对象,并对其进行了一些基本配置。

Redis 基本操作

下面介绍 Redis 中基本的操作方法:

set 方法

redisTemplate.opsForValue().set("key", "value");

get 方法

String value = (String) redisTemplate.opsForValue().get("key");

判断 key 是否存在

boolean exists = redisTemplate.hasKey("key");

删除 key

redisTemplate.delete("key");

setnx 方法:如果 key 不存在,则设置 key 对应的值为 value

redisTemplate.opsForValue().setIfAbsent("key", "value");

Redis 高级操作

下面介绍 Redis 中的高级操作方法。

list 方法

public void testList() {
    String key = "list";
    // 在列表的左侧插入元素
    redisTemplate.opsForList().leftPush(key, "value1");
    redisTemplate.opsForList().leftPush(key, "value2");
    redisTemplate.opsForList().leftPush(key, "value3");
    
    // 获取指定范围内的列表元素
    List list = redisTemplate.opsForList().range(key, 0, -1);
    System.out.println(list);
    
    // 弹出列表的左侧元素
    String value = (String) redisTemplate.opsForList().leftPop(key);
    System.out.println(value);
    
    // 获取列表长度
    Long size = redisTemplate.opsForList().size(key);
    System.out.println(size);
}

hash 方法

public void testHash() {
    String key = "hash";
    // 设置哈希表中的域值
    redisTemplate.opsForHash().put(key, "field1", "value1");
    redisTemplate.opsForHash().put(key, "field2", "value2");
    redisTemplate.opsForHash().put(key, "field3", "value3");
    
    // 获取所有哈希表中的域值
    Map map = redisTemplate.opsForHash().entries(key);
    System.out.println(map);
    
    // 获取指定哈希表的指定域值
    Object value = redisTemplate.opsForHash().get(key, "field1");
    System.out.println(value);
    
    // 删除哈希表中的一个或多个域值
    redisTemplate.opsForHash().delete(key, "field1", "field2");
}

set 方法

public void testSet() {
    String key = "set";
    // 向集合中添加元素
    redisTemplate.opsForSet().add(key, "value1");
    redisTemplate.opsForSet().add(key, "value2");
    redisTemplate.opsForSet().add(key, "value3");
    
    // 获取集合中的所有元素
    Set set = redisTemplate.opsForSet().members(key);
    System.out.println(set);
    
    // 删除集合中的一个或多个元素
    redisTemplate.opsForSet().remove(key, "value1", "value2");
}

Redis 使用方法

下面介绍如何在 Spring Boot 应用中进行 Redis 使用。

创建 RedisTemplate

可以通过构造方法或者注入方式进行 RedisTemplate 的创建。

@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    redisTemplate.setDefaultSerializer(new StringRedisSerializer());
    return redisTemplate;
}

上述代码中通过 @Bean 注解创建了一个 RedisTemplate 对象,并对其进行了一些基本配置。

Redis 基本操作

下面介绍 Redis 中基本的操作方法。

set 方法

redisTemplate.opsForValue().set("key", "value");

get 方法

String value = (String) redisTemplate.opsForValue().get("key");

判断 key 是否存在

redisTemplate.hasKey(key);

删除key

redisTemplate.delete(key);

刷新缓存时间

redisTemplate.expire(key, time, TimeUnit.SECONDS);

实际运用如下:

在这里插入图片描述

获取key的过期时间

redisTemplate.getExpire(key);

实际运用如下:

在这里插入图片描述

测试用例

为了验证 Redis 的使用效果,我们可以编写相关的测试用例。下面是一个简单的测试用例,用于测试 Redis 中基本方法的使用。

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSetAndGet() {
        redisTemplate.opsForValue().set("testKey", "testValue");
        String value = (String) redisTemplate.opsForValue().get("testKey");
        Assert.assertEquals("testValue", value);
    }

    @Test
    public void testExists() {
        redisTemplate.opsForValue().set("testKey", "testValue");
        boolean exists = redisTemplate.hasKey("testKey");
        Assert.assertTrue(exists);
    }

    @Test
    public void testDelete() {
        redisTemplate.opsForValue().set("testKey", "testValue");
        redisTemplate.delete("testKey");
        boolean exists = redisTemplate.hasKey("testKey");
        Assert.assertFalse(exists);
    }
}

上述测试用例中,我们先通过 set 方法设置了一个键值对,然后使用 get 方法获取值并进行断言。接着使用 hasKey 方法判断该键是否存在,并进行断言。最后使用 delete 方法删除该键值对,并使用 hasKey 方法判断该键是否存在,进行断言。

全文小结

本文介绍了 Redis 的基本概念和常用操作方法,同时介绍了在 Spring Boot 应用中集成 Redis 的实现方法。同时,我们还编写了相关的测试用例,用于验证 Redis 的使用效果。希望本文能够帮助读者了解 Redis 和 Spring Boot 中 Redis 的使用方法。

附录源码

  如上涉及所有源码均已上传同步在「GitHub」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

本文介绍了 Redis 的基本概念和常用操作方法,同时介绍了在 Spring Boot 应用中集成 Redis 的实现方法。Redis 是一种高效的非关系型数据库,支持多种数据结构和操作命令,能够提供非常高的读写速度和多种持久化方式。通过引入相应的依赖和配置,在 Spring Boot 应用中可以轻松集成 Redis 并使用其基本功能。本文还编写了相关的测试用例,用于验证 Redis 的使用效果。读者可以通过本文了解 Redis 和 Spring Boot 中 Redis 的使用方法

标签:Boot,Spring,Redis,value,RedisTemplate,key,redisTemplate
From: https://blog.51cto.com/u_15700751/7974936

相关文章

  • Spring Boot中的过滤器、拦截器、监听器技巧汇总:让你快速成为大神
    环境说明:Windows10+Idea2021.3.2+Jdk1.8+SpringBoot2.3.1.RELEASE前言在Web应用程序中,我们经常需要处理请求和响应。有时,我们需要应用于所有请求和响应的通用逻辑。这就是过滤器、拦截器和监听器的用武之地。它们可以帮助我们在请求和响应被处理之前或之后执行一些通用逻......
  • SpringBoot中给Tomcat添加过滤器
    SpringBoot中给Tomcat添加过滤器目录SpringBoot中给Tomcat添加过滤器一、引入二、Filter功能概述三、添加过滤器进行实操3.1、注解版3.2、配置版本四、原理探究4.1、解析过程4.2、如何添加到ServletContext中?五、总结一、引入JavaWeb组件Servlet提供了filter过滤功能,其功能是对......
  • SpringBoot——yaml配置文件
    yaml简介YAML是"YAMLAin'taMarkupLanguage"(YAML不是一种标记语言)。在开发的这种语言时,YAML的意思其实是:"YetAnotherMarkupLanguage"(是另一种标记语言)。设计目标,就是方便人类读写层次分明,更适合做配置文件使用.yaml或.yml作为文件后缀基本语法大小写敏感使......
  • 记spring 尽量没有冲突的版本
    之前写demo总是随便找一个spring版本,虽然没有很大的冲突,但还是想找一个尽量没有冲突的官方版本,记录下寻找的过程springboot3.0版本java要求是17,目前我的java版本还是8或者11,所以只考虑springboot2版本期望的springboot版本是2.7.17,目前官网的最新的GA版本从上往下,首先是spri......
  • Github Actions实现Spring Boot自动化部署(第二弹)
    GithubActions实现SpringBoot自动化部署(第二弹)前言​ 今天就来讲述一下如何使用GitHub结合Actions实现SpringBoot程序从提交代码到打包、容器化、部署全过程自动化。首先咱们得现有一个能够在本地运行的SpringBoot程序,并且在Github上拥有一个仓库。一、自动化部署1.1提交......
  • 基于SpringBoot与Vue技术的高校毕设管理平台-计算机毕业设计源码+LW文档
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器数据库部分表:DROPTABLEIFEXISTSbisheketi;/*!40101SET@saved_cs_client=@@characte......
  • Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库
    https://www.cnblogs.com/anech/p/17776855.html KeyDB 一个由 Snap 提供支持、专为扩展而构建的开源数据库。它是 Redis 的高性能分支,专注于多线程、内存效率和高吞吐量。KeyDB 采用 MVCC 体系结构,允许您执行 KEYS 和 SCAN 等查询,而不会阻塞数据库并降低性能。Key......
  • SpringBoot与jdk版本冲突
    问题:SpringBoot项目无法正常启动原因:SpringBoot2.0以上版本最低需要java8支持;SpringBoot3.0以上的版本最低需要java17支持。只需要降低pom文件中springboot版本即可。SpringBoot版本参见于https://spring.io/projects/spring-boot#learn文章参考了https://www.cnblogs.co......
  • 基于Springboot框架的优质衣产品系统-计算机毕业设计源码+LW文档
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器前台用户模块涵盖了:用户登录、注册功能,包括消费者进行优质衣产品系统的登录可进行衣产品的选购等......
  • 基于SpringBoot框架的教学评价系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着时代的发展,我国的教育水平在不断的提高,但是很多时候为了更好的提高教学的质量,会让学生对当前的教学进行评价,教育工作者根据学生的评价发现当下教学中的一些不足,从而更好的提高教学质量,为了让教学评价变的更加的方便我们开发了本次的教学评价系统。本系统从用户的角度出......