大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 在服务端开发中,缓存常常被当做系统性能扛压的不二之选。在实施方案上,缓存使用策略虽有一定普适性,却也并非完全绝对,需要结合实际的项目诉求与场景进行综合权衡与考量,进而得出符合自己项目的最佳实践。 缓存使用的演进 现有这么一个系统: 一个互动论坛系统,用户登录系统之后,可以在论坛上查看帖子列表、查看帖子详情、发表帖子、评论帖子、为帖子点赞等操作。 系统中所有的配置数据与业务数据均存储在数据库中。随着业务的发展,注册用户量越...

  dJabG7kv7ebg   2023年11月01日   42   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 在上一篇文档《聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活》中,我们对缓存的庞大体系进行了个初步的探讨,浮光掠影般的介绍了本地缓存、集中缓存、多级缓存的不同形式,也走马观花似的初识了缓存设计的关键原则与需要关注的典型问题。 作为《深入理解缓存原理与实战设计》系列专栏的第二篇内容,从本篇开始,我们将聚焦缓存体系中的具体场景,分别进行深入的阐述与探讨。本篇我们就一起具体地聊一聊缓存使用中需要关注的典型问题与可靠...

  dJabG7kv7ebg   2023年11月01日   65   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过《深入理解缓存原理与实战设计》系列专栏的前两篇内容,我们介绍了缓存的整体架构、设计规范,也阐述了缓存的常见典型问题及其使用策略。作为该系列的第三篇文章,本篇我们将一起探讨下项目中本地缓存的各种使用场景与应对实现策略——也通过本篇介绍的几个本地缓存的实现策略与关键特性的支持,体会到本地缓存使用与构建的关注要点,也作为我们下一篇文章要介绍的手写本地缓存通用框架的铺垫。 本地缓存的递进史 从本质上来说,缓存其实就是一堆数据的...

  dJabG7kv7ebg   2023年11月01日   52   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 村上春树有本著名的小说名叫《当我谈跑步时我谈些什么》,讲述了一个人怎么样通过跑步去悟道出人生的很多哲理与感悟。而读书的价值,就是让我们可以将别人参悟出的道理化为己用,将别人走过的路化为充实自己的养料。 在上一篇文章《手写本地缓存实战1——各个击破,按需应对实际使用场景》中,我们领略了实际项目中一些零散的缓存场景的实现方式,并对缓存实现中的LRU淘汰策略、TTL过期清理机制实现方案进行了探讨。作为《深入理解缓存原理与实战设计》...

  dJabG7kv7ebg   2023年11月01日   69   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 有诗云“纸上得来终觉浅,绝知此事要躬行”,在上一篇文章《手写本地缓存实战2——打造正规军,构建通用本地缓存框架》中,我们一起论证并逐步实现了一套简化版本的通用本地缓存框架,并在过程中逐步剖析了缓存设计关键要素的实现策略。本篇文章中,我们一起来聊一聊缓存框架实现所需要遵循的规范。 为何需要规范 上一章中构建的最简化版本的缓存框架,虽然可以使用,但是也存在一个问题,就是它对外提供的实现接口都是框架根据自己的需要而自定义的。这样一...

  dJabG7kv7ebg   2023年11月01日   123   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 不知不觉,这已经是《深入理解缓存原理与实战设计》系列专栏的第6篇文章了。经过前面5篇文章的铺垫,我们系统且全面的介绍了缓存相关的概念与典型问题,也手动实操了如何构建一个本地最简版本的通用缓存框架,还对JAVA主流的本地缓存规范进行了解读。 秉持着不重复造轮子的理念,本篇文章中,我们就来一起深入剖析JAVA本地缓存的优秀“轮子”——来自Google家族的GuavaCache。聊一聊其实现机制、看一看如何使用。 GuavaCa...

  dJabG7kv7ebg   2023年11月01日   35   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过《重新认识下JVM级别的本地缓存框架GuavaCache——优秀从何而来》一文,我们知道了GuavaCache作为JVM级别的本地缓存组件的诸多暖心特性,也一步步地学习了在项目中集成并使用GuavaCache进行缓存相关操作。GuavaCache作为一款优秀的本地缓存组件,其内部很多实现机制与设计策略,同样值得开发人员深入的掌握与借鉴。 作为系列专栏,本篇文章我们将在上一文的基础上,继续探讨下GuavaCache对于缓存...

  dJabG7kv7ebg   2023年11月01日   44   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过《重新认识下JVM级别的本地缓存框架GuavaCache——优秀从何而来》一文,我们知道了GuavaCache作为JVM级别的本地缓存组件的诸多暖心特性,也一步步地学习了在项目中集成并使用GuavaCache进行缓存相关操作。GuavaCache作为一款优秀的本地缓存组件,其内部很多实现机制与设计策略,同样值得开发人员深入的掌握与借鉴。 作为系列专栏,本篇文章我们将进一步探讨下GuavaCache实现层面的一些逻辑与设计...

  dJabG7kv7ebg   2023年11月01日   64   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 在前面的几篇文章中,我们一起聊了下本地缓存的动手实现、本地缓存相关的规范等,也聊了下Google的GuavaCache的相关原理与使用方式。比较心急的小伙伴已经坐不住了,提到本地缓存,怎么能不提一下“地上最强”的CaffeineCache呢? 能被小伙伴称之为“地上最强”,可见Caffeine的魅力之大!的确,提到JAVA中的本地缓存框架,Caffeine是怎么也没法轻视的重磅嘉宾。前面几篇文章中,我们一起探索了JVM级别...

  dJabG7kv7ebg   2023年11月01日   85   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 上一篇文章中,我们继GuavaCache之后,又认识了青出于蓝的Caffeine。作为一种对外提供黑盒缓存能力的专门组件,Caffeine基于穿透型缓存模式进行构建。也即对外提供数据查询接口,会优先在缓存中进行查询,若命中缓存则返回结果,未命中则尝试去真正的源端(如:数据库)去获取数据并回填到缓存中,返回给调用方。 与GuavaCache相似,Caffeine的回源填充主要有两种手段: Callable方式 CacheL...

  dJabG7kv7ebg   2023年11月01日   55   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 上一篇文章中,我们聊了下Caffeine的同步、异步的数据回源方式。本篇文章我们再一起研讨下Caffeine的多种不同的数据淘汰驱逐机制,以及对应的实际使用。 Caffeine的异步淘汰清理机制 在惰性删除实现机制这边,Caffeine做了一些改进优化以提升在并发场景下的性能表现。我们可以和GuavaCache的基于容量大小的淘汰处理做个对比。 当限制了GuavaCache最大容量之后,有新的记录写入超过了总大小,会理解触...

  dJabG7kv7ebg   2023年11月01日   59   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 作为《深入理解缓存原理与实战设计》系列专栏,前面几篇文章中我们详细的介绍与探讨了GuavaCache与Caffeine的实现、特性与使用方式。提到JAVA本地缓存框架,还有一个同样无法被忽视的强大存在——Ehcache!它最初是由GregLuck于2003年开始开发,截止目前,Ehcache已经演进到了3.10.0版本,各方面的能力已经构建的非常完善。Ehcache官网上也毫不谦虚的描述自己是“Java'smostwidel...

  dJabG7kv7ebg   2023年11月01日   32   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 在上一篇文章《JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来——感受来自Ehcache的强大实力》中,介绍了Ehcache所具有的核心优秀特性,如数据持久化、多级缓存、集群能力等等。所谓纸上得来终觉浅、绝知此事要躬行,接下来我们就一起动手实践下,在项目中集成Ehcache并体验Ehcache的各种常见用法。 Ehcache的依赖集成与配置 依赖引入 集成使用Ehcache的第一步,就是要引入对应的依赖包。对于...

  dJabG7kv7ebg   2023年11月01日   35   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 上一篇文章中,我们知晓了如何在项目中通过不同的方式来集成Ehcache并在业务逻辑中进行使用。作为JAVA本地缓存框架综合实力天花板级别的Ehcache,除了在本地缓存方面具有强悍的实力外,还具有一个其它对手所不具备的特色功能,即Ehcache提供了对于集群能力的支持,这也使得Ehcache不仅仅是个本地单机缓存,更是一个分布式缓存。 分布式缓存的意义是什么?集群方案又可以解决哪些问题?它与单机缓存有啥区别?与Redis等集...

  dJabG7kv7ebg   2023年11月01日   113   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 作为《深入理解缓存原理与实战设计》系列专栏,在前面的文章中,我们一起领略了GuavaCache、Caffeine、Ehcache等优秀的本地JVM级别本地缓存框架的特性、原理与具体的使用方法。除却本地缓存之外,在当前分布式、微服务等架构盛行的时代,本地缓存明显无法满足大型系统中的各种缓存诉求,比如前面文章中反复提及的缓存漂移问题、以及单机缓存无法逾越的内存容量瓶颈。作为应对之法,集中式缓存被广泛的使用在各中分布式系统中,而使...

  dJabG7kv7ebg   2023年11月01日   98   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 上一篇文章中呢,我们简单的介绍了下Redis的整体情况。作为集中式缓存的优秀代表,Redis可以帮助我们在项目中完成很多特定的功能。Redis准确的说是一个非关系型数据库,但是由于其超高的并发处理性能,及其对于缓存场景所提供的一系列能力构建,使其成为了分布式系统中的集中缓存的绝佳选择。 Redis对于缓存能力场景的支持,除了基础的缓存增删改查,还支持对记录的过期时间设定,支持多种不同的数据淘汰策略等等。此外为了解决内存型组件...

  dJabG7kv7ebg   2023年11月01日   74   0   0 Java

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过前面的文章,我们一起剖析了GuavaCache、Caffeine、Ehcache等本地缓存框架的原理与使用场景,也一同领略了以Redis为代表的集中式缓存在分布式高并发场景下无可替代的价值。 现在的很多大型高并发系统都是采用的分布式部署方式,而作为高并发系统的基石,缓存是不可或缺的重要环节。项目中使用缓存的目的是为了提升整体的运算处理效率、降低对外的IO请求,而集中式缓存是独立于进程之外部署的远端服务,需要基于网络IO的...

  dJabG7kv7ebg   2023年11月01日   57   0   0 Java

