当前位置: 首页 > news >正文

网站单页在线网站建设公司不让放自己空间站

网站单页在线,网站建设公司不让放自己空间站,网站认领,lnmp一键包wordpress手打不易#xff0c;如果转摘#xff0c;请注明出处#xff01; 注明原文#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/129832925 目录 前言 版本 配置通用说明 项目结构 代码 启动类 实体类 基础使用——增删改查#xff08;Cached、CacheInv…手打不易如果转摘请注明出处 注明原文https://zhangxiaofan.blog.csdn.net/article/details/129832925 目录 前言 版本 配置通用说明 项目结构 代码 启动类 实体类 基础使用——增删改查Cached、CacheInvalidate、CacheUpdate 基础使用——CreateCache注解和手动方式 基础使用——CacheRefresh 详解 前言 最近有个项目用到jetcache正好用到加上spring-boot在使用jetcache的时候会有一些需要注意的坑下面通过基础使用来给大家简单介绍。 下面有一些示例代码都有注释这些注释可以仔细阅读一下 版本 本篇的jetcache、jedis等版本如下 dependencygroupIdcom.alicp.jetcache/groupIdartifactIdjetcache-starter-redis/artifactIdversion2.7.3/version /dependency dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion4.1.0/version /dependency 完整的maven的pom.xml如下 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdspring-boot-redis-jetcache-base/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingnamespring-boot-redis-jetcache-base/nameparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.6/versionrelativePath/ !-- lookup parent from repository --/parentpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.8/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactIdexclusionsexclusionartifactIdaspectjweaver/artifactIdgroupIdorg.aspectj/groupId/exclusion/exclusions/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.5/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.10/version/dependencydependencygroupIdcom.alicp.jetcache/groupIdartifactIdjetcache-starter-redis/artifactIdversion2.7.3/version/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion4.1.0/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion2.0.25/version/dependencydependencygroupIdcom.esotericsoftware/groupIdartifactIdkryo/artifactIdversion5.4.0/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.1.0.RELEASE/version/plugin/plugins/build /project配置文件 application.yml 如下  server:servlet:context-path: /port: 8081# 官方表示,不会支持 redisson 客户端, 仅支持 jedis 和 lettuce 链接:https://github.com/alibaba/jetcache/issues/634 jetcache:statIntervalMinutes: 10 # 默认值0,统计间隔0表示不统计areaInCacheName: false # 默认值false, 是否将 areaName 作为远程缓存key前缀# 本地local:# 默认分组配置,可以创建多个,对应Cached和CreateCache的 area 属性, 默认名就是 defaultdefault:type: caffeine # 可选 linkedhashmap,caffeinekeyConvertor: fastjson # 指定KEY的转换方式, 可选 fastjson2,fastjson,jackson# 远程remote:default:type: rediskeyConvertor: fastjson # 指定KEY的转换方式, 可选 fastjson2,fastjson,jacksonvalueEncoder: java # 可选 java,kryo,kryo5valueDecoder: java # 可选 java,kryo,kryo5poolConfig:minIdle: 5maxIdle: 20maxTotal: 50host: 127.0.0.1port: 6379password: 123456 配置通用说明 参考官网https://github.com/alibaba/jetcache/blob/master/docs/CN/Config.md 属性默认值说明jetcache.statIntervalMinutes0统计间隔0表示不统计jetcache.areaInCacheNametrue(2.6-) false(2.7)jetcache-anno把cacheName作为远程缓存key前缀2.4.3以前的版本总是把areaName加在cacheName中因此areaName也出现在key前缀中。2.4.4以后可以配置为了保持远程key兼容默认值为true但是新项目的话false更合理些2.7默认值已改为false。jetcache.hiddenPackages无Cached和CreateCache自动生成name的时候为了不让name太长hiddenPackages指定的包名前缀被截掉jetcache.[local/remote].${area}.type无缓存类型。tair、redis为当前支持的远程缓存linkedhashmap、caffeine为当前支持的本地缓存类型jetcache.[local/remote].${area}.keyConvertorfastjson2key转换器的全局配置2.6.5已经支持的keyConvertorfastjson2/jackson 2.6.5-只有一个已经实现的keyConvertorfastjson。仅当使用CreateCache且缓存类型为LOCAL时可以指定为none此时通过equals方法来识别key。方法缓存必须指定keyConvertorjetcache.[local/remote].${area}.valueEncoderjava序列化器的全局配置。仅remote类型的缓存需要指定2.7可选java/kryo/kryo52.6-可选java/kryojetcache.[local/remote].${area}.valueDecoderjava序列化器的全局配置。仅remote类型的缓存需要指定2.7可选java/kryo/kryo52.6-可选java/kryojetcache.[local/remote].${area}.limit100每个缓存实例的最大元素的全局配置仅local类型的缓存需要指定。注意是每个缓存实例的限制而不是全部比如这里指定100然后用CreateCache创建了两个缓存实例并且注解上没有设置localLimit属性那么每个缓存实例的限制都是100jetcache.[local/remote].${area}.expireAfterWriteInMillis无穷大以毫秒为单位指定超时时间的全局配置(以前为defaultExpireInMillis)jetcache.remote.${area}.broadcastChannel无jetcahe2.7的两级缓存支持更新以后失效其他JVM中的local cache但多个服务共用redis同一个channel可能会造成广播风暴需要在这里指定channel你可以决定多个不同的服务是否共用同一个channel。如果没有指定则不开启。jetcache.local.${area}.expireAfterAccessInMillis0需要jetcache2.2以上以毫秒为单位指定多长时间没有访问就让缓存失效当前只有本地缓存支持。0表示不使用这个功能。 项目结构 代码 启动类 import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; import com.alicp.jetcache.anno.config.EnableMethodCache;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling;SpringBootApplication // 开启 Cache EnableMethodCache(basePackages com.myjetcache) // 如果不用CreateCache注解可以删除 EnableCreateCacheAnnotation EnableCreateCacheAnnotation EnableScheduling public class SpringJetCacheApplication {public static void main(String[] args) {SpringApplication.run(SpringJetCacheApplication.class, args);} } 实体类 Data public class Student implements Serializable {private static final long serialVersionUID 1L;private static final Random RANDOM new Random();/*** 当对象只包含基本数据类型的时候,RADM工具可以直接展示数据. 非基本数据类型的字段, 默认不会展示.*/private Integer id;private String name;private Integer age;public static Student getStudent(String id) {Student student new Student();student.setId(Integer.parseInt(id));student.setName(UUID.randomUUID().toString().substring(0, 3));student.setAge(RANDOM.nextInt(9999));return student;} } 基础使用——增删改查Cached、CacheInvalidate、CacheUpdate 先定义接口 public interface JetCacheBaseService {Student add(Student student);void delete(Long id);void update(Student student);Student get(Long id);Student get(Long id, boolean isUseCache); }写好实现类 需注意的点 Cached——[增] 注意点 由于我们是在方法上使用该注解缓存的是方法 return 的数据因此方法返回类型不能是 void缓存执行的是 com.alicp.jetcache.Cache#PUT() , 接口默认是异步存储  CacheInvalidate——[删] 注意点方法执行后,再删除 CacheUpdate——[改] 注意点方法执行后,再修改作者说明: https://github.com/alibaba/jetcache/issues/115 Cached——[查] 注意点 先查缓存,无缓存则走方法如果注解配合 condition 属性那么 conditiontrue: 查缓存, 无缓存则走方法conditionfalse: 不查缓存, 直接执行方法(查数据库) Slf4j Service public class JetCacheBaseServiceImpl implements JetCacheBaseService {private final Random random new Random();/*** 增 Cached* 缓存执行的是 com.alicp.jetcache.Cache#PUT() , 接口默认是异步存储** param student spel表达式取值* return 待缓存的的数据注意,这个返回值不能void*/OverrideCached(area default, name my:jetcache:, key #student.id, cacheType CacheType.BOTH,expire 3600, localExpire 10, timeUnit TimeUnit.SECONDS, cacheNullValue false)public Student add(Student student) {log.info(student:{}, JSON.toJSONString(student));return student;}/*** 删 CacheInvalidate* 方法执行后,再删除,作者 huangli 表示也不会增加这个功能选项, 自主控制粒度即可*/OverrideCacheInvalidate(name my:jetcache:, key #id)public void delete(Long id) {log.info(delete);}/*** 改 CacheUpdate* 方法执行后,再修改. 作者说明:https://github.com/alibaba/jetcache/issues/115*/OverrideCacheUpdate(name my:jetcache:, key #student.id, value #student)public void update(Student student) {log.info(update:{}, JSON.toJSONString(student));}/*** 查* 先查缓存,无缓存则走方法*/OverrideCached(name my:jetcache:, key #id)public Student get(Long id) {log.info(load from db);// 当缓存不存在, 模拟从数据库查询return loadFromDb(id);}/*** 查* conditiontrue: 查缓存, 无缓存则走方法* conditionfalse: 不查缓存, 直接执行方法(查数据库)*/OverrideCached(name my:jetcache:, key #id, condition #isUseCachetrue)public Student get(Long id, boolean isUseCache) {// 当 isUseCache 为 false, 或者 缓存不存在的时候, 插叙数据库log.info(load from db, isUseCache:{}, isUseCache);// 当缓存不存在, 模拟从数据库查询return loadFromDb(id);}/*** 模拟从数据库查询*/private Student loadFromDb(Long id) {Student student new Student();student.setId(Math.toIntExact(id));student.setName(load from db);student.setAge(random.nextInt(100));return student;} } 基础使用——CreateCache注解和手动方式 由于 CreateCache 以及标记为Deprecated了这里优先将手动方式 我们先看下属性说明 CreateCache属性表 参考官网Link:https://github.com/alibaba/jetcache/blob/master/docs/CN/CreateCache.md#createcache%E5%B1%9E%E6%80%A7%E8%A1%A8 属性默认值说明area“default”如果需要连接多个缓存系统可在配置多个cache area这个属性指定要使用的那个area的namename未定义指定缓存的名称不是必须的如果没有指定会使用类名方法名。name会被用于远程缓存的key前缀。另外在统计中一个简短有意义的名字会提高可读性。如果两个CreateCache的name和area相同它们会指向同一个Cache实例expire未定义该Cache实例的默认超时时间定义注解上没有定义的时候会使用全局配置如果此时全局配置也没有定义则取无穷大timeUnitTimeUnit.SECONDS指定expire的单位cacheTypeCacheType.REMOTE缓存的类型包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定义为BOTH会使用LOCAL和REMOTE组合成两级缓存localLimit未定义如果cacheType为CacheType.LOCAL或CacheType.BOTH这个参数指定本地缓存的最大元素数量以控制内存占用。注解上没有定义的时候会使用全局配置如果此时全局配置也没有定义则取100serialPolicy未定义如果cacheType为CacheType.REMOTE或CacheType.BOTH指定远程缓存的序列化方式。JetCache内置的可选值为SerialPolicy.JAVA和SerialPolicy.KRYO。注解上没有定义的时候会使用全局配置如果此时全局配置也没有定义则取SerialPolicy.JAVAkeyConvertor未定义指定KEY的转换方式用于将复杂的KEY类型转换为缓存实现可以接受的类型JetCache内置的可选值为KeyConvertor.FASTJSON和KeyConvertor.NONE。NONE表示不转换FASTJSON通过fastjson将复杂对象KEY转换成String。如果注解上没有定义则使用全局配置。 先定义接口 public interface CreateCacheUseMethodService {CacheString, String getStringMethodCache(); } 注意实现类有下面几个要注意的地方 refresh属性功能必须要 QuickConfig 显示创建不要用 cache.config().setRefreshPolicy() 否则可能会出现无效的情况cache.config().setLoader() 加载器会遍历每一个key并执行这个加载器缓存没有key的时候是不会执行的首次 set/get 都会创建 key 由于refresh 会用加载器刷新所有key那么一定要设置 stopRefreshAfterLastAccess表示多久不使用对应的key缓存则会停止刷新。本地缓存的时间 远程缓存的时间缓存refresh的时间可以接近远程缓存时间也可以大于它 代码如下可以仔细阅读注释 import com.alicp.jetcache.Cache; import com.alicp.jetcache.CacheManager; import com.alicp.jetcache.RefreshPolicy; import com.alicp.jetcache.anno.CacheType; import com.alicp.jetcache.template.QuickConfig; import com.myjetcache.service.CreateCacheUseMethodService;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.time.Duration; import java.util.UUID;import javax.annotation.PostConstruct;Slf4j Service public class CreateCacheUseMethodServiceImpl implements CreateCacheUseMethodService {Autowiredprivate CacheManager cacheManager;private CacheString, String stringMethodCache;PostConstructpublic void init() {// 注意必须要refreshPolicy() ,才能创建 RefreshCache, 否则自动刷新功能无效QuickConfig quickConfigStringCache QuickConfig.newBuilder(myStringCache:use:method:) // 缓存的前缀.cacheType(CacheType.BOTH) // local 和 remote 组合成两级缓存.expire(Duration.ofSeconds(3600)) // 远程过期时间.localExpire(Duration.ofSeconds(5)) // 本地过期时间, 应该小于远程过期时间, 只对CacheType.LOCAL和CacheType.BOTH有效.localLimit(1000) // 本地缓存的最大元素数量, 默认:100.cacheNullValue(false) // 是否缓存 NULL 值.refreshPolicy(getRefreshPolicy()) // 这里必须显式创建, 不要使用 cache.config().setRefreshPolicy(), 否则无效.build();stringMethodCache cacheManager.getOrCreateCache(quickConfigStringCache);// 刷新执行的加载器, 会遍历刷新每一个keystringMethodCache.config().setLoader(this::loadFromDb);}/*** 创建刷新策略* 等于注解:CacheRefresh(refresh 10, refreshLockTimeout 10, stopRefreshAfterLastAccess 3600, timeUnit TimeUnit.SECONDS)*/private RefreshPolicy getRefreshPolicy() {RefreshPolicy refreshPolicy new RefreshPolicy();// 刷新时间间隔refreshPolicy.setRefreshMillis(10 * 1000L);// 类型为 BOTH/REMOTE 的缓存刷新时同时只会有一台服务器在刷新这台服务器会在远程缓存放置一个分布式锁此配置指定该锁的超时时间// 不管有多少台服务器,同时只有一个服务器在刷新,这是通过 tryLock 实现的refreshPolicy.setRefreshLockTimeoutMillis(10 * 1000);// 指定多久未访问后停止自动刷新。 注意:不指定则会一直刷新refreshPolicy.setStopRefreshAfterLastAccessMillis(3600 * 1000);return refreshPolicy;}/*** 刷新执行的加载器* 每个key都有一个刷新任务, 因此必须设置 stopRefreshAfterLastAccess* 注意: 没有key则不会定时执行数据库加载器, 首次 get/set 都相当于创建了key** param key 刷新的key*/public String loadFromDb(String key) {// 模拟从数据库读取数据String uuid UUID.randomUUID().toString();log.info([Use Method] key:{},load cache form db:{}, key, uuid);return uuid;}Overridepublic CacheString, String getStringMethodCache() {return stringMethodCache;} } 上面是手动创建接下来我们看下如何使用注解 CreateCache 创建不建议使用该注解因为被作者标记为过期 Deprecated 了 先定义一个接口 public interface CreateCacheUseAnnotationService {CacheString, String getStringCache(); }实现类如下注解的属性跟上面手动方式的属性可以对应可以看上面代码的注解。 import com.alicp.jetcache.Cache; import com.alicp.jetcache.anno.CacheRefresh; import com.alicp.jetcache.anno.CacheType; import com.alicp.jetcache.anno.CreateCache; import com.myjetcache.service.CreateCacheUseAnnotationService;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;import java.util.UUID; import java.util.concurrent.TimeUnit;import javax.annotation.PostConstruct;Slf4j Service public class CreateCacheUseAnnotationServiceImpl implements CreateCacheUseAnnotationService {/*** 注解方式* local 失效后, 会从 redis 查, redis 也没有则会执行数据库加载器*/CreateCache(name myStringCache:use:annotation:, cacheType CacheType.BOTH, expire 3600, localExpire 5,localLimit 1000)CacheRefresh(refresh 20, refreshLockTimeout 10, stopRefreshAfterLastAccess 3600, timeUnit TimeUnit.SECONDS)private CacheString, String stringCache;PostConstructpublic void init() {// 1.cache.get(),如果local和redis都没有缓存, 则会执行数据库加载器 loadFromDb()// 2.定时刷新刷新的加载器, 会为每一个key创建刷新任务; 注意: 没有key则不会定时执行数据库加载器, 首次 get/set 都相当于创建了keystringCache.config().setLoader(this::loadFromDb);}/*** 刷新执行的加载器,jetcache会为每个key都会创建一个刷新任务, 因此必须设置 stopRefreshAfterLastAccess, 否则内存消耗太大** param key 刷新的key*/public String loadFromDb(String key) {// 模拟从数据库读取数据String uuid UUID.randomUUID().toString();log.info([Use Annotation] key:{},load cache form db:{}, key, uuid);return uuid;}Overridepublic CacheString, String getStringCache() {return stringCache;} }基础使用——CacheRefresh 详解 需要注意的点如下 注意 CacheRefresh 会为每个key创建定时任务, 定时来执行这个方法 官方文档:1.目的是为了防止缓存失效时造成的雪崩效应打爆数据库 2.对key比较少,实时性要求不高,加载开销非常大的缓存场景,适合使用自动刷新 CacheRefresh 刷新机制:1.如果 CacheType.LOCAL ,那么多个节点会重复刷新。 2.如果 CacheType.REMOTE ,通过在远程缓存中的分布式锁_#TS#,保证一个周期内只有一个节点执行了刷新操作. 3.如果 CacheType.BOTH ,即两级缓存,通过在远程缓存中的分布式锁,保证一个周期内只有一个节点执行了刷新操作.注意:仅更新REMOTE,其节点的本地缓存不会更新.jetcache支持给远程和本地缓存设置不同的超时时间所以可以把本地缓存的超时时间设置短一点. CachePenetrationProtect 注解作用——当缓存访问【未命中】的情况下,对并发进行的加载行为进行保护当前版本实现的是单JVM内的保护即同一个JVM中同一个key只有一个线程去加载其它线程等待结果 具体代码如下 public interface RefreshService {String getRefreshStringCache(String key);Student getRefreshMapCache(Object obj); }实现类  import com.alibaba.fastjson.JSON; import com.alicp.jetcache.anno.CachePenetrationProtect; import com.alicp.jetcache.anno.CacheRefresh; import com.alicp.jetcache.anno.CacheType; import com.alicp.jetcache.anno.Cached; import com.myjetcache.entity.Student; import com.myjetcache.service.RefreshService;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;import java.util.Random; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger;Slf4j Service public class RefreshServiceImpl implements RefreshService {private final Random random new Random();private final AtomicInteger atomicInteger new AtomicInteger(0);/*** 注意 CacheRefresh 会为每个key创建定时任务, 定时来执行这个方法* 官方文档:* 1.目的是为了防止缓存失效时造成的雪崩效应打爆数据库* 2.对key比较少,实时性要求不高,加载开销非常大的缓存场景,适合使用自动刷新* p* CacheRefresh 刷新机制:* 1.如果 CacheType.LOCAL ,那么多个节点会重复刷新。* 2.如果 CacheType.REMOTE ,通过在远程缓存中的分布式锁_#TS#,保证一个周期内只有一个节点执行了刷新操作.* 3.如果 CacheType.BOTH ,即两级缓存,通过在远程缓存中的分布式锁,保证一个周期内只有一个节点执行了刷新操作.* 注意:仅更新REMOTE,其节点的本地缓存不会更新.jetcache支持给远程和本地缓存设置不同的超时时间所以可以把本地缓存的超时时间设置短一点.* p* CachePenetrationProtect 注解:* 当缓存访问【未命中】的情况下,对并发进行的加载行为进行保护.* 当前版本实现的是单JVM内的保护即同一个JVM中同一个key只有一个线程去加载其它线程等待结果** param key 缓存的 key* return 缓存的 value*/OverrideCached(name my:refresh:stringCache., key #key, cacheNullValue true, cacheType CacheType.BOTH,expire 3600, localExpire 60, timeUnit TimeUnit.SECONDS)CacheRefresh(timeUnit TimeUnit.SECONDS, refresh 10, refreshLockTimeout 10, stopRefreshAfterLastAccess 3600)CachePenetrationProtectpublic String getRefreshStringCache(String key) {String value;// 模拟查询数据库, 首次查询返回 null, 以后每次查询,如果缓存不存在,则返回 随机uuidif (atomicInteger.get() 0) {atomicInteger.addAndGet(1);value null;} else {// 每隔10秒就会刷新新的uuid到 本地和redisvalue UUID.randomUUID().toString();}log.info(return value:{}, value);return value;}/*** Map结构的SpEL表达式参考下面的写法* 入参是的 SpEL是 key* return 是存储的 value*/OverrideCached(area default, name my:jetcache:, key #obj[id], cacheType CacheType.BOTH,expire 3600, localExpire 60, timeUnit TimeUnit.SECONDS, cacheNullValue false)CacheRefresh(timeUnit TimeUnit.SECONDS, refresh 10, refreshLockTimeout 10, stopRefreshAfterLastAccess 3600)CachePenetrationProtectpublic Student getRefreshMapCache(Object obj) {log.info(obj:{}, JSON.toJSONString(obj));Student student Student.getStudent(String.valueOf(random.nextInt(100)));log.info(after refresh:{}, JSON.toJSONString(student));return student;} }测试类 RestController Slf4j public class RefreshController {private final Random random new Random();Autowiredprivate RefreshService refreshService;GetMapping(/refreshstringcache/get)public String getStringCache() {String stringCache refreshService.getRefreshStringCache(myStringCache);log.info(stringCache);return stringCache;}GetMapping(/getrefreshmapcache/get)public Student getRefreshMapCache() {MapString, Object body new HashMap();body.put(userId, 1);body.put(id, 123);return refreshService.getRefreshMapCache(body);} } 上面代码是Jetcache的简单自测满足一般的业务开发如果更深入的了解请到官网学习https://github.com/alibaba/jetcache/blob/master/docs/CN/Readme.md
http://www.zqtcl.cn/news/906884/

