缓存在应用中经常可以遇到,大的可以表现为分布式缓存服务和外部的缓存服务应用,小的可以使用应用级的缓存。
缓存的主要作用,一是可以加快热点数据访问速度,二是保护后端的数据库不被突然增长的压力压垮,三是减少计算,是以空间换时间的典型应用。
从分类上来说,缓存可以分为外部缓存服务和应用缓存。
外部缓存服务可以表现为MemCache、Redis、MongoDB等。
应用缓存可以使用HashMap自实现,也可以使用Guava的缓存Cache。
缓存的失效策略:
1. Timeout算法,设置有效期,超时失效。
2. LRU(Least Recently Used)算法,最近最少使用的缓存先失效,是依据时间来判断是否应失效。
LRU算法并不太科学,因为使用时间来判断缓存是否应失效,会导致最新的缓存存在,但是却有可能,最新 的缓存的使用频率并不高,并不是热点数据。
实现可使用链表来实现,最近使用的数据,放入链表头,需要移除数据时,从链表尾移除。LinkedHashMap 的实现支持这一算法。
4. LFU算法(Least Frequently Used),最近最少使用次数算法,是依据使用的次数来做判断。
3. FIFO算法,最先进入的缓存最先移除。
缓存的一致性:
需要在数据源更新时,同时通知缓存更新,否则出现缓存和数据源数据不一致的情况。
其他的缓存分类还有Http缓存、页面缓存、数据库缓存等,有兴趣的可以自行去网上搜索学习。
相关推荐
### 深入探讨《聊聊并发系列文章》 #### 一、深入分析Volatile的实现原理 **引言** 在现代软件开发中,特别是在多线程编程领域,Volatile关键字的作用不可忽视。作为一种轻量级的同步机制,Volatile能够确保多...
《聊聊架构 - 王概凯》这本书是知名IT技术社区推出的一档专注于软件与网站架构的栏目,由经验丰富的架构师王概凯,也就是网名Kevin的作者执笔。作为一个资深的软件架构师,Kevin在业界享有较高的声誉,他的文章曾...
《聊聊架构》这本书的核心主题是引导程序员向架构师的角色转变,深入探讨了软件设计与架构的相关知识。在软件开发行业中,架构师的角色至关重要,他们负责规划、设计和指导大规模系统的构建,确保系统的可扩展性、...
今天我们来展开聊一下在开发中对于缓存经常会遇到的三个问题,也是在面试题中经常会被问到的高频知识点!也就是缓存穿透、缓存击穿、缓存雪崩的知识以及其相对应的解决方案! 本章共讲解了缓存的三种异常情况,上述...
在“聊聊底层优化_MegEngine Meetup No.7.pdf”这个文件中,我们聚焦于深度学习框架MegEngine的底层优化技术,这是在互联网行业中至关重要的一个话题。深度学习已经成为现代互联网服务的核心驱动力,无论是图像识别...
但是今天我们不聊它们,我们来聊一聊如何实现本地缓存。 要实现一个较好的本地缓存,需要从三个方面开始: 1、存储集合的选择 存储集合的选择是实现本地缓存的第一步。我们需要选择一个合适的存储集合来存储我们...
4. **缓存问题**:缓存雪崩、击穿和穿透分别指全部缓存失效、部分热点数据未命中和请求穿透到后端数据库。 5. **过期策略与淘汰机制**:Redis通过LRU、LFU或TTL策略管理过期Key。 6. **RDB与AOF备份**:RDB是全量...
【标题】:“聊聊开发版本”通常指的是在软件开发过程中,开发者使用的不同阶段的代码版本。在软件工程中,开发版本通常包括alpha(阿尔法)、beta(贝塔)和gamma(伽马)等阶段,代表着软件从初步实现到成熟稳定的...
缓存(Cache)是CPU内部的一种高速存储设备,分为一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)。它们的主要作用是减少CPU与内存之间的速度差异,提升数据处理速度。一级缓存速度最快,但容量...
理解了行溢出后,就可以将这个概念与BufferPool缓存机制结合起来,对数据库的物理存储结构和数据处理有更深入的理解。这包括数据页的物理存储结构、表空间的物理存储结构,以及它们在磁盘文件中的存储方式。掌握这些...
【基于C/S的聊天系统——聊聊吧系统】是一款采用经典的客户端/服务器(Client/Server,C/S)架构设计的通信应用。在这个系统中,客户端作为用户交互的界面,而服务器端则负责处理客户端发送的数据,维持聊天环境的...
它将数据存储在内存中,读写速度远超磁盘,且通过LRU(Least Recently Used)策略进行缓存淘汰,保证了内存的有效利用。此外,Redis支持批量操作和管道(pipelining),允许多个命令连续发送,服务器一次性处理,...
4. **单聊与群聊功能**:这涉及到用户管理、消息发送与接收、会话列表的显示等。开发者需要实现消息模型,处理不同类型的聊天内容(文本、图片、语音等),并确保聊天记录在用户界面上的正确呈现。 5. **本地消息...
总结,Redis Cluster提供了一种强大的分布式缓存解决方案,通过数据分片和主从复制实现高可用和可扩展性。在Java开发中,合理地使用Redis Cluster可以提升应用的性能和稳定性。需要注意的是,理解和掌握其工作原理...
大家好,欢迎大家来到算法数据结构专题,今天我们和大家聊一个非常常用的算法,叫做LRU。 LRU的英文全称是Least Recently Used,也即最不经常使用。我们看着好像挺迷糊的,其实这个含义要结合缓存一起使用。对于工程...
- 2:每次提交事务时,将redo日志刷入操作系统缓存,而不是直接到磁盘文件。 通常推荐设置为1,即强制每次提交事务时都将redo日志写入磁盘,这样可以最大程度保证事务的安全性。 3. binlog日志:binlog是一种...
5. **缓存策略**:HBase 使用BlockCache和MemStore来缓存数据,合理配置缓存大小和策略能显著提升读写速度。例如,热数据可以设置在缓存中,减少磁盘I/O。 6. **RowKey 设计**:RowKey是HBase中的唯一标识符,它的...
:fire: 100,000〜4,000,000 QPS,使用二进制搜索技术/《 VPCS架构》德塔公司开源缓存服务器存储上亿级量子碎片,带有并发映射表的微型Java线程小型安全HTTP json高速缓存服务器,并发映射表,2分法字符串索引,高...
我们慢慢聊。 首先,我们把二的三十次方想象成一个圆,就像钟表一样,钟表的圆可以理解成由60个点组成的圆,而此处我们把这个圆想象成由2^32个点组成的圆,示意图如下圆环的正上方的点代表0,0点右侧的第一个点代表...
MyBatis的缓存分为一级缓存和二级缓存,一级缓存是SqlSession级别的,而二级缓存则是Mapper级别的,两者可以配合使用,但需要注意缓存的一致性问题。 在实战部分,书中可能会涵盖如何集成MyBatis到Spring框架中,...