泛亚电竞
Mou Mou Jidian Generator
发电机维修 发电机回收
发电机出售 发电机租赁
客户统一服务热线

0885-184732233
15443994687

您的位置: 主页 > 工程案例 > 公司企业 >

Redis面试知识点

本文摘要:NOSQL与大数据的特点NOSQL与大数据的特点Redis 事务Redis乐观锁Redis的持久化redis的消息公布与订阅:Redis 集群Redis的缓存穿透,击穿和雪崩下令NOSQL: Not only SQL,不只是数据库,泛指非关系型数据库,好比redis。大数据的3V + 3高: 3V:海量Velum,多样Variety 实时Velocity3高:高并发 高可扩 高性能Redis: Remote Dictionary Server 远程字典服务。

泛亚电竞登录

NOSQL与大数据的特点NOSQL与大数据的特点Redis 事务Redis乐观锁Redis的持久化redis的消息公布与订阅:Redis 集群Redis的缓存穿透,击穿和雪崩下令NOSQL: Not only SQL,不只是数据库,泛指非关系型数据库,好比redis。大数据的3V + 3高: 3V:海量Velum,多样Variety 实时Velocity3高:高并发 高可扩 高性能Redis: Remote Dictionary Server 远程字典服务。是一个开源的,使用C编写的,支持网络、可基于内存亦可以持久化的日志型,key-value数据库,并提供了多种语言的支持。

Redis 事务Redis 事务: redis事务的本质是一组下令的荟萃,一个事务的所有下令都市被序列化,在事务的执行历程中,会根据顺序执行。所有的下令并不是直接就执行,而是提倡执行下令才会执行!所以事务的执行为:开启事务-》下令入队-》执行事务。Node02:6379>MULTIOKNode02:6379>setkey1123QUEUEDNode02:6379>getkey1QUEUEDNode02:6379>EXEC1)OK2)"123"Node02:6379>还可以取消事务:用discardnode02:6379>MULTIOKnode02:6379>setkey1345QUEUEDnode02:6379>DISCARDOKnode02:6379>getkey1"123"如果在事务中有异常,如果是编译时异常,好比是下令写错了,整个事务都不会执行,可是如果是运行时异常,则其他下令照样可以执行乐成。

Redis乐观锁Redis乐观锁:使用watch 和事务同时使用,意思是Wath监控key,之后开启事务执行相应的操作,这个时候如果有此外线程更改了这个key的值,那么等你执行事务的时候就会执行失败。这个是个乐观锁。

原理就是watch 监控key,举行exec的时候,再去获取key。去和Wath的比力,如果相同则执行,否则就会失败。

Redis的持久化Redis的持久化:指的是在指定的时间距离内,将内存的数据集快照写入磁盘,防止机械宕机时数据的丢失,恢复的时候将快照内容读取到内存。两种方式,一种是RDB模式,一个是AOF。RDB模式生存的文件是以rdb,Redis会fork一个一个子历程来举行持久化,会将数据先写入一个暂时文件,当持久化竣事之后用这个暂时文件替换之前的文件。

整个历程主历程不举行任何的IO操作,这个就保证了性能。这种方式默认在设置文件中是开启的:save9001save30010save6010000#save51dbfilename"dump.rdb"dir"位置"#前三个选项表现的是多长时间内举行了几多次操作就会举行生存一次,#好比第一个#表现的是900秒内至少有一个key发生了变化就#举行生存操作,第二个表现300秒内至少10个key发生了变化就会就行生存,dbfilename指的是数据库的名称,dir是位置#rdbcompressionyes#说明:设置存储至当地数据库时是否压缩数据,默认为yes,接纳LZF压缩#履历:通常默认为开启状态,如果设置为no,可以节约CPU运行时间,但会使存储#的文件变大(庞大)#rdbchecksumyes#说明:设置是否举行RDB文件花样校验,该校验历程在写文件和读文件历程均举行#履历:通常默认为开启状态,如果设置为no,可以节约读写性历程约10%时间消耗,#可是存在一定的数据损坏风险这个持久化的优点是:1. 存储的是一个压缩的二进制文件,效率高。2. 存储的是某一个时间点的所有数据,适合数据的,全量复制等场景,3,恢复速度要比AOF快,缺点是:可能会丢失一部门数据,好比说在60秒还没有1000个key发生变化,就宕机了,这个时候发生变化的kye就丢失了。

单独fork一个子历程,也是要泯灭一些性能的。AOF方式的是追加文件,指的是把我们所有的写下令以日志的形式记载下来,追加到文件内里后缀为aof,redis恢复的时候去读取aof文件重新构建数据,到达恢复的目的。

