SpringBoot 2.0.3 版本、redis3.2版本
1. 加入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2. 编写RedisConfig类
package com.pibigstar.common.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
//缓存管理器
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheManager cacheManager = RedisCacheManager.builder(factory).build();
return cacheManager;
}
//自定义缓存key生成策略
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator(){
@Override
public Object generate(Object target, java.lang.reflect.Method method, Object... params) {
StringBuffer sb = new StringBuffer();
sb.append(target.getClass().getName());
sb.append(method.getName());
for(Object obj:params){
sb.append(obj.toString());
}
System.out.println("调用Redis生成key:"+sb.toString());
return sb.toString();
}
};
}
}
2.1 配置application.yml文件
spring:
redis:
host: 127.0.0.1
port: 6379
database: 0 # 设置数据库索引为0 默认为0
password: # 密码为空
jedis:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 2 # 连接池中的最小空闲连接
timeout: 2000 # 连接超时时间(毫秒)
3. 在 适当的地方加入缓存
package com.pibigstar.service.impl;
import java.util.List;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.pibigstar.dao.GradeMapper;
import com.pibigstar.domain.Grade;
import com.pibigstar.service.GradeService;
@Service
@CacheConfig(cacheNames="grades")
public class GradeServiceImpl implements GradeService{
@Autowired
private GradeMapper gradeMapper;
@Override
@Cacheable //开启缓存
public Grade getOneById(Long id) {
return gradeMapper.selectByPrimaryKey(id);
}
@Override
@Cacheable //开启缓存
public List<Grade> list() {
return gradeMapper.findAll();
}
}
- @Cacheable将查询结果缓存到redis中,(key=”#p0”)指定传入的第一个参数作为redis的key。
- @CachePut,指定key,将更新的结果同步到redis中
- @CacheEvict,指定key,删除缓存数据,allEntries=true,方法调用后将立即清除缓存
4. 启动
4.1 启动redis
下载: https://pan.baidu.com/s/1tTYcCRUF-qDikhPTkSiJTQ
解压,双击 start.bat 即可
RedisDesktopManager 文件夹放的是redis 可视化工具
4.2 启动项目
调用 开启缓存的那两个方法,就可以看到控制台输出了:
通过redis 可视化工具可以看到:
已经有key值生成了,
当再一次查询的时候就不会去从数据库中查询了,而是直接从我们的redis中查询,速度会非常快。
需要注意的是:当数据库中值改变了,因为它查询的是从缓存中查询,所以查出来的数据还是之前的数据,只有当key过期之后或者被删除之后才能查到最新的值
5. 常用redis命令
- flushdb:清空当前数据库。
- select [index]:选择索引数据库,index为索引值名,如:select 1。
- keys *:查看数据库内所有的key。
- del [key]:删除一条指定key的值。
- get [key] : 获得 指定key的值
- flushall:清空所有数据库。
- quit:退出客户端连接