1. 程式人生 > >Springboot使用Redis進行資料快取

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檢視