SpringBoot中使用Cache提升接口性能详解( 二 )


文章插图
图片
这里必须要一样哦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.xmlehcache.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>测试增删改:
先添加个数据:

SpringBoot中使用Cache提升接口性能详解

文章插图
图片
 
SpringBoot中使用Cache提升接口性能详解

文章插图
图片
成功添加ID为4的信息 , Service中的save方法中我们添加了@CachePut注解 , 接下来我们查询ID为4的信息 , 看看控制台是否会生成SQL语句 。
SpringBoot中使用Cache提升接口性能详解

文章插图
图片
 
SpringBoot中使用Cache提升接口性能详解

文章插图
图片
控制台没有增加任何的SQL语句 , 说明save方法加的@CachePut生效了 。
接着做删除操作:
SpringBoot中使用Cache提升接口性能详解

文章插图
图片
 
SpringBoot中使用Cache提升接口性能详解

文章插图
图片
 
ID为4的删除了 , 接下来再做查询看看:
SpringBoot中使用Cache提升接口性能详解

文章插图
图片
 
这说明删除了数据后 , 缓存也做了删除 。这里生成了查询语句 。




推荐阅读