实例介绍
【实例简介】
AutoLoadCache 是基于AOP Annotation等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用。现在使用的缓存技术很多,比如Redis、 Memcache 、 EhCache等,甚至还有使用ConcurrentHashMap 或 HashTable 来实现缓存。但在缓存的使用上,每个人都有自己的实现方式,大部分是直接与业务代码绑定,随着业务的变化,要更换缓存方案时,非常麻烦。接下来我们就使用AOP Annotation 来解决这个问题,同时使用自动加载机制 来实现数据“常驻内存”。设计思想及原理:在infoq 发表的文章《面对缓存,有哪些问题需要思考?》《再谈缓存的穿透、数据一致性和最终一致性问题》。使用方法、注解(Annotation)说明、分布式锁支持、表达式的应用、缓存删除、Magic模式、注意事项、与Spring Cache的区别、最佳实战。autoload-cache-spring-boot-starter 推荐使用这个,test目录中也有可运行例子。源码阅读:已经实现基于aspectj 的AOP,代码在com.jarvis.cache.aop.aspectj.AspectjAopInterceptor。
【实例截图】
【核心代码】
文件清单
└── AutoLoadCache-f0138dfb98d716b0e2f971c7af7c94215ce64089
├── autoload-cache-aop
│ ├── autoload-cache-aop-aspectj
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── aop
│ │ └── aspectj
│ │ ├── AspectjAopInterceptor.java
│ │ ├── AspectjCacheAopProxyChain.java
│ │ ├── AspectjDeleteCacheAopProxyChain.java
│ │ └── AspectjDeleteCacheTransactionalAopProxyChain.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-common
│ ├── pom.xml
│ ├── README.md
│ └── src
│ └── main
│ └── java
│ └── com
│ └── jarvis
│ ├── cache
│ │ ├── annotation
│ │ │ ├── CacheDelete.java
│ │ │ ├── CacheDeleteKey.java
│ │ │ ├── CacheDeleteMagicKey.java
│ │ │ ├── CacheDeleteTransactional.java
│ │ │ ├── Cache.java
│ │ │ ├── ExCache.java
│ │ │ ├── LocalCache.java
│ │ │ └── Magic.java
│ │ ├── aop
│ │ │ ├── CacheAopProxyChain.java
│ │ │ ├── DeleteCacheAopProxyChain.java
│ │ │ └── DeleteCacheTransactionalAopProxyChain.java
│ │ ├── CacheUtil.java
│ │ ├── comparator
│ │ │ ├── AutoLoadOldestComparator.java
│ │ │ └── AutoLoadRequestTimesComparator.java
│ │ ├── exception
│ │ │ ├── CacheCenterConnectionException.java
│ │ │ └── LoadDataTimeOutException.java
│ │ ├── MSetParam.java
│ │ ├── reflect
│ │ │ ├── generics
│ │ │ │ └── ParameterizedTypeImpl.java
│ │ │ └── lambda
│ │ │ ├── GenerateLambda.java
│ │ │ ├── GenerateLambdaMarkerClass.java
│ │ │ ├── GenerateLambdaProcessor.java
│ │ │ ├── LambdaFactory.java
│ │ │ ├── Lambda.java
│ │ │ └── MethodParameter.java
│ │ ├── to
│ │ │ ├── AutoLoadConfig.java
│ │ │ ├── AutoLoadTO.java
│ │ │ ├── CacheKeyTO.java
│ │ │ ├── CacheWrapper.java
│ │ │ ├── LocalCacheWrapper.java
│ │ │ └── ProcessingTO.java
│ │ └── type
│ │ ├── AutoLoadQueueSortType.java
│ │ └── CacheOpType.java
│ └── lib
│ └── util
│ ├── BeanUtil.java
│ ├── OsUtil.java
│ └── StringUtil.java
├── autoload-cache-core
│ ├── pom.xml
│ ├── README.md
│ └── src
│ └── main
│ └── java
│ └── com
│ └── jarvis
│ └── cache
│ ├── AutoLoadHandler.java
│ ├── CacheHandler.java
│ ├── CacheHelper.java
│ ├── ChangeListener.java
│ ├── ComboCacheManager.java
│ ├── DataLoaderFactory.java
│ ├── DataLoader.java
│ ├── DeleteCacheMagicHandler.java
│ ├── MagicHandler.java
│ └── RefreshHandler.java
├── autoload-cache-lock
│ ├── autoload-cache-lock-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── lock
│ │ └── ILock.java
│ ├── autoload-cache-lock-jedis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── lock
│ │ ├── JedisClusterLock.java
│ │ └── ShardedJedisLock.java
│ ├── autoload-cache-lock-redis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ ├── lock
│ │ │ └── AbstractRedisLock.java
│ │ └── to
│ │ └── RedisLockInfo.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-manager
│ ├── autoload-cache-manager-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── ICacheManager.java
│ ├── autoload-cache-manager-jedis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── redis
│ │ ├── JedisClusterCacheManager.java
│ │ ├── JedisClusterPipeline.java
│ │ ├── JedisUtil.java
│ │ ├── RetryableJedisClusterPipeline.java
│ │ └── ShardedJedisCacheManager.java
│ ├── autoload-cache-manager-lettuce
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── redis
│ │ ├── LettuceRedisCacheManager.java
│ │ ├── LettuceRedisClusterCacheManager.java
│ │ └── LettuceRedisUtil.java
│ ├── autoload-cache-manager-map
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── map
│ │ ├── CacheChangeListener.java
│ │ ├── CacheTask.java
│ │ └── MapCacheManager.java
│ ├── autoload-cache-manager-memcache
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── memcache
│ │ └── MemcachedCacheManager.java
│ ├── autoload-cache-manager-redis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── redis
│ │ ├── AbstractRedisCacheManager.java
│ │ └── IRedis.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-script
│ ├── autoload-cache-script-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── AbstractScriptParser.java
│ ├── autoload-cache-script-js
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── JavaScriptParser.java
│ ├── autoload-cache-script-ognl
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── OgnlParser.java
│ ├── autoload-cache-script-springel
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── SpringELParser.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-serializer
│ ├── autoload-cache-serializer-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ ├── clone
│ │ │ ├── Cloning.java
│ │ │ └── ICloner.java
│ │ ├── compress
│ │ │ ├── CommonsCompressor.java
│ │ │ └── ICompressor.java
│ │ └── serializer
│ │ ├── CompressorSerializer.java
│ │ ├── ISerializer.java
│ │ └── StringSerializer.java
│ ├── autoload-cache-serializer-fastjson
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── FastjsonSerializer.java
│ ├── autoload-cache-serializer-hessian
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ ├── HessianSerializer.java
│ │ └── hession
│ │ ├── HessionBigDecimalSerializerFactory.java
│ │ ├── HessionSoftReferenceSerializerFactory.java
│ │ ├── SoftReferenceDeserializer.java
│ │ ├── SoftReferenceSerializer.java
│ │ ├── WeakReferenceDeserializer.java
│ │ ├── WeakReferenceSerializerFactory.java
│ │ └── WeakReferenceSerializer.java
│ ├── autoload-cache-serializer-jackson
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ ├── JacksonJsonSerializer.java
│ │ └── NullValue.java
│ ├── autoload-cache-serializer-jackson-msgpack
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── JacksonMsgpackSerializer.java
│ ├── autoload-cache-serializer-jdk
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── JdkSerializer.java
│ ├── autoload-cache-serializer-kryo
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ ├── kryo
│ │ │ ├── CacheWrapperSerializer.java
│ │ │ ├── DefaultKryoContext.java
│ │ │ ├── KryoClassRegistration.java
│ │ │ └── KryoContext.java
│ │ ├── KryoSerializer.java
│ │ └── NullValue.java
│ ├── autoload-cache-serializer-protobuf
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── protobuf
│ │ ├── HeapByteBufUtil.java
│ │ ├── NullValue.java
│ │ ├── ProtoBufSerializer.java
│ │ ├── ReadByteBuf.java
│ │ └── WriteByteBuf.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-spring-boot-starter
│ ├── doc
│ │ └── autoload-cache-ui.html.png
│ ├── LICENSE
│ ├── pom.xml
│ ├── README.md
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── jarvis
│ │ │ └── cache
│ │ │ ├── admin
│ │ │ │ ├── AutoloadCacheController.java
│ │ │ │ ├── AutoLoadVO.java
│ │ │ │ └── HTTPBasicAuthorizeAttribute.java
│ │ │ ├── autoconfigure
│ │ │ │ ├── AutoloadCacheAutoConfigure.java
│ │ │ │ ├── AutoloadCacheManageConfiguration.java
│ │ │ │ ├── AutoloadCacheProperties.java
│ │ │ │ ├── DistributedLockConfiguration.java
│ │ │ │ └── MethodAnnotationPointcutAdvisor.java
│ │ │ ├── interceptor
│ │ │ │ ├── aopproxy
│ │ │ │ │ ├── CacheAopProxy.java
│ │ │ │ │ ├── DeleteCacheAopProxy.java
│ │ │ │ │ └── DeleteCacheTransactionalAopProxy.java
│ │ │ │ ├── CacheDeleteInterceptor.java
│ │ │ │ ├── CacheDeleteTransactionalInterceptor.java
│ │ │ │ └── CacheMethodInterceptor.java
│ │ │ ├── redis
│ │ │ │ ├── SpringRedisCacheManager.java
│ │ │ │ └── SpringRedisLock.java
│ │ │ └── util
│ │ │ └── AopUtil.java
│ │ └── resources
│ │ └── META-INF
│ │ ├── resources
│ │ │ ├── autoload-cache-ui.html
│ │ │ └── webjars
│ │ │ └── autoload-cache-ui
│ │ │ ├── css
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ └── bootstrap-vue.css
│ │ │ └── js
│ │ │ ├── axios.min.js
│ │ │ ├── bootstrap-vue.js
│ │ │ ├── list.js
│ │ │ ├── polyfill.min.js
│ │ │ └── vue.min.js
│ │ └── spring.factories
│ └── test
│ ├── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── demo
│ │ ├── CacheDemoApplication.java
│ │ ├── condition
│ │ │ └── UserCondition.java
│ │ ├── config
│ │ │ └── AutoloadCacheConfiguration.java
│ │ ├── entity
│ │ │ └── UserDO.java
│ │ ├── mapper
│ │ │ ├── temp
│ │ │ │ └── BaseMapper.java
│ │ │ └── UserMapper.java
│ │ ├── service
│ │ │ ├── UserDAO.java
│ │ │ ├── UserServiceImpl.java
│ │ │ └── UserService.java
│ │ ├── test
│ │ │ ├── BaseServiceTest.java
│ │ │ ├── JedisClusterTest.java
│ │ │ └── UserServiceTest.java
│ │ └── web
│ │ └── UserController.java
│ └── resources
│ ├── application.yml
│ ├── init_table.sql
│ ├── logback-spring.xml
│ └── mybatis
│ └── UserMapper.xml
├── doc
│ ├── admin.md
│ ├── annotations.md
│ ├── autoload-cache1.png
│ ├── autoload-cache.png
│ ├── AutoLoadConfig.md
│ ├── cacheAdmin.html
│ ├── cache_admin.png
│ ├── changesLog.md
│ ├── ConcurrentHashMap.md
│ ├── deleteCache.md
│ ├── FlowChart.png
│ ├── FlowChart.txt
│ ├── FST.java
│ ├── FSTSerializer.java
│ ├── idea.md
│ ├── JRedis.md
│ ├── KryoTest.java
│ ├── lock.md
│ ├── magic.md
│ ├── Memcache.md
│ ├── script.md
│ ├── SpringCache.md
│ ├── suggest.md
│ ├── use.md
│ ├── wait.png
│ └── warning.md
├── LICENSE
├── pom.xml
└── README.md
251 directories, 216 files
AutoLoadCache 是基于AOP Annotation等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用。现在使用的缓存技术很多,比如Redis、 Memcache 、 EhCache等,甚至还有使用ConcurrentHashMap 或 HashTable 来实现缓存。但在缓存的使用上,每个人都有自己的实现方式,大部分是直接与业务代码绑定,随着业务的变化,要更换缓存方案时,非常麻烦。接下来我们就使用AOP Annotation 来解决这个问题,同时使用自动加载机制 来实现数据“常驻内存”。设计思想及原理:在infoq 发表的文章《面对缓存,有哪些问题需要思考?》《再谈缓存的穿透、数据一致性和最终一致性问题》。使用方法、注解(Annotation)说明、分布式锁支持、表达式的应用、缓存删除、Magic模式、注意事项、与Spring Cache的区别、最佳实战。autoload-cache-spring-boot-starter 推荐使用这个,test目录中也有可运行例子。源码阅读:已经实现基于aspectj 的AOP,代码在com.jarvis.cache.aop.aspectj.AspectjAopInterceptor。
【实例截图】
【核心代码】
文件清单
└── AutoLoadCache-f0138dfb98d716b0e2f971c7af7c94215ce64089
├── autoload-cache-aop
│ ├── autoload-cache-aop-aspectj
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── aop
│ │ └── aspectj
│ │ ├── AspectjAopInterceptor.java
│ │ ├── AspectjCacheAopProxyChain.java
│ │ ├── AspectjDeleteCacheAopProxyChain.java
│ │ └── AspectjDeleteCacheTransactionalAopProxyChain.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-common
│ ├── pom.xml
│ ├── README.md
│ └── src
│ └── main
│ └── java
│ └── com
│ └── jarvis
│ ├── cache
│ │ ├── annotation
│ │ │ ├── CacheDelete.java
│ │ │ ├── CacheDeleteKey.java
│ │ │ ├── CacheDeleteMagicKey.java
│ │ │ ├── CacheDeleteTransactional.java
│ │ │ ├── Cache.java
│ │ │ ├── ExCache.java
│ │ │ ├── LocalCache.java
│ │ │ └── Magic.java
│ │ ├── aop
│ │ │ ├── CacheAopProxyChain.java
│ │ │ ├── DeleteCacheAopProxyChain.java
│ │ │ └── DeleteCacheTransactionalAopProxyChain.java
│ │ ├── CacheUtil.java
│ │ ├── comparator
│ │ │ ├── AutoLoadOldestComparator.java
│ │ │ └── AutoLoadRequestTimesComparator.java
│ │ ├── exception
│ │ │ ├── CacheCenterConnectionException.java
│ │ │ └── LoadDataTimeOutException.java
│ │ ├── MSetParam.java
│ │ ├── reflect
│ │ │ ├── generics
│ │ │ │ └── ParameterizedTypeImpl.java
│ │ │ └── lambda
│ │ │ ├── GenerateLambda.java
│ │ │ ├── GenerateLambdaMarkerClass.java
│ │ │ ├── GenerateLambdaProcessor.java
│ │ │ ├── LambdaFactory.java
│ │ │ ├── Lambda.java
│ │ │ └── MethodParameter.java
│ │ ├── to
│ │ │ ├── AutoLoadConfig.java
│ │ │ ├── AutoLoadTO.java
│ │ │ ├── CacheKeyTO.java
│ │ │ ├── CacheWrapper.java
│ │ │ ├── LocalCacheWrapper.java
│ │ │ └── ProcessingTO.java
│ │ └── type
│ │ ├── AutoLoadQueueSortType.java
│ │ └── CacheOpType.java
│ └── lib
│ └── util
│ ├── BeanUtil.java
│ ├── OsUtil.java
│ └── StringUtil.java
├── autoload-cache-core
│ ├── pom.xml
│ ├── README.md
│ └── src
│ └── main
│ └── java
│ └── com
│ └── jarvis
│ └── cache
│ ├── AutoLoadHandler.java
│ ├── CacheHandler.java
│ ├── CacheHelper.java
│ ├── ChangeListener.java
│ ├── ComboCacheManager.java
│ ├── DataLoaderFactory.java
│ ├── DataLoader.java
│ ├── DeleteCacheMagicHandler.java
│ ├── MagicHandler.java
│ └── RefreshHandler.java
├── autoload-cache-lock
│ ├── autoload-cache-lock-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── lock
│ │ └── ILock.java
│ ├── autoload-cache-lock-jedis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── lock
│ │ ├── JedisClusterLock.java
│ │ └── ShardedJedisLock.java
│ ├── autoload-cache-lock-redis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ ├── lock
│ │ │ └── AbstractRedisLock.java
│ │ └── to
│ │ └── RedisLockInfo.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-manager
│ ├── autoload-cache-manager-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── ICacheManager.java
│ ├── autoload-cache-manager-jedis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── redis
│ │ ├── JedisClusterCacheManager.java
│ │ ├── JedisClusterPipeline.java
│ │ ├── JedisUtil.java
│ │ ├── RetryableJedisClusterPipeline.java
│ │ └── ShardedJedisCacheManager.java
│ ├── autoload-cache-manager-lettuce
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── redis
│ │ ├── LettuceRedisCacheManager.java
│ │ ├── LettuceRedisClusterCacheManager.java
│ │ └── LettuceRedisUtil.java
│ ├── autoload-cache-manager-map
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── map
│ │ ├── CacheChangeListener.java
│ │ ├── CacheTask.java
│ │ └── MapCacheManager.java
│ ├── autoload-cache-manager-memcache
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── memcache
│ │ └── MemcachedCacheManager.java
│ ├── autoload-cache-manager-redis
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── redis
│ │ ├── AbstractRedisCacheManager.java
│ │ └── IRedis.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-script
│ ├── autoload-cache-script-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── AbstractScriptParser.java
│ ├── autoload-cache-script-js
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── JavaScriptParser.java
│ ├── autoload-cache-script-ognl
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── OgnlParser.java
│ ├── autoload-cache-script-springel
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── script
│ │ └── SpringELParser.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-serializer
│ ├── autoload-cache-serializer-api
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ ├── clone
│ │ │ ├── Cloning.java
│ │ │ └── ICloner.java
│ │ ├── compress
│ │ │ ├── CommonsCompressor.java
│ │ │ └── ICompressor.java
│ │ └── serializer
│ │ ├── CompressorSerializer.java
│ │ ├── ISerializer.java
│ │ └── StringSerializer.java
│ ├── autoload-cache-serializer-fastjson
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── FastjsonSerializer.java
│ ├── autoload-cache-serializer-hessian
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ ├── HessianSerializer.java
│ │ └── hession
│ │ ├── HessionBigDecimalSerializerFactory.java
│ │ ├── HessionSoftReferenceSerializerFactory.java
│ │ ├── SoftReferenceDeserializer.java
│ │ ├── SoftReferenceSerializer.java
│ │ ├── WeakReferenceDeserializer.java
│ │ ├── WeakReferenceSerializerFactory.java
│ │ └── WeakReferenceSerializer.java
│ ├── autoload-cache-serializer-jackson
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ ├── JacksonJsonSerializer.java
│ │ └── NullValue.java
│ ├── autoload-cache-serializer-jackson-msgpack
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── JacksonMsgpackSerializer.java
│ ├── autoload-cache-serializer-jdk
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── JdkSerializer.java
│ ├── autoload-cache-serializer-kryo
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ ├── kryo
│ │ │ ├── CacheWrapperSerializer.java
│ │ │ ├── DefaultKryoContext.java
│ │ │ ├── KryoClassRegistration.java
│ │ │ └── KryoContext.java
│ │ ├── KryoSerializer.java
│ │ └── NullValue.java
│ ├── autoload-cache-serializer-protobuf
│ │ ├── pom.xml
│ │ └── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── serializer
│ │ └── protobuf
│ │ ├── HeapByteBufUtil.java
│ │ ├── NullValue.java
│ │ ├── ProtoBufSerializer.java
│ │ ├── ReadByteBuf.java
│ │ └── WriteByteBuf.java
│ ├── pom.xml
│ └── README.md
├── autoload-cache-spring-boot-starter
│ ├── doc
│ │ └── autoload-cache-ui.html.png
│ ├── LICENSE
│ ├── pom.xml
│ ├── README.md
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── jarvis
│ │ │ └── cache
│ │ │ ├── admin
│ │ │ │ ├── AutoloadCacheController.java
│ │ │ │ ├── AutoLoadVO.java
│ │ │ │ └── HTTPBasicAuthorizeAttribute.java
│ │ │ ├── autoconfigure
│ │ │ │ ├── AutoloadCacheAutoConfigure.java
│ │ │ │ ├── AutoloadCacheManageConfiguration.java
│ │ │ │ ├── AutoloadCacheProperties.java
│ │ │ │ ├── DistributedLockConfiguration.java
│ │ │ │ └── MethodAnnotationPointcutAdvisor.java
│ │ │ ├── interceptor
│ │ │ │ ├── aopproxy
│ │ │ │ │ ├── CacheAopProxy.java
│ │ │ │ │ ├── DeleteCacheAopProxy.java
│ │ │ │ │ └── DeleteCacheTransactionalAopProxy.java
│ │ │ │ ├── CacheDeleteInterceptor.java
│ │ │ │ ├── CacheDeleteTransactionalInterceptor.java
│ │ │ │ └── CacheMethodInterceptor.java
│ │ │ ├── redis
│ │ │ │ ├── SpringRedisCacheManager.java
│ │ │ │ └── SpringRedisLock.java
│ │ │ └── util
│ │ │ └── AopUtil.java
│ │ └── resources
│ │ └── META-INF
│ │ ├── resources
│ │ │ ├── autoload-cache-ui.html
│ │ │ └── webjars
│ │ │ └── autoload-cache-ui
│ │ │ ├── css
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ └── bootstrap-vue.css
│ │ │ └── js
│ │ │ ├── axios.min.js
│ │ │ ├── bootstrap-vue.js
│ │ │ ├── list.js
│ │ │ ├── polyfill.min.js
│ │ │ └── vue.min.js
│ │ └── spring.factories
│ └── test
│ ├── java
│ │ └── com
│ │ └── jarvis
│ │ └── cache
│ │ └── demo
│ │ ├── CacheDemoApplication.java
│ │ ├── condition
│ │ │ └── UserCondition.java
│ │ ├── config
│ │ │ └── AutoloadCacheConfiguration.java
│ │ ├── entity
│ │ │ └── UserDO.java
│ │ ├── mapper
│ │ │ ├── temp
│ │ │ │ └── BaseMapper.java
│ │ │ └── UserMapper.java
│ │ ├── service
│ │ │ ├── UserDAO.java
│ │ │ ├── UserServiceImpl.java
│ │ │ └── UserService.java
│ │ ├── test
│ │ │ ├── BaseServiceTest.java
│ │ │ ├── JedisClusterTest.java
│ │ │ └── UserServiceTest.java
│ │ └── web
│ │ └── UserController.java
│ └── resources
│ ├── application.yml
│ ├── init_table.sql
│ ├── logback-spring.xml
│ └── mybatis
│ └── UserMapper.xml
├── doc
│ ├── admin.md
│ ├── annotations.md
│ ├── autoload-cache1.png
│ ├── autoload-cache.png
│ ├── AutoLoadConfig.md
│ ├── cacheAdmin.html
│ ├── cache_admin.png
│ ├── changesLog.md
│ ├── ConcurrentHashMap.md
│ ├── deleteCache.md
│ ├── FlowChart.png
│ ├── FlowChart.txt
│ ├── FST.java
│ ├── FSTSerializer.java
│ ├── idea.md
│ ├── JRedis.md
│ ├── KryoTest.java
│ ├── lock.md
│ ├── magic.md
│ ├── Memcache.md
│ ├── script.md
│ ├── SpringCache.md
│ ├── suggest.md
│ ├── use.md
│ ├── wait.png
│ └── warning.md
├── LICENSE
├── pom.xml
└── README.md
251 directories, 216 files
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论