网易首页 > 网易号 > 正文 申请入驻

史上最实用的:分布式缓存方案

0
分享至

  ◆ 一、从数据说起

  我们在做缓存之前需要把数据先分好类

  按变化频率:

  静态数据:一般不变的,类似于字典表

  准静态数据:变化频率很低,部门结构设置,全国行政区划数据

  中间状态数据:一些计算的可复用中间数据,变量副本,配置中心的本地副本

  按使用频率:

  热数据:使用频率高的

  读写比大的:读的频率远大于写的频率

  这些数据就比较适合使用缓存。

  缓存无处不在。内存可以看作是cpu和磁盘之间的缓存。cpu与内存的处理速度也不一致,所以出现了L1&L2 Cache

  缓存的本质:系统各级之间处理速度不匹配,利用空间换时间。

  缓存加载时间

  1. 启动时全量加载

  2. 懒加载

  2.1. 同步使用加载

  先看缓存里是否有数据,没有的话从数据库读取。读取的数据,先放到内存,然后返回给调用方。

  2.2. 延迟异步加载

  从缓存里获取数据,不管有没有都直接返回。

  策略1:如果缓存为空的话,则发起一个异步线程负责加载。

  策略2:异步线程负责维护缓存的数据,定期或根据条件触发更新。

  缓存过期策略

  按FIFO或LRU

  固定时间过期

  根据业务进行时间的加权。

  
◆ 二、本地缓存

  Map 缓存

  public static final Map CACHE=new HashMap();
CACHE.put("key","value");

  Guava缓存

  Cache cache = CacheBuilder.newBuilder() .maximumSize(1024) .expireAfterWrite(60,TimeUnit.SECONDS) .weakValues() .build();
cache.put("word","Hello Guava Cache");
System.out.println(cache.getIfPresent("word"));

  Spring Cache

  基于注解和AOP,使用方便

  可以配置Condition和SPEL,非常灵活

  需要注意:绕过Spring的话,注解无效

  核心功能:@Cacheable、@CachePut、@CacheEvict

  本地缓存的缺点:

  在集群环境中,如果每个节点都保存一份缓存,导致占用内存变大

  在JVM中长期存在,会影响GC

  缓存数据的调度处理,影响业务线程,争夺资源

  
◆ 三、远程缓存

  1.Redis

  Redis是一个开源的使用ANSI C语言编写的,基于内存也可以持久化的key-value数据库,并提供多种语言的API

  
2.Memcached

  memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。

  ◆ 四、内存网格

  Hazelcast

  lgnite

  ◆ 五、缓存常见问题

  1. 缓存穿透

  问题描述:大量并发查询不存在的KEY,导致都直接把压力透传到数据库上。

  分析:因为数据库里没有值,所以没有建立缓存,导致一直打到数据库上。

  解决办法:

  缓存空值的KEY

  Bloom过滤或RoaringBitmap判断KEY是否存在

  完全以缓存为准,使用延迟异步加载的方式去加载数据库数据到缓存。

  Bloom过滤器示例:
(引入guava依赖)

  public static void main(String[] args) {
BloomFilter filter = BloomFilter.create(
Funnels.stringFunnel(Charsets.UTF_8),//Funnels.integerFunnel(), //数据格式
1000000,//预计存入数据量
0.01);//误判率

  System.out.println(filter.mightContain("abcdefg"));
filter.put("abcdefg");
System.out.println(filter.mightContain("abcdefg"));
}

  RoaringBitmap示例:
