anyuan2002.com - vwin网

查找: 您的方位主页 > 网络频道 > 阅览资讯:史上最全Redis面试题(含答案):岗兵+仿制+事务+集群+耐久化等

史上最全Redis面试题(含答案):岗兵+仿制+事务+集群+耐久化等

2019-04-04 08:10:07 来历:www.anyuan2002.com 【

史上最全Redis面试题(含答案):岗兵+仿制+事务+集群+耐久化等

 

Redis支撑哪几种数据类型?

支撑多种类型的数据结构

1.string:最根本的数据类型,二进制安全的字符串,最大512M。

2.list:依照添加次序坚持次序的字符串列表。

3.set:无序的字符串调集,不存在重复的元素。

4.sorted set:已排序的字符串调集。

5.hash:key-value对的一种调集。

Redis首要有哪些功用?

1.岗兵(Sentinel)和仿制(Replication)

Redis服务器毫无预兆的停工是个麻烦事,怎样确保备份的机器是原始服务器的完好备份呢?这时分就需求岗兵和仿制。

岗兵Sentinel能够办理多个Redis服务器,它供给了监控,提示以及主动的毛病搬运的功用,Replication则是担任让一个Redis服务器能够装备多个备份的服务器。

Redis也是运用这两个功用来确保Redis的高可用的。

2.事务

许多情况下咱们需求一次履行不止一个指令,而且需求其一起成功或许失利。redis对事务的支撑也是源自于这部分需求,即支撑一次性按次序履行多个指令的才能,并确保其原子性。

3.LUA脚本

在事务的基础上,假如咱们需求在服务端一次性的履行更杂乱的操作(包含一些逻辑判别),则lua就能够排上用场了。

4.耐久化

redis的耐久化指的是redis会把内存的中的数据写入到硬盘中,在redis从头发动的时分加载这些数据,然后最大极限的下降缓存丢掉带来的影响。

5.集群(Cluster)

单台服务器资源的总是有上限的,CPU资源和IO资源咱们能够经过主从仿制,进行读写别离,把一部分CPU和IO的压力搬运到从服务器上,这也有点相似mysql数据库的主从同步。

在Redis官方的分布式计划出来之前,有twemproxy和codis两种计划,这两个计划总体上来说都是依靠proxy来进行分布式的,下面的内容有详细集群计划详解。

Redis是单进程单线程的?

Redis是单进程单线程的,Redis运用行列技能将并发拜访变为串行拜访,消除了传统数据库串行操控的开支。

Redis为什么是单线程的?

多线程处理睬涉及到锁,而且多线程处理睬涉及到线程切换而耗费CPU。由于CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或许网络带宽。单线程无法发挥多核CPU功能,不过能够经过在单机开多个Redis实例来处理。

其它开源软件选用的模型

Nginx:多进程单线程模型

Memcached:单进程多线程模型

运用Redis的优势?

  1. 速度快,由于数据存在内存中,相似于HashMap,HashMap的优势便是查找和操作的时刻杂乱度都是O(1)
  2. 支撑丰厚数据类型,支撑string,list,set,sorted set,hash
  3. 支撑事务,操作都是原子性,所谓的原子性便是对数据的更改要么悉数履行,要么悉数不履行
  4. 丰厚的特性:可用于缓存,音讯,按key设置过期时刻,过期后将会主动删去

Redis单点吞吐量

单点TPS到达8万/秒,QPS到达10万/秒,弥补下TPS和QPS的概念

1.QPS: 运用体系每秒钟最大能承受的用户拜访量

每秒钟处理完恳求的次数,留意这里是处理完,详细是指宣布恳求到服务器处理完结功回来成果。能够了解在server中有个counter,每处理一个恳求加1,1秒后counter=QPS。

2.TPS: 每秒钟最大能处理的恳求数

每秒钟处理完的事务次数,一个运用体系1s能完结多少事务处理,一个事务在分布式处理中,可能会对应多个恳求,关于衡量单个接口服务的处理才能,用QPS比较合理。

Redis比较memcached有哪些优势?

1.memcached一切的值均是简略的字符串,Redis作为其替代者,支撑更为丰厚的数据类型

2.Redis的速度比memcached快许多

3.Redis能够耐久化其数据

4.Redis支撑数据的备份,即master-slave方法的数据备份。

Redis有哪几种数据筛选战略?

在Redis中,答运用户设置最大运用内存巨细server.maxmemory,当Redis 内存数据集巨细上升到必定巨细的时分,就会实施数据筛选战略。

1.volatile-lru:从已设置过期的数据会集挑选最近最少运用的筛选

2.volatile-ttr:从已设置过期的数据会集挑选即将过期的数据筛选

3.volatile-random:从已设置过期的数据会集恣意挑选数据筛选

4.allkeys-lru:从数据会集挑选最近最少运用的数据筛选

5.allkeys-random:从数据会集恣意挑选数据筛选

6.noenviction:制止筛选数据

redis筛选数据时还会同步到aof

Redis集群计划应该怎样做?都有哪些计划?

1.twemproxy

2.codis,现在用的最多的集群计划,根本和twemproxy共同的效果,但它支撑在 节点数量改动情况下,旧节点数据可康复到新hash节点。

3.Redis cluster3.0自带的集,特色在于他的分布式算法不是共同性hash,而是hash槽的概念,以及本身支撑节点设置从节点。

详细请查看:高并发架构系列:详解Redis的存储类型、集群架构、以及运用场景

Redis读写别离模型

经过添加Slave DB的数量,读的功能能够线性添加。为了防止Master DB的单点毛病,集群一般都会选用两台Master DB做双机热备,所以整个集群的读和写的可用性都十分高。

