# spring-cache-redis-demo
**Repository Path**: cckevincyh/spring-cache-redis-demo
## Basic Information
- **Project Name**: spring-cache-redis-demo
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-11
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[TOC]
## Spring Data Redis
### Spring Cache 简介
> 当Spring Boot 结合Redis来作为缓存使用时,最简单的方式就是使用Spring Cache了,使用它我们无需知道Spring中对Redis的各种操作,仅仅通过它提供的@Cacheable 、@CachePut 、@CacheEvict 、@EnableCaching等注解就可以实现缓存功能
### 在spring boot项目中加入依赖和配置
```xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.2.RELEASE
org.example
spring-cache-redis-demo
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-test
test
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
org.apache.commons
commons-pool2
```
注意:在 springboot 1.5.x版本的默认的Redis客户端是 Jedis实现的,springboot 2.x版本中默认客户端是用 lettuce实现的。
区别:
- Jedis在实现上是直连Redis服务,多线程环境下非线程安全,除非使用连接池,为每个 RedisConnection 实例增加物理连接。
- Lettuce是一种可伸缩,线程安全,完全非阻塞的Redis客户端,多个线程可以共享一个RedisConnection,它利用Netty NIO框架来高效地管理多个连接,从而提供了异步和同步数据访问方式,用于构建非阻塞的反应性应用程序。
我们这里推荐使用Lettuce。
加入配置
```yaml
server:
port: 8081
spring:
application:
name: redis-demo
redis:
host: localhost
password: dpmcp_redis
database: 0
lettuce:
pool:
max-active: 8 # 连接池最大连接数
max-idle: 8 # 连接池最大空闲连接数
min-idle: 0 # 连接池最小空闲连接数
max-wait: -1ms # 连接池最大阻塞等待时间,负值表示没有限制
```
注意:由于SpringBoot 2.x中默认并没有使用Redis连接池,所以需要在pom.xml中添加commons-pool2的依赖
```xml
org.apache.commons
commons-pool2
```
#### RedisTemplate自动装配
我们可以看到在`spring.factories`文件中,配有redis的自动装配的类`RedisAutoConfiguration`
我们可以看看`RedisAutoConfiguration.class`中配置了什么。
```java
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
public RedisTemplate