For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
缓存技术在许多软件编程开发项目中都得到了广泛的应用,今天我们就通过案例分析来简单了解一下,缓存概念与应用作用分析。
一、什么是缓存
缓存就是数据交换的缓冲区。缓存的本质是一个内存Hash。缓存是一种利用空间换时间的设计,其目标就是更快、更近:极大的提高。
将数据写入/读取速度更快的存储(设备);
将数据缓存到离应用近的位置;
将数据缓存到离用户近的位置。
缓存是用于存储数据的硬件或软件的组成部分,以使得后续更快访问相应的数据。缓存中的数据可能是提前计算好的结果、数据的副本等。的应用场景:有cpucache,磁盘cache等。本文中提及到缓存主要是指互联网应用中所使用的缓存组件。
缓存命中率是缓存的重要度量指标,命中率越高越好。
缓存命中率=从缓存中读取次数/总读取次数
二、何时需要缓存
引入缓存,会增加系统的复杂度。所以,引入缓存前,需要先权衡是否值得,考量点如下:
CPU开销-如果应用某个计算需要消耗大量CPU,可以考虑缓存其计算结果。场景:复杂的、频繁调用的正则计算;分布式计算中间状态等。
IO开销-如果数据库连接池比较繁忙,可以考虑缓存其查询结果。
在数据层引入缓存,有以下几个好处:
提升数据读取速度。
提升系统扩展能力,通过扩展缓存,提升系统承载能力。
降低存储成本,Cache+DB的方式可以承担原有需要多台DB才能承担的请求量,节省机器成本。
三、缓存的基本原理
根据业务场景,通常缓存有以下几种使用方式:
懒汉式(读时触发):先查询DB里的数据,然后把相关的数据写入Cache。
饥饿式(写时触发):写入DB后,然后把相关的数据也写入Cache。
定期刷新:适合周期性的跑数据的任务,或者列表型的数据,而且不要求绝对实时性。
四、缓存淘汰策略
缓存淘汰的类型:
1)基于空间:设置缓存空间大小。
2)基于容量:设置缓存存储记录数。
3)基于时间
TTL(TimeToLive,即存活期)缓存数据从创建到过期的时间。
TTI(TimeToIdle,即空闲期)缓存数据多久没被访问的时间。
缓存淘汰算法:
1)FIFO:先进先出。在这种淘汰算法中,先进入缓存的会先被淘汰。这种可谓是简单的了,但是会导致我们命中率很低。试想一下我们如果有个访问频率很高的数据是所有数据一个访问的,而那些不是很高的是后面再访问的,那这样就会把我们的个数据但是他的访问频率很高给挤出。
2)LRU:近少使用算法。在这种算法中避免了上面的问题,每次访问数据都会将其放在我们的队尾,如果需要淘汰数据,就只需要淘汰队即可。但是这个依然有个问题,如果有个数据在1个小时的前59分钟访问了1万次(可见这是个热点数据),再后一分钟没有访问这个数据,但是有其他的数据访问,就导致了我们这个热点数据被淘汰。
3)LFU:近少频率使用。在这种算法中又对上面进行了优化,利用额外的空间记录每个数据的使用频率,然后选出频率低进行淘汰。这样就避免了LRU不能处理时间段的问题。
这三种缓存淘汰算法,实现复杂度一个比一个高,同样的命中率也是一个比一个好。而我们一般来说选择的方案居中即可,即实现成本不是太高,而命中率也还行的LRU。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。