Springboot使用Redis进行数据缓存

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查看

猜你喜欢

转载自blog.csdn.net/xuxin132133/article/details/83749630