网站及系统建设维护,江西九江刚刚发生的新闻,如何做视频门户网站,北京微信网站制作电话缓存
本地缓存
本地缓存为了保证线程安全问题#xff0c;一般使用ConcurrentMap的方式保存在内存之中
分布式缓存。
常见的分布式缓存则有Redis#xff0c;MongoDB等。
一致性#xff1a;本地缓存由于数据存储于内存之中#xff0c;每个实例都有自己的副本#xff0c…
缓存
本地缓存
本地缓存为了保证线程安全问题一般使用ConcurrentMap的方式保存在内存之中
分布式缓存。
常见的分布式缓存则有RedisMongoDB等。
一致性本地缓存由于数据存储于内存之中每个实例都有自己的副本可能会存在不一致的情况分布式缓存则可有效避免这种情况开销本地缓存会占用JVM内存会影响GC及系统性能分布式缓存的开销则在于网络时延和对象序列化故主要影响调用时延适用场景本地缓存适用于数据量较小或变动较少的数据分布式缓存则适用于一致性要求较高及数量量大的场景(可弹性扩容) 本地缓存适用于数据量较小或变动较少的数据因为变动多需要考虑到不同实例的缓存一致性问题而数据量大则需要考虑缓存回收策略及GC相关的问题
Guava cache
Guava Cache 是Google Fuava中的一个内存缓存模块用于将数据缓存到JVM内存中。
提供了get、put封装操作能够集成数据源 线程安全的缓存与ConcurrentMap相似但前者增加了更多的元素失效策略后者只能显示的移除元素 Guava Cache提供了多种基本的缓存回收方式 监控缓存加载/命中情况 通常Guava缓存适用于以下情况
愿意花费一些内存来提高速度。使用场景有时会多次查询key。缓存将不需要存储超出RAM容量的数据
https://blog.csdn.net/why_still_confused/article/details/107138230
项目中应用
配置Guava缓存
Configuration
EnableCaching
public class GuavaConfig {/*** 默认过期时间60S*/private final int DEFAULT_TIME_OUT 60;/*** 默认缓存最大个数500*/private final int DEFAULT_MAXSIZE 500;Beanpublic CacheManager cacheManager() {GuavaCacheManager cacheManager new GuavaCacheManager();cacheManager.setCacheBuilder(CacheBuilder.newBuilder().expireAfterWrite(DEFAULT_TIME_OUT, TimeUnit.SECONDS).maximumSize(DEFAULT_MAXSIZE));return cacheManager;}}使用
在controller的方法上使用,如果一分钟内相同的参数进行请求都使用的是guava缓存中的内容 /** * 如果一分钟内相同的参数进行请求都使用的是guava缓存中的内容* 这里配置的key和value* param: ids* param: departmentId * return: AppDataResultListObject * date: 2021/9/29*/ GetMapping(queryUserList)Cacheable(value user, key api/user.ids:.concat(#ids null ? :#ids) .concat(departmentId:).concat(#departmentId null ? : #departmentId.toString()) )public AppDataResultListObject queryUserList(RequestParam String ids,Long departmentId) {//.......return null;}
以上
在controller的方法上使用,如果一分钟内相同的参数进行请求通过以上方法可大幅度提高接口请求效率但是有一定的缓冲时间数据可能不一致要注意数据时效性 在controller的方法上使用,如果一分钟内相同的参数进行请求通过以上方法可大幅度提高接口请求效率但是有一定的缓冲时间数据可能不一致要注意数据时效性、 在controller的方法上使用,如果一分钟内相同的参数进行请求通过以上方法可大幅度提高接口请求效率但是有一定的缓冲时间数据可能不一致要注意数据时效性