一文讀懂Spring整合Redis
前言
關於 Redis
已然是爛大街的技術了,但是近日新起了一個專案需要整合 Redis
,看了一下之前的封裝實在是不怎麼優雅,於是查了一下發現了一個非常簡單的解決方案,那就是 Spring
家族的 SpringDataRedis
。話不多說直接“上碼”:
Spring Data Redis 介紹
Spring Data Redis是Spring Data系列的一部分,它可以輕鬆地使得Spring應用程式配置和訪問Redis。
快速搭建 Spring Data Redis
直接可以參照官方地址進行配置,以往的 Spring的文件都寫著預計閱讀時間,這個沒有寫你就知道有多簡單啦。你可以直接點選檢視官方文件,或者往下閱讀。
Maven直接引入如下依賴:
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.data</groupId>
-
<artifactId>spring-data-redis</artifactId>
-
<version>1.8.8.RELEASE</version>
-
</dependency>
-
</dependencies><repositories>
-
<repository>
-
<id>spring-libs-release</id>
-
<name>Spring Releases</name>
-
<url>https://repo.spring.io/libs-release</url>
-
<snapshots>
-
<enabled>false</enabled>
-
</snapshots>
-
</repository>
-
</repositories>
然後直接在 Spring的配置檔案裡面定義 bean就可以了,官方沒有說怎麼配置 hostname等等,但是點選 JedisConnectionFactory裡面一看就知道了,直接新增一行 p:host-name=”172.10.23.234″即可。
-
<bean id="jedisConnFactory"
-
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
-
p:use-pool="true"
-
p:host-name="172.10.23.234"
-
/>
-
<!-- redis template definition -->
-
<bean id="redisTemplate"
-
class="org.springframework.data.redis.core.RedisTemplate"
-
p:connection-factory-ref="jedisConnFactory"/>
最後直接引入 bean使用:
-
public class Example {
-
// inject the actual template
-
@Autowired
-
private RedisTemplate<String, String> template;
-
// inject the template as ListOperations
-
// can also inject as Value, Set, ZSet, and HashOperations
-
@Resource(name="redisTemplate")
-
private ListOperations<String, String> listOps;
-
public void addLink(String userId, URL url) {
-
listOps.leftPush(userId, url.toExternalForm());
-
// or use template directly
-
redisTemplate.boundListOps(userId).leftPush(url.toExternalForm());
-
}
-
}
如上,根據 Spring的官方文件已經全部完成,是不是非常簡單?那麼接下來我們執行一下試一試。
這時候出現了第一個異常。
NoClassDefFoundError 問題解決
-
nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig
很明顯是沒有引入這個包嘛,我們直接從 spring-data-redis的 pom.xml裡面可以看到多了一個 optional屬性。
-
<dependency>
-
<groupId>org.apache.commons</groupId>
-
<artifactId>commons-pool2</artifactId>
-
<optional>true</optional>
-
</dependency>
那麼這個問題就迎刃而解了,因為在 spring-data-redis裡面宣告的 commons-pool2是 optional的,根據 Maven的規則如果A專案依賴配置為optional的,那麼依賴A專案的B專案如果不手動引入A裡面optional的依賴B專案是不會自動引入依賴的的。說起來有點繞,反正就是導致我們必須手動新增下面的依賴。詳情可以參照 Maven的官方網文件。點選檢視官方文件。
-
<dependency>
-
<groupId>org.apache.commons</groupId>
-
<artifactId>commons-pool2</artifactId>
-
<version>2.2</version>
-
</dependency>
再次執行的時候我們發現了另一個問題
-
nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/JedisPoolConfig
這問題就顯而易見了,直接新增如下到 pom.xml中即可。
-
<dependency>
-
<groupId>redis.clients</groupId>
-
<artifactId>jedis</artifactId>
-
<version>2.9.0</version>
-
</dependency>
這時候我們再次執行專案可以正常執行啦,然而有出現了一個奇怪的問題,存入 Redis裡面的 Key有一個看起來像是亂碼的字首 xacxedx00x05tx00:
xacxedx00x05tx00 到底是啥
出現這個問題的原因是因為其使用的預設是RedisTemplate,它使用的是Java的Serialization方式,所以會在前面有一段類似亂碼的東西。如果是String作為key的話可以直接修改為StringRedisTemplate這個問題就修改了
原文釋出時間為:2018-11-5
本文作者:碼匠筆記
本文來自雲棲社群合作伙伴“Web專案聚集地”,瞭解相關資訊可以關注“Web專案聚集地”。
相關文章
- 一文讀懂 Redis 分散式部署方案Redis分散式
- 乾貨|一文讀懂 Spring Data Jpa!Spring
- 一文讀懂mavenMaven
- 一文讀懂ServletServlet
- spring+redis的整合,使用spring-data-redis來整合SpringRedis
- 一文讀懂特徵工程特徵工程
- 一文讀懂 NPM 版本NPM
- 一文讀懂 Apache PulsarApache
- 一文讀懂Ka/Ks
- 一文讀懂 Data Mesh
- 一文讀懂微核心
- 一文讀懂eBPF/XDPeBPF
- spring與redis整合SpringRedis
- Spring Boot整合RedisSpring BootRedis
- Spring Boot 整合redisSpring BootRedis
- 一文讀懂擁塞控制
- 一文讀懂支付系統
- 一文讀懂:GBDT梯度提升梯度
- 一文讀懂前端快取前端快取
- 一文讀懂“負載均衡”負載
- 一文讀懂web組態Web
- 一文讀懂「雲託管」
- 一文讀懂野指標指標
- 一文讀懂Lua元表
- 一文讀懂 Kubernetes APIServer 原理APIServer
- Spring-Boot整合RedisSpringbootRedis
- spring boot(三)整合 redisSpring BootRedis
- 一文讀懂Redis的四種模式,單機、主從、哨兵、叢集Redis模式
- 一文讀懂Apache Flink技術Apache
- JVM(2)--一文讀懂垃圾回收JVM
- 一文讀懂系列-JVM垃圾收集JVM
- 【Flutter】一文讀懂混入類MixinFlutter
- 一文讀懂git核心工作原理Git
- 一文讀懂Kafka副本機制Kafka
- 一文讀懂鏈路追蹤
- 一文讀懂Go Http Server原理GoHTTPServer
- 一文讀懂元宇宙的特徵元宇宙特徵
- Spring MVC整合redis的配置SpringMVCRedis