这种方式也是单独的开启一个子线程举行操作。appendonlyno#默认这种方式是关闭的,yes打开appendfilename"appendonly.aof"#aof文件名appendfsynceverysec#aof持久化计谋的设置#no表现不执行fsync,由操作系统保证数据同步到磁盘,速度最快。#always表现每次写入都执行fsync,以保证数据同步到磁盘。#everysec表现每秒执行一次fsync,可能会导致丢失这1s数据。

no-appendfsync-on-rewriteno#在aof重写或者写入rdb文件的时候,会执行大量IO,#此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,#no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,#否则还是设置为no,这样对持久化特性来说这是更宁静的选择。#设置为yes表现rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,#如果是yes。Linux的默认fsync计谋是30秒。

可能丢失30秒数据。auto-aof-rewrite-percentage100#aof自动重写设置。

当现在aof文件巨细凌驾上一次重写的aof文件巨细的百分之几多#举行重写,即当aof文件增长到一定巨细的时候Redis能够挪用bgrewriteaof对日志文件举行重写。#当前AOF文件巨细是上越日志重写获得AOF文件巨细的二倍(设置为100)时,自动启动新的日志重写历程。

泛亚电竞

auto-aof-rewrite-min-size64mb#设置允许重写的最小aof文件巨细,#制止了到达约定百分比但尺寸仍然很小的情况还要重写aof-load-truncatedyes#aof文件可能在尾部是不完整的,当redis启动的时候,#aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,#尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造成尾部不完整现象。)泛起这种现象,#可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,#会自动公布一个log给客户端然后load。

如果是no,用户必须手动redis-check-aof修复AOF文件才可以。上面的设置文件有说重写,随着下令的不停写入,aof文件会越来越大,为相识决这个问题,redis引入了重写机制来压缩体积。

重写的意思是可以简朴明白为对于一个数据的若干个执行下令转化为最终效果的执行的下令,这样的话日志文件就会小许多。如果aof文件有问题,redis是启动不起来的,有一个redis-check-aof,所以如果有问题的话,可以用这个工具举行修复 redis-check=aof --fix xxxxx这种方式的优点是: 最宁静,数据不会轻易的丢失,纵然设置的模式是everysec,每秒执行执行一次,也只会丢失一秒的数据,在写aof文件的时候哪怕只写了一半,导致aof文件损坏,可以用工具举行恢复,而且aof文件易于修改,我们可以直接举行修改。缺点是:AOF文件太大,性能消耗高,恢复慢redis的消息公布与订阅:SUBSCRIBEchannel[channel...]订阅一个或多个频道PUBLISHchannelmessage公布消息原理:通过subscribe下令订阅了一个频道后,redis-server里会维护一个字典,字典内里的每一个值就是一个频道,每一个值对应一个链表,链表中存储的是每一个订阅了这个频道的客户端,所以subscribe的作用就是把客户端添加到链表中。

publish向订阅者公布消息的时候,redis-server会用给定的频道,在字典中查找这个频道的链表,遍历链表,将消息公布给订阅的客户端。Redis 集群单个的redis-server存在不确定性,当redis-server挂了就没有服务可用了,而且单个server的读写能力有限, 所以需要集群模式。在集群中分为主节点master,和从节点slave,redis集群基于主从复制实现。在redis的的集群中一个master节点,多个slave节点,master节点卖力写,slave节点卖力读。

master节点会一直将数据同步给从节点。这种架构实现了读写分散,也不用担忧数据的恢复。这种模式的设置也很简朴只需要在从节点的设置文件中加上:slaveofmaster节点6379如果设置文件没有加,直接使用下令也可以的。

这种架构中master节点只卖力写,可是如果master节点挂了,那么系统中也就没有能写的节点了,所以这种架构也是有问题了,为相识决这个问题,提供了一种哨兵模式。哨兵模式: sentinel 哨兵。sentinel系统用于治理多个redis服务器,监控主节点和从节点是否能正常的运行,当某一个redis服务器泛起了故障,哨兵可以通过api向治理员或者其他法式发出通知,最主要的功效是,当master节点不能正常事情了之后,sentinel会举行一次故障迁移操作,从从节点中选取一个节点作为主节点,那这样的话就解决了主节点挂了就没有节点可以写的问题了。

