文章插图
图片
这里必须要一样哦cacheKeyGenerator
缓存Key:JCacheKeyGenerator.java
public class JCacheKeyGenerator implements CacheKeyGenerator {private static final StringKEY_PREFIX = "storage_" ;@Overridepublic GeneratedCacheKey generateCacheKey(CacheKeyInvocationContext<? extends Annotation> cacheKeyInvocationContext) {CacheInvocationParameter[] params = cacheKeyInvocationContext.getAllParameters() ;StringBuilder sb = new StringBuilder() ;for (CacheInvocationParameter param : params) {if (param.getValue() instanceof Storage) {Storage s = (Storage) param.getValue() ;sb.append(s.getId()) ;} else {sb.append((Long)param.getValue()) ;}}return new StorageGeneratedCacheKey(KEY_PREFIX + sb.toString()) ;}private static class StorageGeneratedCacheKey implements GeneratedCacheKey {private static final long serialVersionUID = 1L;private String key ;public StorageGeneratedCacheKey(String key) {this.key = key ;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((key == null) ? 0 : key.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;StorageGeneratedCacheKey other = (StorageGeneratedCacheKey) obj;if (key == null) {if (other.key != null)return false;} else if (!key.equals(other.key))return false;return true;}}}
application.yml配置:
spring:cache:cacheNames:- cache_storageehcache:config: classpath:ehcache.xml
ehcache.xml
<?xml versinotallow="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"updateCheck="false"><diskStore path="java.io.tmpdir/Tmp_EhCache"/><defaultCache eternal="false" maxElementsInMemory="10000"overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU" /><cache name="cache_storage" eternal="false" maxElementsInMemory="5000"overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" memoryStoreEvictionPolicy="LRU" /> </ehcache>
测试增删改:
先添加个数据:
文章插图
图片
文章插图
图片
成功添加ID为4的信息 , Service中的save方法中我们添加了@CachePut注解 , 接下来我们查询ID为4的信息 , 看看控制台是否会生成SQL语句 。
文章插图
图片
文章插图
图片
控制台没有增加任何的SQL语句 , 说明save方法加的@CachePut生效了 。
接着做删除操作:
文章插图
图片
文章插图
图片
ID为4的删除了 , 接下来再做查询看看:
文章插图
图片
这说明删除了数据后 , 缓存也做了删除 。这里生成了查询语句 。
推荐阅读
- 分布式系统中的CAP理论
- 教你用 Python 驾驭 Nacos 配置中心
- 四书五经中好听的男孩名字 四书五经中大气文雅的男孩名字
- 上海特产有哪些?盘点上海十大特产
- 王思聪:《封神》就是垃圾,中国大部分人都丧失了审美能力,可悲
- 欣慰!瓦妮莎从悲伤中走出,瘦身成功妩媚动人,坦言不愿改嫁
- 诗经楚辞中好听的男孩的名字 起名诗经楚辞男孩
- 名字中带羡的男孩名字 男孩名字用羡字文雅
- 姚笛,9年前朝马伊琍开了一枪,没想到2023年,回弹正中自己眉心
- “港独”明星何韵诗,叫嚣联合国将中国除名!如今下场真是大快人心!