一文读懂 Spring 集成 Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

前言

关于 Redis已然是烂大街的技术了,但是近日新起了一个项目需要集成 Redis,看了一下之前的封装实在是不怎么优雅,于是查了一下发现了一个非常简单的解决方案,那就是 Spring家族的 SpringDataRedis。话不多说直接“上码”:

Spring Data Redis 介绍

Spring Data Redis是Spring Data系列的一部分,它可以轻松地使得Spring应用程序配置和访问Redis。

快速搭建 Spring Data Redis

直接可以参照官方地址进行配置,以往的 Spring的文档都写着预计阅读时间,这个没有写你就知道有多简单啦。你可以直接点击查看官方文档,或者往下阅读。
Maven直接引入如下依赖:

 
  1. <dependencies>

  2. <dependency>

  3. <groupId>org.springframework.data</groupId>

  4. <artifactId>spring-data-redis</artifactId>

  5. <version>1.8.8.RELEASE</version>

  6. </dependency>

  7. </dependencies><repositories>

  8. <repository>

  9. <id>spring-libs-release</id>

  10. <name>Spring Releases</name>

  11. <url>https://repo.spring.io/libs-release</url>

  12. <snapshots>

  13. <enabled>false</enabled>

  14. </snapshots>

  15. </repository>

  16. </repositories>

然后直接在 Spring的配置文件里面定义 bean就可以了,官方没有说怎么配置 hostname等等,但是点击 JedisConnectionFactory里面一看就知道了,直接添加一行 p:host-name="172.10.23.234"即可。

 
  1. <bean id="jedisConnFactory"

  2. class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"

  3. p:use-pool="true"

  4. p:host-name="172.10.23.234"

  5. />

  6. <!-- redis template definition -->

  7. <bean id="redisTemplate"

  8. class="org.springframework.data.redis.core.RedisTemplate"

  9. p:connection-factory-ref="jedisConnFactory"/>

最后直接引入 bean使用:

 
  1. public class Example {

  2. // inject the actual template

  3. @Autowired

  4. private RedisTemplate<String, String> template;

  5. // inject the template as ListOperations

  6. // can also inject as Value, Set, ZSet, and HashOperations

  7. @Resource(name="redisTemplate")

  8. private ListOperations<String, String> listOps;

  9. public void addLink(String userId, URL url) {

  10. listOps.leftPush(userId, url.toExternalForm());

  11. // or use template directly

  12. redisTemplate.boundListOps(userId).leftPush(url.toExternalForm());

  13. }

  14. }

如上,根据 Spring的官方文档已经全部完成,是不是非常简单?那么接下来我们运行一下试一试。
这时候出现了第一个异常。

NoClassDefFoundError 问题解决

 
  1. nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig

很明显是没有引入这个包嘛,我们直接从 spring-data-redis的 pom.xml里面可以看到多了一个 optional属性。

 
  1. <dependency>

  2. <groupId>org.apache.commons</groupId>

  3. <artifactId>commons-pool2</artifactId>

  4. <optional>true</optional>

  5. </dependency>

那么这个问题就迎刃而解了,因为在 spring-data-redis里面声明的 commons-pool2是 optional的,根据 Maven的规则如果A项目依赖配置为optional的,那么依赖A项目的B项目如果不手动引入A里面optional的依赖B项目是不会自动引入依赖的的。说起来有点绕,反正就是导致我们必须手动添加下面的依赖。详情可以参照 Maven的官方网文档。点击查看官方文档。

 
  1. <dependency>

  2. <groupId>org.apache.commons</groupId>

  3. <artifactId>commons-pool2</artifactId>

  4. <version>2.2</version>

  5. </dependency>

再次运行的时候我们发现了另一个问题

 
  1. nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/JedisPoolConfig

这问题就显而易见了,直接添加如下到 pom.xml中即可。

 
  1. <dependency>

  2. <groupId>redis.clients</groupId>

  3. <artifactId>jedis</artifactId>

  4. <version>2.9.0</version>

  5. </dependency>

这时候我们再次运行项目可以正常运行啦,然而有出现了一个奇怪的问题,存入 Redis里面的 Key有一个看起来像是乱码的前缀 \xac\xed\x00\x05t\x00:

\xac\xed\x00\x05t\x00 到底是啥

出现这个问题的原因是因为其使用的默认是RedisTemplate,它使用的是Java的Serialization方式,所以会在前面有一段类似乱码的东西。如果是String作为key的话可以直接修改为StringRedisTemplate这个问题就修改了


原文发布时间为:2018-11-5

本文作者:码匠笔记

本文来自云栖社区合作伙伴“Web项目聚集地”,了解相关信息可以关注“Web项目聚集地”。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
编解码 NoSQL Java
使用Spring Boot + Redis 队列实现视频文件上传及FFmpeg转码的技术分享
【8月更文挑战第30天】在当前的互联网应用中,视频内容的处理与分发已成为不可或缺的一部分。对于视频平台而言,高效、稳定地处理用户上传的视频文件,并对其进行转码以适应不同设备的播放需求,是提升用户体验的关键。本文将围绕使用Spring Boot结合Redis队列技术来实现视频文件上传及FFmpeg转码的过程,分享一系列技术干货。
88 3
|
4天前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
|
11天前
|
NoSQL 网络协议 Java
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
25 7
|
12天前
|
NoSQL Java 网络安全
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
|
1天前
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
6 0
|
2月前
|
NoSQL Redis 缓存
Redis 加持下的 Spring 应用性能革命:见证毫秒级响应速度,打造极致用户体验!
【8月更文挑战第31天】Redis 是一个高性能键值存储系统,常用于数据库、缓存及消息中间件。与 Spring 框架集成后,可显著提升应用性能,特别是在高并发场景下。本文通过电子商务网站商品详情页的例子,展示了如何配置 Redis 并使用 `RedisTemplate` 进行数据操作,通过缓存策略优化应用性能,减轻数据库压力。例如,在 `ProductService` 类中,先从 Redis 获取商品信息,若未命中则从数据库获取并缓存至 Redis。此外,还介绍了如何通过 REST 控制器模拟 HTTP 请求进行测试。在实际项目中,结合 Spring Cache 注解可更便捷地管理缓存策略。
40 0
|
2月前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
39 0
|
2月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
62 0
|
3月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
191 6
|
3月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
217 4
下一篇
无影云桌面