引入依赖:

  
org.roaringbitmapgroupId>
RoaringBitmapartifactId>
0.8.1version>
dependency>

  public static void test3(){
Roaring64NavigableMap roaring64NavigableMap = Roaring64NavigableMap.bitmapOf(3, 4, 5, 90);
//是否包含
boolean contains = roaring64NavigableMap.contains(3);
long l = roaring64NavigableMap.rankLong(3);
System.out.println(l);
System.out.println(contains);
}

  2. 缓存击穿

  问题:当某个KEY失效的时候,正好有大量并发请求访问这个KEY

  分析:跟缓存穿透比较像,这个是属于偶然的

  解决办法:

  KEY的更新的时候添加全局互斥锁

  完全以缓存为准,使用延迟异步加载的策略

  3. 缓存雪崩

  问题:当某一个时刻发生大规模的缓存失效的情况,会有大量请求打到数据库,导致数据库压力过大而宕机

  分析:一般来说,由于更新策略、或者数据热点、缓存服务宕机等原因,导致缓存数据同时大规模不可以。

  解决办法:

  缓存更新、失效策略在时间上做到比较均匀

  使用的热数据尽量分散到不同机器上

  多台机器做主从复制,实现高可用

  实现熔断限流机制,对系统进行负载能力控制

  使用本地缓存兜底

  番外:

  布隆过滤器:

  目标就是要基于过滤器已存储生成的原始元数据,进行比较过滤,如果是在原始元数据集合里面的,一定会被发现。也有可能不是里面的被误杀。

  BloomFilter 会开辟一个m位的bitArray(位数组),开始所有数据都部署为0,当一个元素过来的时候,通过多个hash函数计算出不同的值,然后根据hash值找到对应的下标处,将里面的值改为1.

  优点:使用计算,节省存储空间。

  缺点:有失误率。不是在过滤器原始表里的数据也会被误算进去。

  使用场景:目标就是要基于过滤器已存储生成的原始元数据,进行比较过滤,如果是在原始元数据集合里面的,一定会被发现。布隆过滤器核心正确的使用就是进行过滤禁止,进行正确的否定。

  举例:如我们有100万个黑名单的url地址,过来一个地址我们算出来不在里面,那就肯定可以放行。

  BitMap:

  BitMap的基本思想是用一个bit位来标记某个元素对应的值,这样就可以大大节省空间。

  在Java中一个int占4个字节,也就是32bit。按int存储和按位存储的大小差距是32倍。

  那么怎么表示一个数呢?可以使用1表示存在,0表示不存在。

  如下面:表示{2,6}

  给定一个整数M,M/32就能得到int数组的下标,M%32就知道在这个下标里面的具体位置。

  1个int占32位,那么我们只需要申请一个int数组长度为 int tmp[1+N/32] 即可存储,其中N表示要存储的这些数中的最大值

  使用场景:

  快速排序

  把数放进去之后,遍历一遍,把值是1的都取出来就排好序了。

  快速去重

  20亿个整数中找出不重复的整数的个数?

  内存不足以容纳这20亿个整数。我们怎么表示数字的状态呢?一个数的状态可以分为3种,不存在、存在一次、存在两次及以上。这就需要两个bit来表示。00代表不存在,01代表一次,11代表两次及以上。

  接下来我们就把这20亿个整数放进去,如果状态为00,就改为01,如果状态为01就改为11.如果状态为11,就不动了。都放完后,遍历取出值为01的,就是不重复的数据的个数。。

  快速查找

  给定一个整数M,M/32就能得到int数组的下标,M%32就知道在这个下标里面的具体位置。

  如13,就能算出在int[0]里面的第13个

  12 种经典亿级流量架构之资源隔离思想与方法论

  滴滴开源的分布式id生成系统

  亿级流量架构之资源隔离思路与方法

  10 张流程图+部署图,讲透单点登录原理与简单实现!

  免责声明:

  本公众号部分分享的资料来自网络收集和整理,所有文字和图片版权归属于原作者所有,且仅代表作者个人观点,与本公众号无关,文章仅供读者学习交流使用,并请自行核实相关内容,如文章内容涉及侵权,请联系后台管理员删除。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
冒充职业球员?欧洲杯惊现200多斤大胖子 当年差点加盟中超

冒充职业球员?欧洲杯惊现200多斤大胖子 当年差点加盟中超

球事百科吖
2024-06-16 00:04:33
倒查30年后补税是个危险信号

倒查30年后补税是个危险信号

深度财线
2024-06-15 22:03:47
22岁卡车司机,带45岁女人跑长途,两人最喜欢经过百里无人区

22岁卡车司机,带45岁女人跑长途,两人最喜欢经过百里无人区

牛城王小帅
2024-06-14 11:45:37
乌情报总局局长:俄最新型S-500防空系统部分部件已运抵克里米亚

