一:导入依赖
Springboot中所有相关于springboot的数据操作都子啊spring date中
所以需要导入SpringDateRedis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
底层是spring-data-redis
注:在springboot2.X之后,原来使用的jedis替换为lettuce
jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedis pool 连接池!更像BIO模式
lettuce :采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了,更像NIO模式
二:配置连接
#springboot所有配置类都有一个自动配置类 :RedisAutoConfiguration
#自动配置类都会绑定一个properties配置文件:RedisProperties
redis:
## Redis数据库索引(默认为0)
database: 0
## Redis服务器地址
host: localhost
## Redis服务器连接端口
port: 6379
## Redis服务器连接密码(默认为空)
password:
分析1:在RedisProperties中可以看到配置的一些默认设置,如下:
private int database = 0;
private String host = "localhost";
private int port = 6379;
分析RedisAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate") //此注解的意思就是如果有自定义的配置类,就忽略这个,所以我们可以自定义一个redisTemplate来替换默认的
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
//两个泛型都是object,后期使用需要强转为<String,object>
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean //由于Spring是最常使用的类型,单独提出一个Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
分析2:在设置连接池时,有两个选择,jedis和lettuce,如下:
这里建议使用lettuce,分析RedisAutoConfiguration 源码可知,在RedisAutoConfiguration 的redisTemplate中需要RedisConnectionFactory参数,这是一个接口,其实现类就是jedis和lettuce
分别点进去可以发现jedis中很多引用的类不存在,而lettuce中的引用是完整的
三:测试
public class test {
@Autowired
private RedisTemplate redisTemplate;
@Test
void test() {
redisTemplate.opsForValue().set("name","zhangsan");
System.out.println(redisTemplate.opsForValue().get("name"));
}
}