redis集成:springboot集成redis
参考:
Springboot2.x整合Redis以及连接哨兵模式/集群模式
Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了
Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置
Spring全家桶系列--SpringBoot入门Redis
Springboot使用RedisTemplate优雅地操作redis
一起来学 SpringBoot 2.x | 第九篇:整合Lettuce Redis
一起来学 SpringBoot 2.x | 第十篇:使用Spring Cache集成Redis
spring data redis 连接单机版redis
还需要引入连接池的依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
application.properties
spring.redis.database=0
spring.redis.password=123456 //设置的密码
spring.redis.port=6379 //端口
spring.redis.host=10.3.13.197 //ip地址
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms
service层代码
package com.redis.example.redistest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
@Autowired
RedisTemplate redisTemplate;
public void hello() {
//针对 key 的操作,相关的方法就在 RedisTemplate 中
//针对具体数据类型的操作,相关的方法需要首先获取对应的数据类型,获取相应数据类型的操作方法是 opsForXXX
//调用该方法就可以将数据存储到 Redis 中去了
ValueOperations ops = redisTemplate.opsForValue();
ops.set("k1", "v1");
Object k1 = ops.get("k1");
System.out.println(k1);
}
}
Test调用
package com.redis.example.redistest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedistestApplicationTests {
@Autowired
private HelloService helloService;
@Test
public void testRedis(){
helloService.hello();
}
}
Spring Boot 中 Redis 的自动化配置类 (源码)
@Configuration //首先标记这个是一个配置类,
//同时该配置在 RedisOperations 存在的情况下才会生效(即项目中引入了 Spring Data Redis)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)//导入在 application.properties 中配置的属性
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })//导入连接池信息(如果存在的话)
public class RedisAutoConfiguration {
//提供了两个 Bean ,RedisTemplate 和 StringRedisTemplate ,
//其中 StringRedisTemplate 是 RedisTemplate 的子类,两个的方法基本一致,
//不同之处主要体现在操作的数据类型不同,RedisTemplate 中的两个泛型都是 Object ,
//意味者存储的 key 和 value 都可以是一个对象,而 StringRedisTemplate 的 两个泛型都是 String ,
//意味者 StringRedisTemplate 的 key 和 value 都只能是字符串。如果开发者没有提供相关的 Bean ,
//这两个配置就会生效,否则不会生效。
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}