Redis数据库在Spring Boot中的应用操作

 更新时间:2026年06月17日 09:28:09   作者:漫霂  
Redis是一种高性能的键值存储数据库,而Spring Boot是一个简化了开发过程的Java框架,这篇文章主要介绍了Redis数据库在Spring Boot中应用操作的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

Redis作为一种常见的noSQL数据库,凭借其卓越的性能成为了常用的缓存中间件,本文将介绍如何通过Java代码操作Redis数据库以及如何使用Spring Cache这个轻量便捷的缓存框架

Spring Data Redis

在Spring Boot项目中,我们常借助Spring Data Redis便捷地实现对Redis数据库的操作

1.首先,导入 Spring Data Redis 的依赖:

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

2.接着,在配置文件中完成对数据源的配置(与MySQL类似)

spring:  
  redis:  
    host: localhost(已经配置好Redis的主机的IP)
    password: (如果没有密码可以删除这一行)
    port: 6379  
    database: 0 (要操作哪一个数据库,默认为0)

3.编写配置类,创建RedisTemplate对象

由于Spring Data Redis 会采用 JdkSerializationRedisSerializer(基于 JDK 序列化)来序列化存入 Redis 的值,这就会导致原本清晰明了的字符串变成让人看不懂的二进制乱码。因此我们需要手动配置RedisTemplate,将 key 的序列化器改为 StringRedisSerializer,提高数据的可读性。

@Slf4j  
@Configuration  
public class RedisConfigration {  
    @Bean  
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){  
        log.info("创建Redis模板对象...");  
        RedisTemplate redisTemplate = new RedisTemplate();  
        //设置Redis连接工厂对象  
        redisTemplate.setConnectionFactory(redisConnectionFactory);  
        //设置Redis的key的序列化器  
        redisTemplate.setKeySerializer(new StringRedisSerializer());  
        return redisTemplate;  
    }  
}

先通过 @Bean 注解在 Spring 容器中注册一个名为 redisTemplate 的 RedisTemplate 实例,然后将自动注入的 RedisConnectionFactory 赋值给该模板,确保它能正确连接到 Redis 服务器,接着,就是显示设置key的序列化器,确保key以纯字符串的形式储存起来。

效果对比: 将手动设置StringRedisSerializer序列化器注释掉时,可以看到在纯字符串的key前面多了许多二进制乱码

设置之后key就一目了然

由于没有设置value的序列化器(也没有必要设置),所以注释前后value的值都是一大串乱码。

4.通过RedisTemplate对象操作Redis

//获取操作每种类型的对象
public void getRedisOperations(){  
  
    ValueOperations valueOperations = redisTemplate.opsForValue();  
    HashOperations hashOperations = redisTemplate.opsForHash();  
    ListOperations listOperations = redisTemplate.opsForList();  
    SetOperations setOperations = redisTemplate.opsForSet();  
    ZSetOperations zSetOperations = redisTemplate.opsForZSet();  
  
}

如果要多次操作同一种数据类型的数据,可以通过以上方法获取对应的操作对象,减少性能的开销。但如果不是这样的情景,就可以直接链式编程来操作Redis,相关语法如下:

// 键操作命令
redisTemplate.keys(pattern);                 // KEYS pattern - 查找所有符合模式的 key
redisTemplate.hasKey(key);                   // EXISTS key - 检查 key 是否存在
redisTemplate.type(key);                     // TYPE key - 返回 key 储存值的类型
redisTemplate.delete(key);                   // DEL key - 删除指定的 key
redisTemplate.expire(key, timeout, timeUnit); // EXPIRE key seconds - 设置过期时间
redisTemplate.getExpire(key);                // TTL key - 获取剩余生存时间

// 字符串类型命令
redisTemplate.opsForValue().set(key, value);  // SET key value
redisTemplate.opsForValue().get(key);         // GET key
redisTemplate.opsForValue().set(key, value, timeout, timeUnit); // SETEX key seconds value
redisTemplate.opsForValue().setIfAbsent(key, value); // SETNX key value

// 哈希类型命令
redisTemplate.opsForHash().put(key, field, value);  // HSET key field value
redisTemplate.opsForHash().get(key, field);         // HGET key field
redisTemplate.opsForHash().delete(key, field);      // HDEL key field
redisTemplate.opsForHash().keys(key);               // HKEYS key
redisTemplate.opsForHash().values(key);             // HVALS key

// 列表类型命令
redisTemplate.opsForList().leftPush(key, value);     // LPUSH key value
redisTemplate.opsForList().range(key, start, end);   // LRANGE key start stop
redisTemplate.opsForList().rightPop(key);            // RPOP key
redisTemplate.opsForList().size(key);                // LLEN key

// 集合类型命令
redisTemplate.opsForSet().add(key, members);          // SADD key member
redisTemplate.opsForSet().members(key);               // SMEMBERS key
redisTemplate.opsForSet().size(key);                  // SCARD key
redisTemplate.opsForSet().intersect(key, otherKeys);  // SINTER key1 key2
redisTemplate.opsForSet().union(key, otherKeys);      // SUNION key1 key2
redisTemplate.opsForSet().remove(key, members);       // SREM key member