乌情报总局局长:俄最新型S-500防空系统部分部件已运抵克里米亚

红星新闻
2024-06-15 20:16:15
刚向美国否认完“强迫劳动”,宁德时代就被曝要求员工896,奋斗100天

刚向美国否认完“强迫劳动”,宁德时代就被曝要求员工896,奋斗100天

小萝卜丝
2024-06-16 08:32:04
G7峰会:喧嚣过后,困局依旧

G7峰会:喧嚣过后,困局依旧

齐鲁壹点
2024-06-16 07:43:09
乌克兰和平峰会、美俄核潜艇“对视”,都是俄乌冲突背景音乐!

乌克兰和平峰会、美俄核潜艇“对视”,都是俄乌冲突背景音乐!

新民周刊
2024-06-16 09:09:58
上海这种事也越来越多了!

上海这种事也越来越多了!

吴女士
2024-06-15 14:02:29
现场|京港、沪港高铁动卧首发列车抵港,乘客“打100分”

现场|京港、沪港高铁动卧首发列车抵港,乘客“打100分”

澎湃新闻
2024-06-16 10:36:35
网传:焚烧电动车现场,黑烟滚滚,网友纳闷,专家学者集体沉默!

网传:焚烧电动车现场,黑烟滚滚,网友纳闷,专家学者集体沉默!

眼光很亮
2024-06-16 08:01:14
“欧洲杯”火到国内:电竞酒店预订热度涨三倍,酒吧零点场约满

“欧洲杯”火到国内:电竞酒店预订热度涨三倍,酒吧零点场约满

澎湃新闻
2024-06-16 09:30:26
闹大了!陈芋汐代言李宁,造型酷似日本风,网友直接炸锅了

闹大了!陈芋汐代言李宁,造型酷似日本风,网友直接炸锅了

吃鱼思故渊
2024-06-15 21:49:52
欧洲杯惨败之夜,38岁巨星消失!65分钟被换下,遭球迷恶搞

欧洲杯惨败之夜,38岁巨星消失!65分钟被换下,遭球迷恶搞

叶青足球世界
2024-06-16 02:56:58
打倒房地产的子弹 终于射中银行

打倒房地产的子弹 终于射中银行

盐不能当饭吃
2024-06-15 13:12:40
幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

赢梯
2024-06-13 09:43:08
中国女排3-2土耳其!赛后评分:张常宁满分+4将出彩,一将需提升

中国女排3-2土耳其!赛后评分:张常宁满分+4将出彩,一将需提升

理工男评篮球
2024-06-15 23:27:43
全跑光了,一家7口套现20亿,把公司卖给了17万股民

全跑光了,一家7口套现20亿,把公司卖给了17万股民

灰鸽观察室
2024-06-15 20:09:36
大S的干爹王伟忠罕发声,3句话表明立场,网友:听文明人说话舒服

大S的干爹王伟忠罕发声,3句话表明立场,网友:听文明人说话舒服

综艺拼盘汇
2024-06-16 07:35:08
刚访问中国后就捅刀子,中方非常不悦:“立即取消”!

刚访问中国后就捅刀子,中方非常不悦:“立即取消”!

占豪
2024-06-15 03:31:31
陪睡门曝光!双一流大学女生陷陪睡丑闻,交友App成道德沦丧背后推手?

陪睡门曝光!双一流大学女生陷陪睡丑闻,交友App成道德沦丧背后推手?

新青年大院NEWYOUTH
2024-06-16 00:06:48
2024-06-16 11:48:49
IT架构师联盟
IT架构师联盟
IT架构实战分享
687文章数 7654关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

头条要闻

法国股市暴跌引发恐慌 马克龙:法国处于非常严峻时刻

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

艺术
教育
本地
时尚
家居

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

教育要闻

四川卫视#四川卫视腹有诗书#“不积硅步,无以至千里,不积小流,无以成江海”,“成电”青年创新团队努力...

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

中年女性还是穿连衣裙最有气质!裙摆过膝、腰部收紧,巨显瘦

家居要闻

空谷来音 朴素留白的侘寂之美

无障碍浏览 进入关怀版