大家好,又见面了。 在此前我的文章中,曾分2篇详细探讨了下JAVA中Stream流的相关操作,2篇文章收获了累计10w+阅读、2k+点赞以及5k+收藏的记录。能够得到众多小伙伴的认可,是技术分享过程中最开心的事情。 吃透JAVA的Stream流操作,多年实践总结 讲透JAVAStream的collect用法与原理,远比你想象的更强大 不少小伙伴在评论中提出了一些的疑问或自己的独到见解,也在评论区中进行了热烈的互动讨论。梳理了下相关评论内容,针对此前文章中没有提及的一些典型讨论点拿出来聊一聊,也是作为对此前两篇JavaStream相关文章内容的补充完善。 Stream处理时列表到底循环了多...

  dJabG7kv7ebg   2023年11月01日   83   0   0 Java

大家好,好久不见,又见面了。 在消失的这段时间里,我做了件大事,见证了儿子的出生并陪伴其一天天的成长。停止更文的200多天里,还能得到小伙伴们持续的支持,让我备受鼓励。对一个技术人员而言,分享技术观点,并能得到同行小伙伴的认可与称赞,这本身就是一件值得开心的事。 三月三日天气新,长安水边多丽人。 在大多数古诗词中,水边就是一个邂逅爱情的神奇地方,尤以《诗经》为甚,比如大家耳熟能详的所谓伊人,在水一方。时光荏苒,沧海桑田,在那从古流到今的江河之上,总归是留下了他们的相思。 与诗词世界的水边多丽人相比,码农的世界似乎又是另一番景象、更多地是常在河边走、哪有不湿鞋。经常在所谓的“屎山”代码...

  dJabG7kv7ebg   2023年11月01日   67   0   0 项目与团队管理

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 在本专栏前面的文章中,我们介绍了各种本地缓存框架,也知晓了本地缓存的常见特性与设计理念。在前两篇文章中,我们介绍了集中式缓存Redis的一些主流特性与典型使用场景。现在我们来对比一下,分布式缓存相比于本地缓存,在实现层面需要关注的点有哪些不同。梳理如下: 维度 本地缓存 集中式缓存 缓存量 受限于单机内存大小,存储数据有限 需要提供给分布式系统里面所有节点共同使用,对于大型系统而言,对集中式缓存的容量诉求非常的...

  dJabG7kv7ebg   2023年11月01日   53   0   0 NoSQL
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~