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

Redis的那些最常晤口试题目

发布时间:2018-09-08 17:51:17 所属栏目:编程 来源:回首笑人间
导读:9月15日技能沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖切磋精准运维! 1.什么是redis? Redis 是一个基于内存的高机能key-value数据库。 2.Reids的特点 Redis本质上是一个Key-Value范例的内存数据库,很像memcached,整个数据库完好加载在内存傍边进

Redis为了到达最快的读写速率将数据都读到内存中,并通过异步的方法将数据写入磁盘。以是redis具有快速和数据耐久化的特性。假如不将数据放在内存中,磁盘I/O速率为严峻影响redis的机能。在内存越来越自制的本日,redis将会越来越受接待。

假如配置了最大行使的内存,则数据已有记录数到达内存限值后不能继承插入新值。

10.Redis是单历程单线程的

redis操作行列技能将并发会见变为串行会见,消除了传统数据库串行节制的开销

11.redis的并发竞争题目怎样办理?

Redis为单历程单线程模式,回收行列模式将并发会见变为串行会见。Redis自己没有锁的观念,Redis对付多个客户端毗连并不存在竞争,可是在Jedis客户端对Redis举办并发会见时会产生毗连超时、数据转换错误、阻塞、客户端封锁毗连等题目,这些题目均是因为客户端毗连紊乱造成。

对此有2种办理要领:

1.客户端角度,为担保每个客户端间正常有序与Redis举办通讯,对毗连举办池化,同时对客户端读写Redis操纵回收内部锁synchronized。

2.处事器角度,操作setnx实现锁。

注:对付第一种,必要应用措施本身处理赏罚资源的同步,可以行使的要领较量普通,可以行使synchronized也可以行使lock;第二种必要用到Redis的setnx呼吁,可是必要留意一些题目。

12.redis事物的相识CAS(check-and-set 操纵实现乐观锁 )?

和浩瀚其余数据库一样,Redis作为NoSQL数据库也同样提供了事宜机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个呼吁是我们实现事宜的基石。

信托对有相关型数据库开拓履历的开拓者而言这一观念并不生疏,即便云云,我们照旧会扼要的列出Redis中事宜的实现特性:

  1. 在事宜中的全部呼吁都将会被串行化的次序执行,事宜执行时代,Redis不会再为其余客户端的哀求提供任那里事,从而担保了事物中的全部呼吁被原子的执行。
  2. 和相关型数据库中的事宜对比,在Redis事宜中假若有某一条呼吁执行失败,厥后的呼吁如故会被继承执行。
  3. 我们可以通过MULTI呼吁开启一个事宜,有相关型数据库开拓履历的人可以将其领略为"BEGIN TRANSACTION"语句。在该语句之后执行的呼吁都将被视为事宜之内的操纵,最后我们可以通过执行EXEC/DISCARD呼吁来提交/回滚该事宜内的全部操纵。这两个Redis呼吁可被视为等同于相关型数据库中的COMMIT/ROLLBACK语句。
  4. 在事宜开启之前,假如客户端与处事器之间呈现通信妨碍并导致收集断开,厥后全部待执行的语句都将不会被处事器执行。然而假如收集间断变乱是产生在客户端执行EXEC呼吁之后,那么该事宜中的全部呼吁城市被处事器执行。
  5. 当行使Append-Only模式时,Redis会通过挪用体系函数write将该事宜内的全部写操纵在本次挪用中所有写入磁盘。然而假如在写入的进程中呈现体系瓦解,如电源妨碍导致的宕机,那么此时大概只有部门数据被写入到磁盘,而其它一部门数据却已经丢失。

Redis处事器会在从头启动时执行一系列须要的同等性检测,一旦发明相同题目,就会当即退出并给出响应的错误提醒。

此时,我们就要充实操作Redis器材包中提供的redis-check-aof器材,该器材可以辅佐我们定位到数据纷歧致的错误,并将已经写入的部门数据举办回滚。修复之后我们就可以再次从头启动Redis处事器了。

13.WATCH呼吁和基于CAS的乐观锁: 

在Redis的事宜中,WATCH呼吁可用于提供CAS(check-and-set)成果。假设我们通过WATCH呼吁在事宜执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值产生了变革,EXEC呼吁执行的事宜都将被放弃,同时返回Null multi-bulk应答以关照挪用者事宜

执行失败。譬喻,我们再次假设Redis中并未提供incr呼吁来完成键值的原子性递增,假如要实现该成果,我们只能自行编写响应的代码。其伪码如下:

  1. val = GET mykey  
  2. val = val + 1  
  3. SET mykey $val 

以上代码只有在单毗连的环境下才可以担保执行功效是正确的,由于假如在统一时候有多个客户端在同时执行该段代码,那么就会呈现多线程措施中常常呈现的一种错误场景--竞态争用(race condition)。

好比,客户端A和B都在统一时候读取了mykey的原有值,假设该值为10,从此两个客户端又均将该值加一后set回Redis处事器,这样就会导致mykey的功效为11,而不是我们以为的12。为了办理相同的题目,我们必要借助WATCH呼吁的辅佐,见如下代码:

  1. WATCH mykey  
  2. val = GET mykey  
  3. val = val + 1  
  4. MULTI  
  5. SET mykey $val  
  6. EXEC 

和此前代码差异的是,新代码在获取mykey的值之前先通过WATCH呼吁监控了该键,从此又将set呼吁困绕在事宜中,这样就可以有用的担保每个毗连在执行EXEC之前,假如当前毗连获取的mykey的值被其余毗连的客户端修改,那么当前毗连的EXEC呼吁将执行失败。这样挪用者在判定返回值后就可以获悉val是否被从头配置乐成。

14.redis耐久化的几种方法

1、快照(snapshots)

缺省环境环境下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以设置Redis的耐久化计策,譬喻数据齐集每N秒钟有高出M次更新,就将数据写入磁盘;可能你可以手工挪用呼吁SAVE或BGSAVE。

(编辑:湖南网)

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

热点阅读