哨兵作为一个单独的历程而存在的,所以需要差别的设置文件:vimsentinel.conf#port26379端口,如果一台机械上只开启一个哨兵可以不设置,sentinelmonitormymaster192.168.8.10063792#sentinelmonitor代表监控,mymaster是服务名称,可以自界说;#192.168.8.100地址;6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不行用的时候,#才会举行failover操作需要注意的是最后谁人2,表现的是在哨兵集群中 只有两个以上的哨兵认为主服务器不行用的时候才会举行迁移操作。哨兵作为一个单独的历程,如果只有一个哨兵的话,那这个历程挂了,那哨兵系统也就挂了,所以一般会为哨兵设置一个集群,一般是三个。在测试中一般是一个就可以,那么2应该改为1Redis的缓存穿透,击穿和雪崩缓存穿透指的是当用户查询一个数据的时候,发现redis内存没有,那么就需要去数据库查询,发现数据库也没有,这次查询失败。

当用户许多的时候,查询都没有掷中,这就会给数据库造成很大的压力,这就是缓存穿透。缓存击穿指的的是大量的请求会见一个点,就是说某一个热点好比某一个明星有出轨了,在不停的扛着大并发,当这个key失效的瞬间,连续的大并发请求就会穿破缓存到达数据库,导致数据库宕机,这就像给一个屏障上凿开了一个洞,这是缓存击穿。缓存雪崩指的是缓存层泛起了错误,或者停电了,宕机了,或者大量的缓存同时失效了,于是所有的请求都市到达数据库,造成数据库的瓦解。

缓存穿透的解决方案:设置布隆过滤器: 设置所有的可能查询的数据哈希到一个bitmap中,当用户查询的时候先使用布隆过滤器,如果发现不在荟萃中,则直接抛弃,不举行后台查询。布隆过滤器是是一组byte数组,存储0和1,对数据举行多种hash运算,将每一种hash值对应的byte位存储为1,多个hash就会有多个1,所以先对请求你的数据按规则举行hash,在byte数组中查找,如果请求的数据不在byte数组中,那么这个数据一定不存在,如果存在的话,就说明可能存在,因为byte上的面的1可能重复,可能是此外数据hash的映射。对于查询的数据如果没有话也举行缓存,缓存为空,设置的逾期时间少一些。缓存击穿的解决方案:设置热点的缓存永不外期,这种方法需要任务定时去更新数据,如果许多的话,同时更新搞欠好会泛起缓存雪崩的情况加锁。

加锁在获取缓存的方法内里,保证在多用户的情况下,只有一个线程去数据库请求数据并存入缓存中,其他的线程只需要在这个线程请求竣事并放入缓存中之后在缓存中拿数据即可缓存雪崩的解决方案:1. redis的高可用,搭建redis集群,保证redis不会全部宕机限流,就是在缓存失效之后,加锁或者缓存行列的方式来控制读写数据库的数量数据预热: 在即将发生大并发会见前手动触发加载缓存差别的key,设置差别的逾期时间,让缓存失效的时间点只管匀称。下令操作:setkey1hellogetkey1setex设置逾期时间setnx不存在的话才设置,存在key,就会失败,常用语漫衍式锁mset设置多个k-vmget获取多个k-vgetset先获得旧的值,在设置新的值list 所有的下令都是以l 开头的LPUSHlistoneLRANGElist0-1取出所有的值LPUSH放在头部,RPUSH放在尾部LPOPlist移除第一个元素RPOPlist移除最后一个元素LINDEXlist1获取下标为1的数据LLENlistlist的个数LREMlist1one移除某一个值,1表现移除一个oneLTRIMlist12通过下标截取valuerpoplpush移除列表的最后一个元素,并放到另外一个list中lsetlist0str凭据索引笼罩其他值,如果不存在列表或者索引不存在则报错先进先出是行列,先进后出是栈。

LPUSHRPOP就是行列setSADDmysetstr向set荟萃中添加元素smembersmyset检察荟萃中的所有元素SRANDMEMBERmyset2随机获取两个元素SPOPmyset随机删除一个元素SMOVEmysetmyset2str移动str从一个荟萃到另外一个荟萃SDIFFmysetmyset2差集SINTER交集SUNION并集scardmyset检察所有的元素hash 设置的键值对hsetmyhashfield1value设置键field1值是valuehgetmyhashfield1获取某一个值hgetallmyhash获取所有的值hdelmyshafield1删除hkyesmyhash所有的keyhvaluesmyhashhincrbymyhashfields自增zset 有序荟萃,和set类似,可是需要一个标志用于排序zaddmyset1one多了一个1,用于排序zrangebyscoremyset-inf+inf排序,从负无穷到正无穷,就是升序。


本文关键词:Redis,面试,知识点,NOSQL,与,大,数据,泛亚电竞登录,的,特点

本文来源:泛亚电竞-www.yxzsqc.com

Copyright © 2001-2021 www.yxzsqc.com. 泛亚电竞科技 版权所有  ICP备案:ICP备93675944号-7