1.這里使用maven 管理jar包,所以pom中引入依賴,此處注意 spring-boot-starter-data-redis 引用的大版本號(hào)應(yīng)和所依賴的spring-boot-starter-parent 大版本號(hào)相同,即:spring-boot-starter-parent 版本為 2.3.x ,spring-boot-starter-data-redis 版本號(hào)也為 2.3.x 否則會(huì)引出類缺失異常
<!--整合redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--對(duì)象池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.然后在application.yml文件里配置redis
spring:
redis:
# Redis數(shù)據(jù)庫索引(默認(rèn)為0)
database: 0
#數(shù)據(jù)庫ip地址
host: 127.0.0.1
#數(shù)據(jù)庫端口 默認(rèn)為6379
port: 6379
#數(shù)據(jù)庫密碼
password: 123456
lettuce:
pool:
#連接池最大連接數(shù)默認(rèn)8 負(fù)數(shù)表示無限制
max-active: 8
#連接池最大阻塞等待時(shí)間 默認(rèn)值-1 負(fù)數(shù)表示無限制
max-wait: -1
#連接池最大空閑連接 默認(rèn)8
max-idle: 8
#連接池最小空閑連接 默認(rèn)0
min-idle: 0
這里我是用lettuce客戶端,未使用Jedis 二者 區(qū)別如下:
1、Jedis 是直連模式,在多個(gè)線程間共享一個(gè) Jedis 實(shí)例時(shí)是線程不安全的,
每個(gè)線程都去拿自己的 Jedis 實(shí)例,當(dāng)連接數(shù)量增多時(shí),物理連接成本就較高了
2、Lettuce的連接是基于Netty的,連接實(shí)例可以在多個(gè)線程間共享,如果你不知道Netty也沒事,大致意思就是一個(gè)多線程的應(yīng)用可以使用同一個(gè)連接實(shí)例,而不用擔(dān)心并發(fā)線程的數(shù)量。通過異步的方式可以讓我們更好地利用系統(tǒng)資源。
附注:若想詳細(xì)了解Lettuce 可以看這篇文章 https://www.cnblogs.com/throwable/p/11601538.html
3.配置RedisTemplate序列化, SpringBoot集成Redis后,使用redis存儲(chǔ)Object,redis默認(rèn)的序列化器在寫入key或value時(shí)會(huì)以二進(jìn)制的形式存儲(chǔ),不方便我們?nèi)粘S^察他的key和value,我們自定義一個(gè)RedisTemplate,設(shè)置序列化器,這樣我們可以很方便的操作實(shí)例對(duì)象,默認(rèn)情況下RedisTemplate模板只能支持字符串。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
MyRedisSerializer myRedisSerializer=new MyRedisSerializer();
//key序列化方式
template.setKeySerializer(new StringRedisSerializer());
//value序列化
template.setValueSerializer(new StringRedisSerializer());
//value hashmap序列化
template.setHashValueSerializer(new StringRedisSerializer());
return template;
}
}