读写别离架构的缺点在于,不管是Master仍是Slave,每个节点都必须保存完好的数据,假如在数据量很大的情况下,集群的扩展才能仍是受限于单个节点的存储才能,而且关于Write-intensive类型的运用,读写别离架构并不适宜。

Redis数据分片模型

为了处理读写别离模型的缺点,能够将数据分片模型运用进来。

能够将每个节点当作都是独立的master,然后经过事务完结数据分片。

结合上面两种模型,能够将每个master规划成由一个master和多个slave组成的模型。

Redis供给了哪几种耐久化方法?

RDB耐久化方法能够在指定的时刻距离能对你的数据进行快照存储

AOF耐久化方法记载每次对服务器写的操作,当服务器重启的时分会从头履行这些指令来康复原始的数据,AOF指令以Redis协议追加保存每次写的操作到文件结尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.

假如你只期望你的数据在服务器运转的时分存在,你也能够不运用任何耐久化方法.

你也能够一起敞开两种耐久化方法, 在这种情况下, 当Redis重启的时分会优先载入AOF文件来康复原始的数据,由于在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完好.

最重要的作业是了解RDB和AOF耐久化方法的不同,让咱们以RDB耐久化方法开端。

怎样挑选适宜的耐久化方法?

  1. Redis首要供给了两种耐久化机制:RDB和AOF
  2. RDB默许敞开,会依照装备的指守时刻将内存中的数据快照到磁盘中,创立一个dump.rdb文件,Redis发动时再康复到内存中。

Redis会独自创立fork()一个子进程,将当时父进程的数据库数据仿制到子进程的内存中,然后由子进程写入到临时文件中,耐久化的进程完毕了,再用这个临时文件替换前次的快照文件,然后子进程退出,内存开释。

需求留意的是,每次快照耐久化都会将主进程的数据库数据仿制一遍,导致内存开支加倍,若此刻内存不足,则会堵塞服务器运转,直到仿制完毕开释内存;都会将内存数据完好写入磁盘一次,所以假如数据量大的话,而且写操作频频,必定会引起许多的磁盘I/O操作,严重影响功能,而且最终一次耐久化后的数据可能会丢掉;

3.AOF以日志的方法记载每个写操作(读操作不记载),只需追加文件但不能够改写文件,Redis发动时会依据日志自始至终悉数履行一遍以完结数据的康复作业。包含flushDB也会履行。

首要有两种方法触发:有写操作就写、每秒守时写(也会丢数据)。

由于AOF选用追加的方法,所以文件会越来越大,针对这个问题,新增了重写机制,便是当日志文件大到必定程度的时分,会fork出一条新进程来遍历进程内存中的数据,每条记载对应一条set句子,写到临时文件中,然后再替换到旧的日志文件(相似rdb的操作方法)。默许触发是当aof文件巨细是前次重写后巨细的一倍且文件大于64M时触发。

当两种方法一起敞开时,数据康复Redis会优先挑选AOF康复。一般情况下,只需运用默许敞开的RDB即可,由于相关于AOF,RDB便于进行数据库备份,而且康复数据集的速度也要快许多。

敞开耐久化缓存机制,对功能会有必定的影响,特别是当设置的内存满了的时分,更是下降到几百reqs/s。所以假如仅仅用来做缓存的话,能够关掉耐久化。

Redis常见功能问题和处理计划?

(1) Master最好不要做任何耐久化作业,如RDB内存快照和AOF日志文件

(2) 假如数据比较重要,某个Slave敞开AOF备份数据,战略设置为每秒同步一次

(3) 为了主从仿制的速度和衔接的安稳性,Master和Slave最好在同一个局域网内

(4) 尽量防止在压力很大的主库上添加从库

(5) 主从仿制不要用图状结构,用单向链表结构更为安稳,即:Master <- Slave1 <- Slave2 <- Slave3...

这样的结构便利处理单点毛病问题,完结Slave对Master的替换。假如Master挂了,能够马上启用Slave1做Master,其他不变。

Redis支撑的Java客户端都有哪些?官方引荐用哪个?

Redisson、Jedis、lettuce等等,官方引荐运用Redisson。

Redis哈希槽的概念?

Redis集群没有运用共同性hash,而是引入了哈希槽的概念,当需求在 Redis 集群中放置一个 key-value 时,依据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

Redis集群最大节点个数是多少?

Redis集群预分好16384个桶(哈希槽)

Redis集群的主从仿制模型是怎样的?

为了使在部分节点失利或许大部分节点无法通讯的情况下集群依然可用,所以集群运用了主从仿制模型,每个节点都会有N-1个仿制品.

Redis集群会有写操作丢掉吗?为什么?

Redis并不能确保数据的强共同性,这意味这在实践中集群在特定的条件下可能会丢掉写操作。

Redis集群之间是怎样仿制的?

异步仿制

Redis怎样做内存优化?

尽可能运用散列表(hashes),散列表(是说散列表里边存储的数少)运用的内存十分小,所以你应该尽可能的将你的数据模型笼统到一个散列表里边。比方你的web体系中有一个用户目标,不要为这个用户的称号,姓氏,邮箱,暗码设置独自的key,而是应该把这个用户的一切信息存储到一张散列表里边.

Redis收回进程怎样作业的?

一个客户端运转了新的指令,添加了新的数据。

Redi查看内存运用情况,假如大于maxmemory的约束, 则依据设定好的战略进行收回。

Redis收回运用的是什么算法?

LRU算法

Redis有哪些适宜的场景?

1)Session同享(单点登录)

2)页面缓存

3)行列

4)排行榜/计数器

5)发布/订阅

 
 

本文地址:http://www.anyuan2002.com/a/question/100256.html
Tags: Redis 史上 最全
修改:vwin网
关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部