// 有序集合类型命令
redisTemplate.opsForZSet().add(key, member, score);   // ZADD key score member
redisTemplate.opsForZSet().range(key, start, end);    // ZRANGE key start stop
redisTemplate.opsForZSet().incrementScore(key, member, delta); // ZINCRBY key increment member
redisTemplate.opsForZSet().remove(key, members);      // ZREM key member

Spring Cache

不难发现,虽然通过Spring Data Redis可以便捷的操作Redis,但是在实际项目中应用到Redis缓存,肯定少不了 查询缓存中是否有需要的数据 : 有,直接返回缓存数据 无,查询MySQL -> 将结果保存到redis 这一繁琐的过程。

那有没有更简单更无脑的办法呢?Spring Cache就将这些过程进行了封装,通过相关注解轻松实现数据缓存:

这里以@Cacheable为例说明如何使用

应用场景:

@GetMapping("/list")  
@ApiOperation("根据分类id查询套餐")  
@Cacheable(value = "setmealCache", key = "#categoryId")  
public Result<List<Setmeal>> list(Long categoryId) {  
    Setmeal setmeal = new Setmeal();  
    setmeal.setCategoryId(categoryId);  
    setmeal.setStatus(StatusConstant.ENABLE);  
  
    List<Setmeal> list = setmealService.list(setmeal);  
    return Result.success(list);  
}

该注解的value和key属性共同决定了最终的缓存键 value指定了缓存的名称,便于管理和区分不同类型的缓存数据。key指定了缓存的键生成规则,这里使用# + 变量就可以动态赋值 最终缓存键为value::key

其余两个注解的value和key属性与此同理。

需要注意的是,当我们对数据进行修改,删除,新增时一定要使用@CacheEvict清除缓存,确保数据的一致性。

总结

到此这篇关于Redis数据库在Spring Boot中应用操作的文章就介绍到这了,更多相关Spring Boot中Redis内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决JDK9以上的非法反射访问警告的问题

    解决JDK9以上的非法反射访问警告的问题

    文章介绍了在JDK9及以上版本中,由于模块系统限制,旧版库(如protostuff)会出现非法反射访问的警告,解决方法是使用--illegal-access参数,并通过--add-opens参数允许特定模块的非法反射访问,文章还提供了在IDEA和构建工具(Maven和Gradle)中配置这些参数的示例
    2025-11-11
  • 排查Java应用内存泄漏问题的步骤

    排查Java应用内存泄漏问题的步骤

    这篇文章主要介绍了排查Java应用内存泄漏问题的步骤,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • @RequestBody时第二个字母大写,映射不到的解决

    @RequestBody时第二个字母大写,映射不到的解决

    这篇文章主要介绍了@RequestBody时第二个字母大写,映射不到的解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot制作Docker镜像接入SkyWalking的详细过程

    SpringBoot制作Docker镜像接入SkyWalking的详细过程

    本文通过实际操作完成了如何基于springboot项目接入skyalking的详细过程,并进一步将springboot项目制作容器对接skyalking的详细操作,感兴趣的朋友一起看看吧
    2025-05-05
  • 消息中间件ActiveMQ的简单入门介绍与使用

    消息中间件ActiveMQ的简单入门介绍与使用

    消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,这篇文章主要给大家介绍了关于ActiveMQ的简单入门介与使用的相关资料,需要的朋友可以参考下
    2021-11-11
  • Java实现自定义重试工具类

    Java实现自定义重试工具类

    这篇文章主要为大家详细介绍了如何基于Java实现自定义重试工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • Spring AI TikaDocumentReader详解

    Spring AI TikaDocumentReader详解

    TikaDocumentReader是SpringAI中用于从多种格式文档中提取文本内容的组件,支持PDF、DOC/DOCX、PPT/PPTX和HTML等格式,它在构建知识库、文档处理和数据清洗等任务中非常有用
    2025-01-01
  • SpringBoot如何对LocalDateTime进行格式化并解析

    SpringBoot如何对LocalDateTime进行格式化并解析

    这篇文章主要介绍了SpringBoot如何对LocalDateTime进行格式化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MyBatis一次执行多条SQL语句的操作

    MyBatis一次执行多条SQL语句的操作

    这篇文章主要介绍了MyBatis一次执行多条SQL语句的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • SpringBoot在 POM 中引入本地 JAR 包的方法

    SpringBoot在 POM 中引入本地 JAR 包的方法

    在开发 Spring Boot 应用程序时,您可能需要使用本地 JAR 包来添加自定义库或功能,本文将介绍在 Spring Boot 项目的 POM 文件中如何引入本地 JAR 包,感兴趣的朋友跟随小编一起看看吧
    2023-08-08

最新评论