加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Redis闲谈(1):构建知识图谱

发布时间:2019-05-11 02:45:58 所属栏目:教程 来源:宜信技术学院
导读:场景:Redis口试 (图片来历于收集) 口试官:我看到你的简历上说你纯熟行使Redis,那么你讲一下Redis是干嘛用的? 小明:(心中窃喜,Redis不就是缓存吗?)Redis首要用作缓存,通过内存高效地存储非耐久化数据。 口试官:Redis可以用作耐久化的存储吗? 小明:

题目:同等性的题目是漫衍式体系中很常见的题目。同等性一样平常分为两种:强同等性和最终同等性,当我们要满意强同等性的时辰,Redis也无法做到美满无瑕,由于数据库缓和存双写,必定会呈现纷歧致的环境,Redis只能担保最终同等性。

办理:我们怎样担保最终同等性呢?

  • 第一种方法是给缓存配置必然的逾期时刻,在缓存逾期之后会自动查询数据库,担保数据库缓和存的同等性。
  • 假如不配置逾期时刻的话,我们起主要选取正确的更新计策:先更新数据库再删除缓存。但我们删除缓存的时辰也也许呈现某些题目,以是必要将要删除的缓存的key放到动静行列中去,不绝重试,直到删除乐成为止。

2. 缓存雪崩题目

题目: 我们应该都在影戏里看到过雪崩,开始很安静,然后一刹时就开始崩塌,具有很强的歼灭性。这里也是一样的,我们执行代码的时辰将许多缓存的实效时刻设定成一样,接着这些缓存在统一时刻城市实效,然后城市从头会见数据库更新数据,这样会导致数据库毗连数过多、压力过大而瓦解。

办理:

  • 配置缓存逾期时刻的时辰加一个随机值。
  • 配置双缓存,缓存1配置缓存时刻,缓存2不配置,1逾期后直接返回缓存2,而且启动一个历程去更新缓存1和2。

3. 缓存穿透题目

题目: 缓存穿透是指一些非正常用户(黑客)存心去哀求缓存中不存在的数据,导致全部的哀求都齐集到到数据库上,从而导致数据库毗连非常。

办理:

  • 操作互斥锁。缓存失效的时辰,不能直接会见数据库,而是要先获取到锁,才气去哀求数据库。没获得锁,则休眠一段时刻后重试。
  • 回收异步更新计策。无论key是否取到值,都直接返回。value值中维护一个缓存失效时刻,缓存假如逾期,异步起一个线程去读数据库,更新缓存。必要做缓存预热(项目启动前,先加载缓存)操纵。
  • 提供一个能敏捷判定哀求是否有用的拦截机制。好比操作布隆过滤器,内部维护一系列正当有用的key,敏捷判定出哀求所携带的Key是否正当有用。假如不正当,则直接返回。

4. 缓存的并发竞争题目

题目:

缓存并发竞争的题目,首要产生在多线程对某个key举办set的时辰,这时会呈现数据纷歧致的环境。

好比Redis中我们存着一个key为amount的值,它的value是100,两个线程同时都对value加100然后更新,正确的功效应该是变为300。可是两个线程拿到这个值的时辰都是100,最后功效也就是200,这就导致了缓存的并发竞争题目。

办理

  • 假如多线程操纵没有次序要求的话,我们可以配置一个漫衍式锁,然后多个线程去争夺锁,谁先抢到锁谁就可以先执行。这个漫衍式锁可以用zookeeper可能Redis自己去实现。
  • 可以操作Redis的incr呼吁。
  • 当我们的多线程操纵必要次序的时辰,我们可以配置一个动静行列,把必要的操纵加到动静行列中去,严酷凭证行列的先后执行呼吁。

Redis的逾期计策

Redis跟着数据的增多,内存占用率会一连变高,我们觉得一些键达到配置的删除时刻就会被删除,可是时刻到了,内存的占用率照旧很高,这是为什么呢?

Redis回收的是按期删除和惰性删除的内存裁减机制。

1. 按期删除

按期删除和按时删除是有区此外:

  • 按时删除是必需严酷凭证设定的时刻去删除缓存,这就必要我们配置一个按时器去不绝地轮询全部的key,判定是否必要举办删除。可是这样的话cpu的资源会被大幅度地占有,资源的操作率变低。以是我们选择回收按期删除,。
  • 按期删除是时刻由我们定,我们可以每隔100ms举办搜查,但照旧不能搜查全部的缓存,Redis照旧会卡死,只能随机地去搜查一部门缓存,可是这样会有一些缓存无法在规按时刻内删除。这时惰性删除就派上用场了。

2. 惰性删除

举个简朴的例子:中学的时辰,平常功课太多,基础做不完,先生说下节课要讲这个卷子,你们都做完了吧?着实有许多人没做完,以是必要在下节课之前赶忙补上。

惰性删除也是这个原理,我们的这个值按理说应该没了,可是它还在,当你要获取这个key的时辰,发明这个key应该逾期了,赶忙删了,然后返回一个'没有这个值,已经逾期了!'。

此刻我们有了按期删除 + 惰性删除的逾期计策,就可以安枕无忧了吗?并不是这样的,假如这个key一向不会见,那么它会一向滞留,也是不公道的,这就必要我们的内存裁减机制了。

Redis的内存裁减机制一样平常有6种,如下图所示:

Redis闲谈(1):构建常识图谱

那么我们怎样去设置Redis的内存裁减机制呢?

在Redis.conf中我们可以举办设置

  1. # maxmemory-policy allkeys-lru 

小结

本文初探Redis,或许清算出了Redis的常识图谱,比较之下可以发明Redis居然有这么多的常识点必要进修;接着我们说明白Redis的优弱点,知道了其基于内存的高效的读写速率和富厚的数据范例,也说明白Redis面临数据同等性、缓存穿透、缓存雪崩等题目时该如那里理赏罚;最后我们相识了Redis的逾期计策缓和存裁减机制。

信托各人已经对Redis有了一些相识,下篇文章我们将说明Redis的数据布局、每一种数据范例是怎样实现的、对应的呼吁有哪些。

【本文是51CTO专栏机构宜信技能学院的原创文章,微信公家号“宜信技能学院( id: CE_TECH)”】

戳这里,看该作者更多好文

【编辑保举】

  1. 浅析软件架构的10个常见模式
  2. 开拓 | Spring Boot是怎样实现日记的?
  3. 深入浅出百亿哀求高可用Redis(codis)漫衍式集群揭秘
  4. 初入软件「江湖」的萌新必要相识的五个履历教导
  5. 为什么单线程的Redis却能支撑高并发?
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读