學習Spring Boot:(二十五)使用 Redis 實現數據緩存

前言

因爲 Ehcache 存在於單個 java 程序的進程中,沒法知足多個程序分佈式的狀況,須要將多個服務器的緩存集中起來進行管理,須要一個緩存的寄存器,這裏使用的是 Redis。css

正文

當應用程序要去緩存中讀取數據,可是緩存中沒有找到該數據,則從新去數據庫中獲取數據,而後將數據存入緩存中。
還有當咱們須要更新或者刪除緩存中的數據時候,須要讓緩存失效。html

cache

配置

在系統配置文件中加入 redis 的鏈接參數:java

spring:
  redis:
    host: 192.168.19.200 # 120.79.208.199 # host ,默認 localhost
    port: 6379 # 端口號,默認6379
    pool:
    # 設置都是默認值,能夠按需求設計
      max-active: 8 # 可用鏈接實例的最大數目,默認值爲8;若是賦值爲-1,則表示不限制;
      max-idle: 8  # 控制一個pool最多有多少個狀態爲idle(空閒的)的redis實例,默認值也是8。
      max-wait: -1 # 等待可用鏈接的最大時間,單位毫秒,默認值爲-1,表示永不超時。
      min-idle: 0 # 控制一個pool最少有多少個狀態爲idle(空閒的)的redis實例,默認值爲0。
    timeout: 0 # 鏈接超時時間 單位 ms,默認爲0
    password: master # 密碼,根據本身的 redis 設計,默認爲空

而後在系統入口啓動類上面加入打開緩存的註解 @EnableCaching
若是沒啓用其餘緩存,這樣就自動打開 redis 緩存。redis

還能夠自定義註冊 RedisCacheManager,設置相關參數:spring

@Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
        // 設置緩存最大時間 24 h
        redisCacheManager.setDefaultExpiration(24 * 60 * 60);
        return redisCacheManager;
    }

使用

@Service
@CacheConfig(cacheNames = "em")
public class EmployeeServiceImpl implements EmployeeService {
    @Autowired
    private EmployeeDao dao;

    @Override
    @Cacheable(key = "#p0")
    public Employee findOne(Long id) {
        return dao.findOne(id);
    }

    /** * 更新緩存中的數據, * 因爲 redis 是存在外部,不是 ehcache 那樣存在於項目進程中,須要咱們主動去更新 緩存 * @param employee * @return */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CachePut(key = "#p0.id")
    public Employee update(Employee employee) {
        return dao.save(employee);
    }

    /** * 一樣主動去刪除 cache * @param id */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(key = "#p0")
    public void delete(Long id) {
        dao.delete(id);
    }
}

註解的使用參考前面的學習Spring Boot:(二十一)使用 EhCache 實現數據緩存 數據庫

相關文章
相關標籤/搜索