1.以往都是在后台直接读取数据库,如果操作过快会给数据库不小的压力,因此java引入了非关系型数据库Redis进行数据缓存,减轻了数据库的负担!
使用测试Redis非关系型数据库,通过查询关系型数据库,查看Redis缓存情况
首先引入pom.xml中的依赖:
//jsa依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
//Redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
2.JPA连接Mysql数据库读取数据
public interface UserJPA extends JpaRepository<UserEntity,Long> {
//继承的JpaRepository接口内部又继承了PagingAndSortingRepository接口
// 以及QueryByExampleExecutor接口
}
注释:UserEntity是实体类
3.Service层
@Transactional//添加事务管理
@Service
@CacheConfig(cacheNames = "user")
//开启声明的类参与缓存,如果方法内的@Cacheable注解没有key值,会自动使用cacheNames配置参数并且追加方法名
public class UserService {
@Autowired
private UserJPA userJPA;
//@Cacheable配置方法的缓存参数,可以自定义缓存的key以及value
@Cacheable
public List<UserEntity> list(){
return userJPA.findAll();
}
}
4.controller层
@ResponseBody
@RequestMapping(value = "/list")
public List<UserEntity> cutPage(){
return userService.list();
}
5.application.properties中配置Redis参数
# REDIS (RedisProperties)配置文件
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# 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
6.设置Redis项目支持缓存
@Configuration
@EnableCaching//开启项目支持缓存
public class RedisConfiguration extends CachingConfigurerSupport {
/**
* 采用RedisCacheManager作为缓存管理器
* @param redisTemplate
* @return
*/
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate){
//返回值使用了Redis缓存管理器
//springboot项目启动时就会找自定义配置的CacheManager对象,并且自动应用到项目中
return new RedisCacheManager(redisTemplate);
}
// *
// * 自定义生成key的规则
// * @return
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
//格式化缓存key字符串
StringBuilder stringBuilder=new StringBuilder();
//追加类名
stringBuilder.append(target.getClass().getName());
//追加方法名
stringBuilder.append(method.getName());
//遍历参数并且追加
for (Object obj:params){
stringBuilder.append(obj.toString());
}
System.out.printf("调用Redis缓存key:"+stringBuilder.toString());
return stringBuilder.toString();
}
};
}
注释:自定义key规则可能会报错
开启Redis查看