一 缓存概述
缓存(cache),,原始意义是指访问速度比一般随机存储器(RAM)快的一种高速存储器。
1.1 缓存分类
-
应用级缓存
应用级缓存也就是我们平时写的应用程序中所使用的缓存。在平时程序中一般 是按照如下操作流程来实现缓存:
image
上图说明:
在平时程序中一般是按照如下操作流程来实现缓存的操作,首先张三用户读取 数据库,并将读取的数据存入到缓存中,其他用户读取的时候,直接从缓存中 读取,而不用查询数据库,从而提高程序的执行速度和效率。 -
系统级别缓存
系统级别缓存是抛开我们应用程序之外硬件的缓存操作。例如:
image
上图说明:
某些CPU的缓存操作和如下图多级缓存流程类似,CPU在操作数据的时候,先读 取1级缓存,1级缓存如果没有数据则读取2级缓存,2级缓存没有数据则读取3 级缓存,3级缓存如果没有数据就直接从主存储器(存储指令和数据)读取数据
1.2 缓存的淘汰算法
数据缓存之后,为了避免缓存无限变大,我们需要对缓存进行管理,将一些不 用的或者很少用的或者很久没更新的缓存淘汰掉,这里就需要用到一系列淘汰 算法了,淘汰算法主要有如下几种:
-
FIFO(先进先出)
数据最先存入缓存,那么也将最先备淘汰掉。 -
LRU(最不常用数据)
判断缓存最近被使用的时间,时间最远被使用的缓存优先淘汰。 -
LFU(最少使用)
一段时间内,被使用的次数最少的数据,优先淘汰掉。
1.3 缓存应用场景
-
频繁查询数据缓存
有一些数据经常被访问,而且变更频率较低,实时性要求不高的数据,可以把 它存储到缓存中,每次读取数据直接读缓存即可,从而提升数据的加载速度和 系统的性能。 -
列表排序分页数据
一些变更频率较低查询频次较高的列表、分页、排序数据,可以存入到Redis 缓存,每次查询分页或者排序的时候,直接从Redis缓存中获取。 -
计数器
网站中用于统计访问频次、在线人数、商品抢购次数等,也可以使用缓存来实现。 -
详情内容
站点中,资讯内容、商品详情等较大变更频率又低的内容,可以采用缓存来加 速数据的读取,降低IO操作。 -
分布式Session
实现会话共享的时候,可以使用Session来存储需要共享的会话,从而节省内 存空间。 -
热点排名
我们可以使用ZSet来存储热数据,并实现热点数据的排名。 -
发布订阅
用Redis也可以实现发布与订阅,但不推荐,推荐用MQ。 -
分布式锁
可以使用Redisson结合Redis实现分布式锁,Redis实现的分布式锁效率极高, 得到了市场的广泛使用。
1.4 微服务架构缓存的使用
![](https://img.haomeiwen.com/i25117622/e7227ca8734f6c03.png)
在微服务架构中,会大量使用到缓存,如上图:
1.客户端缓存(手机、PC)
2.Nginx缓存
3.微服务网关限流令牌缓存
4.Nacos缓存服务列表、配置文件
5.各大微服务自身也具有缓存
6.数据库查询Query Cache
7.Redis集群缓存
8.Kafka也属于缓存
二 高并发站点缓存技术选型
2.1 高并发环境概述
-
概述
双十一大促销活动有很多技术挑战,而最大的挑战之一就是高并发,而应对高 并发的最有效手段之一就是分布式缓存,分布式缓存不仅仅是缓存要显示的数 据这么简单,还可以在限流、队列削峰、高速读写、分布式锁等场景发挥重大 作用。分布式缓存可以说是解决高并发场景的一头野兽。 -
双十一活动大促分析
双十一无论抢红包、商品秒杀、抢优惠券,并发量都是超高,流量可以说是平 时几倍乃至几十倍,对服务器造成的压力也几何数字增长。面对双十一巨大流 量涌入,对要解决问题做个分析:
1、凌晨突然涌入的巨大流量。【队列削峰】【限流】
2、高并发场景秒杀、抢红包、抢优惠券,快速存取。【缓存】
3、高并发场景超卖、超额抢红包。
4、高并发场景重复抢单。【缓存解决】
2.2 缓存概述
-
传统关系形数据库
传统关系型数据库能处理的并发链接一般都很有限,如果优化的很优秀,并发 链接量可高达几千,而一般公司对其优化的并不怎么乐观,很多公司的数据库 并发链接量只控制在了几百。单纯用数据库实现数据的高效存取是存在很大挑
战和问题的,因此一定要找一种方式或者软件取代传统关系型数据库的存取功 能。
image
-
缓存
针对传统关系型数据库存取性能瓶颈,我们可以采用高性能的非关系型数据库 来取代传统关系型数据库,这里以当前主流的分布式缓存技术Redis为例,可 以实现单机每秒读10万次以上,写每秒8万次以上的能力,远超关系型数据 库,因此解决传统关系型数据库的存取能力,我们可以用非关系型数据库来优 化甚至取代关系型数据库。
image
2.3 多种缓存对比
当前主流的缓存技术有Memcached 、Tair 、Redis ,这几款分布式缓存都各 有优缺点,可以根据场景进行选择。
- Memcached
Memcache是老牌的内存缓存技术,对相关领域支持比较丰富,window和linux都可以使用,各种框架都支持使用,session的信
息可以非常方便的保存到该Memcache中,每个key保存的数据量最大为1M,支持的数据类型比较单一,就是String类型,不支持
持久化。
优点:
高性能读写,单一的数据类型(key【String】-value【Object】),支持客 式分布式集群,多线程读写性能高。
缺点:
无持久化,服务端无法实现集群,跨机房数据同步困难,架构扩容复杂度高, 不适合大规模数据量。
- Redis:(推荐)
Redis支持比较多的数据类型(String/list/set/sortset/hash),Redis支持集合计算的(set类型支持),每个key最大数据存储
量为1G,Redis是新兴的内存缓存技术,对各方面支持不完善,支持持久化操作。内存中的数据结构存储系统,可用作数据
库、缓存和消息中间件。基本配合后端数据库使用,存放的只是用户当前频繁调去的数据。
优点:
高性能读写,多数据类型支持,数据持久化,高可用架构,支持分布式分片集群,单线程读写性能极高(6.x版本支持多线程)。
缺点:
多线程读写较Mencached慢,不适合处理大规模数据量。
- Tair:
Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别与缓存和持久化存储对应。TAIR的功能是get、put、delete以及批量接口,主要针对淘宝应用。
优点:
高性能读写,支持三种存储引擎(ddb/rdb/ldb),支持高可用,支持分布式 分片集群,支撑了几乎所有淘宝业务的缓存。
缺点:
单机情况下,读写性能较上两种较慢,适合处理大规模数据缓存。
三 双十一缓存架构设计
一谈到缓存架构,很多人想到的是Redis,但其实整套体系的缓存架构并非只 有Redis,而应该是多个层面多个软件结合形成一套非常良性的缓存体系。如 下的缓存架构设计就涉及到了多个层面的缓存软件:
![](https://img.haomeiwen.com/i25117622/f448172f9e9a4bb3.png)
为双十一大促设计的缓存架构体系,该缓存架构体系借鉴了一线大厂京东缓存 架构设计经验,并在京东设计方案上进行了优化,让它更符合一线厂家的需 要。上述架构图综合了多种缓存和多层面的缓存设计,从前端页面缓存到代理 服务器lvs和nginx缓存,以及后端服务redis缓存,包括缓存数据同步等。
宏观解说
1、HTML页面做缓存,浏览器端可以缓存HTML页面和其他静态资源,防止用户频繁刷新对后端造成巨大压力
2、Lvs实现记录不同协议以及不同用户请求链路缓存
3、Nginx这里会做HTML页面缓存配置以及Nginx自身缓存配置
4、数据查找这里用Lua取代了其他语言查找,提高了处理的性能效率,并发处理能力将大大提升
5、数据缓存采用了Redis集群+主从架构,并实现缓存读写分离操作
6、集成Canal实现数据库数据增量实时同步Redis
备注
共6篇,后续不断更新。。。。
网友评论