第一步:添加 Jedis 依賴
想要在 Java 中使用 Redis 緩存,需要添加相關的Jar包依賴,打開Maven倉庫的網站:https://mvnrepository.com/ ,搜索Jedis,在pom中引入即可。
第二步:使用 Redis 連接池
跟數據庫連接池相同,Java Redis也同樣提供了類redis.clients.jedis.JedisPool來管理我們的Reids連接池對象,並且我們可以使用redis.clients.jedis.JedisPoolConfig來對連接池進行配置,代碼如下:
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大空閒數
poolConfig.setMaxIdle(50);
// 最大連接數
poolConfig.setMaxTotal(100);
// 最大等待毫秒數
poolConfig.setMaxWaitMillis(20000);
// 使用配置創建連接池
JedisPool pool = new JedisPool(poolConfig, "localhost");
// 從連接池中獲取單個連接
Jedis jedis = pool.getResource();
// 如果需要密碼
//jedis.auth("password");
Redis 只能支持六種數據類型(string/hash/list/set/zset/hyperloglog)的操作,操作對象的話則可以在Spring中進行。
第三步:在 Spring 中使用 Redis
在 Spring 中,可以通過使用RedisTemplate解決讀寫對象的問題。除了 Jedis 包以外還需要在 Spring 引入 spring-data-redis 包。
- 第一步:使用Spring配置JedisPoolConfig對象
大部分的情況下,我們還是會用到連接池的,於是先用 Spring 配置一個 JedisPoolConfig 對象:
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--最大空閒數-->
<property name="maxIdle" value="50"/>
<!--最大連接數-->
<property name="maxTotal" value="100"/>
<!--最大等待時間-->
<property name="maxWaitMillis" value="20000"/>
</bean>
- 第二步:爲連接池配置工廠模型
- 在Spring Data Redis中有四種可供我們選擇的工廠模型,它們分別是:
JredisConnectionFactory
JedisConnectionFactory
LettuceConnectionFactory
SrpConnectionFactory
我們這裏就簡單配置成JedisConnectionFactory:
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!--Redis服務地址-->
<property name="hostName" value="localhost"/>
<!--端口號-->
<property name="port" value="6379"/>
<!--如果有密碼則需要配置密碼-->
<!--<property name="password" value="password"/>-->
<!--連接池配置-->
<property name="poolConfig" ref="poolConfig"/>
</bean>
- 第三步:配置RedisTemplate
普通的連接根本沒有辦法直接將對象直接存入 Redis 內存中,我們需要替代的方案:將對象序列化(可以簡單的理解爲繼承Serializable接口)。我們可以把對象序列化之後存入Redis緩存中,然後在取出的時候又通過轉換器,將序列化之後的對象反序列化回對象,這樣就完成了我們的要求:
第四步:在 SpringBoot 中使用 Redis
- 在SpringBoot中添加Redis依賴:
<!-- Radis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 添加配置文件:
在SpringBoot中使用.properties或者.yml都可以
# REDIS (RedisProperties)
# Redis數據庫索引(默認爲0)
spring.redis.database=0
# Redis服務器地址
spring.redis.host=localhost
# Redis服務器連接端口
spring.redis.port=6379
# Redis服務器連接密碼(默認爲空)
spring.redis.password=
# 連接池最大連接數(使用負值表示沒有限制)
spring.redis.pool.max-active=8
# 連接池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連接池中的最大空閒連接
spring.redis.pool.max-idle=8
# 連接池中的最小空閒連接
spring.redis.pool.min-idle=0
# 連接超時時間(毫秒)
spring.redis.timeout=0
- 測試訪問:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class ApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void test() throws Exception {
// 保存字符串
stringRedisTemplate.opsForValue().set("aaa", "111");
Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
}
}
通過上面這段極爲簡單的測試案例演示瞭如何通過自動配置的StringRedisTemplate對象進行Redis的讀寫操作,該對象從命名中就可注意到支持的是String類型。原本是RedisTemplate<K, V>接口,StringRedisTemplate就相當於RedisTemplate<String, String>的實現。