注解方式使用 Redis 缓存
使用緩存有兩個前置步驟
在 pom.xml 引入依賴
在啟動類上加注解 @EnableCaching
@SpringBootApplication @EnableCaching public class RedisApplication {public static void main(String[] args) {SpringApplication.run(RedisApplication.class, args);} }常用的注解有以下幾個@Cacheable、@CachePut、@CacheEvict
添加緩存
緩存的key就是配置在注解里面的值product::123,值是你方法的返回值,如果沒有返回值,值就是org.springframework.cache.support.NullValue
在需要加緩存的方法上添加注解 @Cacheable(cacheNames = "product", key = "123"),
cacheNames 和 key 都必須填,如果不填 key ,默認的 key 是當前的方法名,更新緩存時會因為方法名不同而更新失敗。
如在訂單列表上加緩存
@RequestMapping(value = "/list", method = RequestMethod.GET)@Cacheable(cacheNames = "product", key = "123")public List<Product> list() {List<Product> products=new ArrayList<>();for (int i = 0; i < 3; i++) {Product product=new Product();product.setId(i+1);product.setName("第"+(i+1)+"件商品");product.setPrice((double) ((i+1)*100));products.add(product);}return products;}可能會報錯,原因是對象未序列化。讓對象實現 Serializable 方法即可。
@Data @NoArgsConstructor @AllArgsConstructor public class Product implements Serializable {private Integer id;private String name;private Double price; }重啟項目訪問訂單列表,在 rdm 里查看 Redis 緩存,有 product::123 說明緩存成功。
更新緩存
在需要更新緩存的方法上加注解: @CachePut(cacheNames = "product", key = "123")
注意
cacheNames 和 key 要跟 @Cacheable() 里的一致,才會正確更新。
@CachePut() 和 @Cacheable() 注解的方法返回值要一致
刪除緩存
在需要刪除緩存的方法上加注解:@CacheEvict(cacheNames = "product", key = "123"),執行完這個方法之后會將 Redis 中對應的記錄刪除。
其他常用功能
cacheNames 也可以統一寫在類上面, @CacheConfig(cacheNames = "product") ,具體的方法上就不用寫啦。
Key 也可以動態設置為方法的參數
@GetMapping("/detail")@Cacheable(cacheNames = "product", key = "#id")public Product detail(@RequestParam("id") Integer id){if (id==1){return new Product(1,"電冰箱",20d);}else if (id==2){return new Product(2,"洗衣機",30d);}else {return new Product(3,"彩電",40d);}}如果參數是個對象,也可以設置對象的某個屬性為 key。比如其中一個參數是 user 對象,key 可以寫成 key="#user.id"
緩存還可以設置條件。
設置當 openid 的長度大于3時才緩存
還可以指定 unless即條件不成立時緩存。#result 代表返回值,意思是當返回碼不等于 0 時不緩存,也就是等于 0 時才緩存。
@GetMapping("/detailOnConditionAndUnless")@Cacheable(cacheNames = "product", key = "#id", condition = "#id > 2", unless = "#result!= 0")public Integer detailOnConditionAndUnless(@RequestParam("id") Integer id){if (id==3){return 0;}else {return 1;}}?
總結
以上是生活随笔為你收集整理的注解方式使用 Redis 缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RedisPlus图形化客户端-支持集群
- 下一篇: linux cmake编译源码,linu