-
使用缓存需要注意几个关键指标:缓存键集合大小、缓存空间大小以及缓存的使用寿命。这三个指标决定了缓存的有效性、缓存的使用效率和缓存实现的效果,同时也是影响缓存命中率的主要因素。 缓存主要特定是一次写入多次读取,这种手段减少对数据库的使用,尽快从缓存中读取数据,提高系统性能。所以缓存是否有效,主要看一次写入的缓存能不能多次读取处理响应业务请求,这个判断的标准就叫做缓存命中率:
-
缓存键集合大小:缓存中每个对象都是通过缓存键识别的。从统计学上看,应用生成的唯一键越多,重用的机会越小。如用商品ID作缓存键,就不如根据商品类别做缓存,这样可以获取到更多的数据,利用率高。设计缓存的时候,要注意缓存键的设计上,在一个集合范围内,限定一个即能够高效使用,又可以减少键的数量,这个时候缓存的性能最好。
-
缓存内存空间大小:由于空间是有限的,所以缓存对象的大小和数据达到一定程度就受到了限制,需要删除老数据,这样就会影响到缓存命中率。所以物理上缓存空间大,缓存对象多,缓存的命中率就高。
-
缓存对象生存时间(缓存寿命,TTL):对象缓存时间越长,被重用可能性就越高。缓存失效的方法有超时失效和清除失效。空间不够情况下,清除失效中常用的算法为LRU,最近最少使用的数据在空间不够用情况下优先被清除,为新对象腾出空间。
-
-
缓存的类型主要有代理缓存、反向代理缓存、CDN缓存和对象缓存几种。
-
代理缓存:缓存在客户端一端,代理客户端访问互联网,如交换机或路由器。客户端的缓存我们无法管理,能够管理的是反向代理缓存。
-
反向代理缓存:代理数据中心输出的,位于数据中心里的,是数据中心的统一入口,代理整个数据中心其他服务器的应用处理。如Nginx,先请求到反向代理服务器,如果有请求的数据就返回,否则再到数据中心获取,获取后返回,同时缓存在反向代理服务器,供下次或其他用户使用。
-
内容分发网络CDN缓存:CDN不在客户端也不在数据中心,而是介于两者之间,作为网络服务商的缓存服务。用户访问互联网时,需要通过网络服务商提供的网络连接才能到数据中心,那么网络服务商就可以在自己的机房里做一次缓存服务。
-
-
架构中使用最多,也是关注最多的就是分布式缓存,分布式缓存中几个最重要的技术点是:分布式对象缓存的架构、分布式对象缓存的模型和分布式缓存中一个重要的算法—— 一致性哈希算法。 使用缓存时要注意以下几点:
-
数据频繁修改,这类数据使用缓存效果差;
-
数据没有热点,这类数据缓存命中率差;
-
数据不一致,因为缓存数据和数据库数据不是同步的,可能存在数据不一致情况,如果业务场景对数据一致性要求高,这个时候使用缓存要注意;
-
缓存雪崩,这个时候可能导致整个系统崩溃,也是使用缓存中要注意的重要事项。
-
-
缓存提高性能的优势:
-
缓存的数据来自内存,访问速度快。
-
缓存中存储的数据形态通常是最终的结果形态,减少资源消耗。如果不缓存结果形态,则需要通过各种逻辑计算得到。
-
使用缓存可以降低数据库磁盘或网络的负载压力。磁盘IO或网络IO都是系统出现瓶颈的地方,从缓存中读取数据就减少了IO设备压力,提升系统性能。
-
-
缓存中使用的数据结构主要是哈希表,哈希表最终的存储形式通常是一个顺序表,也就是一个数组结构。