1. 程式人生 > >springboot整合redis快取

springboot整合redis快取

使用redis作為快取

1. 在pom.xml檔案中匯入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2. 在啟動類中新增使用快取的註解

@EnableCaching

3. 在application.yml中配置redis的資訊

spring:
  redis:
    host: localhost
    port: 6379

4. 在service層配置快取註解

  • 注意:配置在dao層會丟擲找不到key的錯誤
    • 解決方式1:配置在service層
    • 解決方式2:自定義一種key的生成策略
/**
 * 使用@CacheConfig是一個類級別的註解,允許共享快取的名稱、KeyGenerator、CacheManager 和CacheResolver。
 *
 * @author: [email protected]
 * @date: 2018/5/17
 */
@Service
@CacheConfig(cacheNames = "user")
public class UserService {
    @Autowired
    private UserMapper userMapperr;

    /**
     * 使用@CachePut:在新增物件時就放入快取中,一般不建議這麼做,因為會造成快取過多,也沒有必要每條新增資料都放入快取
     *
     * @param user
     */
    public void save(User user) {
        userMapperr.save(user);
    }

    /**
     * 通過ID查詢資料
     * unless:true表示不儲存到快取,與condition相反
     *
     * @param id
     * @return
     */
    @Cacheable(key = "#id", unless = "#result == null")
    public User getById(Integer id) {
        return userMapperr.getById(id);
    }

    /**
     * 使用@CacheEvict消除快取,在每次對資料進行刪除時,就清除快取。
     *
     * @param id
     */
    @CacheEvict(key = "#id")
    public void delete(Integer id) {
        userMapperr.delete(id);
    }

    /**
     * 修改時建議清除快取,而不是重新放入快取,這樣可以避免多個執行緒修改相同資料時,
     * 最後有效的修改不是放入快取的資料,造成資料不是最新資料。
     *
     * @param user
     */
    @CacheEvict(key = "#user.id")
    public void update(User user) {
        userMapperr.update(user);
    }

}