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

网站建设拟解决问题企业seo顾问公司

网站建设拟解决问题,企业seo顾问公司,软件定制开发企业,凡科建站快车登录文章目录使用场景Guava Cache 的优势Guava Cache使用CacheLoaderCallable删除主动删除过期删除基于容量删除引用删除高级用法并发设置更新锁定GuavaCache高级实战之疑难问题GuavaCache会oom#xff08;内存溢出#xff09;吗GuavaCache缓存到期就会立即清除吗GuavaCache如何找… 文章目录使用场景Guava Cache 的优势Guava Cache使用CacheLoaderCallable删除主动删除过期删除基于容量删除引用删除高级用法并发设置更新锁定GuavaCache高级实战之疑难问题GuavaCache会oom内存溢出吗GuavaCache缓存到期就会立即清除吗GuavaCache如何找出最久未使用的数据使用场景 随着互联网用户越来越多并发量、吞吐量越来越大 本地缓存的应用场景 对性能有非常高的要求不经常变化占用内存不大有访问整个集合的需求数据允许不时时一致 例如拉勾网首页由于首页经常被访问可以将职位信息java开发、大数据开发等放在本地缓存中。 guava cache高并发不需要持久化 currentHashMap高并发 Ehcached持久化 二级缓存 Guava Cache 的优势 缓存机制淘汰算法可参考博文本地缓存之LRU FIFO实现 缓存过期和淘汰机制LRU并发处理能力类似CurrentHashMap是线程安全的采用了分段锁机制将一个集合分成若干个人partiton 每个Patrtiton一把锁master多分区利用segement作分区更新锁定GuavaCache可以在CacheLoader的load方法中加以控制对同一个key只让一个请求去读源并回填缓存其他请求阻塞等待。.集成数据源而GuavaCache的get可以集成数据源在从缓存中读取不到时可以从数据源中读取数据并回填缓 存监控缓存加载/命中情况 Guava Cache使用 Cache创建 方法作用maximumSize容量expireAfterWrite缓存项在给定时间内没有被写访问创建或覆盖则回收recordStats缓存项在给定时间内没有被读/写访问则回收removalListener移除监听器weakKeys弱引用存储键当键没有其它强或软引用时缓存项可以被垃圾回收weakValues使用弱引用存储值。当值没有其它强或软引用时缓存项可以被垃圾回收concurrencyLevel并发操作 CacheLoader、Callable功能相同都是在调用get方法时候如果缓存不存在则指定数据源加载 CacheLoader 在创建缓存对象初始化时使用 模拟数据源 public static HashMapInteger, Integer sourceMap new HashMap();static {for (int i 0; i 10; i){sourceMap.put(i, i);}}使用demo public static void main(String[] args) throws ExecutionException {LoadingCacheObject, Object cache CacheBuilder.newBuilder().maximumSize(5).build(new CacheLoaderObject, Object() {Overridepublic Object load(Object o) throws Exception {return sourceMap.get(o);}});for (int i 0; i 10; i){cache.get(i);}System.out.println(cache.size());System.out.println(cache.asMap());}Callable 调用get方法时当缓存数据不存在时候从数据源加载数据 使用demo Testpublic void call() throws ExecutionException {CacheObject, Object cache CacheBuilder.newBuilder().maximumSize(5).build();Object value cache.get(1, new CallableInteger() {Overridepublic Integer call() throws Exception {return sourceMap.get(1);}});System.out.println(value);}删除 主动删除 Testpublic void doDel() throws ExecutionException {LoadingCacheObject, Object cache CacheBuilder.newBuilder().maximumSize(5).expireAfterAccess(3, TimeUnit.SECONDS).build(new CacheLoaderObject, Object() {Overridepublic Object load(Object o) throws Exception {return sourceMap.get(o);}});initCache(cache);//主动删除 key为1cache.invalidate(1);System.out.println(主动删除);displayCache(cache);// 批量删除cache.invalidateAll(Arrays.asList(1,2));System.out.println(批量删除);displayCache(cache);}过期删除 expireAfterAccess如果在一定时间内没被访问则数据过期 Testpublic void expireTimeDel() throws ExecutionException, InterruptedException {LoadingCacheObject, Object cache CacheBuilder.newBuilder().maximumSize(5).expireAfterAccess(3, TimeUnit.SECONDS).build(new CacheLoaderObject, Object() {Overridepublic Object load(Object o) throws Exception {return sourceMap.get(o);}});initCache(cache);Thread.sleep(1000);cache.getIfPresent(1);Thread.sleep(2000);displayCache(cache);}基于容量删除 Testpublic void sizeDel() throws ExecutionException {LoadingCacheObject, Object cache CacheBuilder.newBuilder().maximumSize(1).build(new CacheLoaderObject, Object() {Overridepublic Object load(Object o) throws Exception {return sourceMap.get(o);}});Object v cache.get(1);System.out.println(v);//自动删除1Object v2 cache.get(2);displayCache(cache);}引用删除 开启weakValues功能采用弱引用对引用不了解的可以看看我的文章 Testpublic void referenceDel(){CacheObject, Object cache CacheBuilder.newBuilder().maximumSize(3).weakValues().build();cache.put(1,new Object());//强制垃圾回收System.gc();System.out.println(cache.getIfPresent(1));}高级用法 并发设置 设置 concurrencyLevel 使得缓存支持并发的写入和读取 CacheObject, Object cache CacheBuilder.newBuilder().maximumSize(3).concurrencyLevel(Runtime.getRuntime().availableProcessors()).build();更新锁定 GuavaCache提供了一个refreshAfterWrite定时刷新数据的配置项如果经过一定时间没有更新或覆盖则会在下一次获取该值的时候会在后台异步去刷新缓存 刷新时只有一个请求回源取数据其他请求会阻塞(block)在一个固定时间段如果在该时间段内没有获得新值则返回旧值。 Testpublic void refresh() throws InterruptedException, ExecutionException {LoadingCacheInteger, Integer cache CacheBuilder.newBuilder().maximumSize(3).concurrencyLevel(Runtime.getRuntime().availableProcessors()).refreshAfterWrite(3, TimeUnit.SECONDS).build(new CacheLoaderInteger, Integer() {Overridepublic Integer load(Integer key) throws Exception {return sourceMap.get(key);}});cache.get(1);System.out.println(第一次取值 cache.getIfPresent(1));sourceMap.put(1, 10);Thread.sleep(5000);System.out.println(第二次取值 cache.getIfPresent(1));}应用场景accesstoken token失效 从公网拿token 采用更新锁定 GuavaCache高级实战之疑难问题 GuavaCache会oom内存溢出吗 会当我们设置缓存永不过期或者很长缓存的对象不限个数或者很大时比如 CacheString, String cache CacheBuilder.newBuilder() .expireAfterWrite(100000, TimeUnit.SECONDS) .build();解决方案缓存时间设置相对小些使用弱引用方式存储对象 GuavaCache缓存到期就会立即清除吗 不是的GuavaCache是在每次进行缓存操作的时候如get()或者put()的时候判断缓存是否过期。 一个如果一个对象放入缓存以后不在有任何缓存操作包括对缓存其他key的操作那么该缓存不 会主动过期的。 GuavaCache如何找出最久未使用的数据 用accessQueue这个队列是按照LRU的顺序放的缓存对象(ReferenceEntry)的会把访问过的对象放在队列的最后。 并且可以很方便的更新和删除链表中的节点因为每次访问的时候都可能需要更新链表放入到链表的尾部。 这样每次从access中拿出的头结点就是最久未使用的。 对应的writeQueue用来保存最久未更新的缓存队列实现方式和accessQueue一样。 其他比较好的文章推荐 中文教程 Guava总结好的博客
http://www.sadfv.cn/news/204914/