相关文章:

  • 做类似猪八戒网的网站注册一个商标多少钱
  • 怎么提高网站访问速度wordpress怎么备份按在
  • 淘宝网站是谁做的好处wordpress商业授权
  • 淘宝客网站怎么批量采集淘宝商品方维采集淘宝数据思路珠宝类网站建设
  • 重庆网站关键字优化雅布设计中国分公司在哪里
  • 山西做网站费用温州做网站制作
  • 购买域名后 可以做网站么苏州市建设厅网站
  • 网站域名如何查询win7优化配置的方法
  • 免费建网站的服务器佛山城市建设工程有限公司
  • 安溪人做的网站wordpress 单页面 主题
  • 品牌型网站设计创意 国外 网站
  • o2o网站建设包括哪些平面设计作品欣赏
  • 万齐网站建设成都旅游攻略自由行攻略地图
  • 新网做网站流程app下载汅api未满入内
  • 邓州网站建设建设摩托车价格大全
  • 关闭网站怎么不保存我做的更改软件工程师英文
  • 垦利网站定制提供哈尔滨网站建设服务
  • 谷歌在线浏览器入口seo内容优化是什么意思
  • 新闻门户网站免费建设西安做企业网站哪家做的好
  • 湘潭网站建设 w磐石网络安徽省工程建设信息网官方网站
  • 移动端网站开发教程局网站建设工作征求意见
  • 浙江网站建设公司地址南京做电商网站的公司
  • 网上销售型的企业网站建行个人手机银行
  • 网站建设与规划方案书网站建设策划有哪些
  • 手机网站建设推广方案ppt模板单页企业官网模板
  • 荥阳网站建设多少钱长沙企业关键词优化哪家好
  • 网站购物流程模块怎么实现最新足球赛事
  • 网站建设后需要维护吗网站规划的案例
  • 北京造价员变更在哪个网站做免费域名申请入口
  • 百度免费收录提交入口seo wordpress theme