相关文章:

  • 阿里绿网网站违规做网站横幅的图片多大
  • 著名的设计企业网站哪个餐饮店微网站做的有特色
  • 设计培训网站建设猎头
  • 有九类商标可以做网站名吗网站备案制作
  • 腾讯网站建设方案关于我们页面模板
  • 青州网站搭建微信公众号 做不了微网站吗
  • 南阳做做网站上海传媒公司李闪闪身价
  • 做手机网站要多少钱网页视频提取
  • 1.2婚庆网站建设的目的如何申请开通网站
  • 网站设计分析报告网站规划文档
  • 网站建设端口深圳全网推广排名
  • 网站seo具体怎么做wordpress代码高亮在线转换工具
  • 百度怎么验证网站长沙装修公司有哪些
  • ps做网站主页的效果图宁波seo排名优化哪家好
  • 长春做网站优化哪家好wordpress文章内容调用
  • 黄页推广网站网站开发工程师任职要求
  • 电子商务网站发展建设有没有帮忙做网站
  • 单一产品网站如何做seo做网站需要几步
  • php做教育网站网站建设的开题报告
  • 自己做的优惠卷网站怎么进商品项目建设管理办法
  • 南昌seo网站开发简单网页模板
  • seo站外推广微网站页面
  • 卖汽车怎么做网站做字幕模板下载网站有哪些
  • 保定比较好的网站建设公司建网站买的是什么
  • 绍兴市交通建设有限公司网站外国的html 素材网站
  • 深圳做个商城网站设计php网站开发实例教程 源代码
  • 阿克苏市建设局网站广元市住房和城乡建设局网站
  • Hdi做指数网站seo属于运营还是技术
  • 东莞做网站软件网上购物网站建设方案
  • 做网站fjfzwl263企业邮箱手机版