Redis面试相关

1.Redis中的数据结构

答:字符串String、字典Hash、列表List、集合Set、有序集合SortedSet、HyperLogLog(基数统计)、Geo(地理位置)、Pub/Sub(发布订阅)。Redis Module、RedisSearch、Redis-ML是什么鬼,后续要学习一下。BlomFilter过滤器即多个Hash函数判定一个Key是否存在,在允许一定误判场景下,BloomFilter是有用的,扩展BloomFilter等。

2.Redis分布式锁

setnx + expire命令或者set ex nx命令,推荐使用后者。因为,setnx + expire为两条指令并非原子操作,在setnx命令执行成功,expire命令执行失败的情况下会导致该key被一直锁住,因为平常使用分布式锁时,推荐使用set ex nx命令的原子操作。

3. Redis key处理相关

Redis中提供了keys命令可以我们按照指定模式进行key查找。例如,查找某一前缀的所有key,可以这么搞keys prefix。像这种按模式匹配key查找的命令是要进行整个键空间的扫描的且Redis是单线程的,扫描大量的键空间,会导致线上服务停顿,直到该指令执行完毕,服务才能恢复。通常采用scan这种无阻塞的方法进行整个键空间的增量式迭代。例如,scan mykey 0 match prefix,返回指定匹配模式的键,采用这种方法可能存在key重复的情况,应用程序代码中需要进行去重处理。

4.Redis异步队列

Redis中一般使用List作为队列,rpush生产消息,lpop消费消息,阻塞式消费消息采用blpop或brpop命令。如果需要实现一对多的生产消费,则需要结合Redis的Pub/Sub发布订阅机制,实现1:N的消息队列。使用发布订阅机制,在消费者下线的情况下,生产的消息将会丢失,必须使用专业的消息队列。

Redis中延时队列的实现方法:采用sortedset(有序集合),其中score值采用时间戳,应用程序代码按照时间段轮询,每次通过sortedset提供的zrangebyscore命令获取某段时间内相关的key,进行相应处理

5. Redis过期处理

Redis在处理某一时刻大量key过期的情况下,会存在短暂的卡顿现象。正确地设置过期时间的方法是在某一固定时间的基础上增加一个随机偏移。

6. Redis持久化

bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在redis实例重启时,优先使用aof来恢复内存的状态,如果没有aof日志,就会使用rdb文件来恢复。

如果再问aof文件过大恢复时间过长怎么办?你告诉面试官,Redis会定期做aof重写,压缩aof文件日志大小。如果面试官不够满意,再拿出杀手锏答案,Redis4.0之后有了混合持久化的功能,将bgsave的全量和aof的增量做了融合处理,这样既保证了恢复的效率又兼顾了数据的安全性。这个功能甚至很多面试官都不知道,他们肯定会对你刮目相看。

如果对方追问那如果突然机器掉电会怎样?取决于aof日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。

如果对方追问bgsave的原理是什么?你给出两个词汇就可以了,fork和cow。fork是指redis通过创建子进程来进行bgsave操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。

7. Redis pipeline

Redis pipeline可以将多次I/O往返的时间缩减为一次,能够使用pipeline的前提是各个指令之间没有因果关系。redis-benchmark进行压测的时候显示影响redis qps峰值的一个重要因素是pipeline批次指令的数目。

8. Redis同步机制

Redis可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后将rdb镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

9. Redis集群

Redis Sentinal着眼于高可用,在master宕机时自动将slave提升为master,继续提供服务。
Redis Cluster着眼于扩展性,在单机内存不足的情况下,使用Cluster进行数据分片存储。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 1、什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据...
    夜风月圆阅读 2,213评论 0 23
  • 使用缓存是系统性能优化的第一黄金法则。 缓存的设计和使用对一个系统的性能至关重要,平时接触到项目无论多少也都会在某...
    刀刃丿阅读 1,327评论 0 6
  • 从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明...
    不变甄心阅读 692评论 0 4
  • 文章已经放到github上 ,如果对您有帮助 请给个star[https://github.com/qqxuanl...
    尼尔君阅读 2,280评论 0 22
  • 只有自己会很爱很爱自己,不要在意别人的说法,其实最重要的,仅仅是做好自己,不要为了不必要的人去改变自己,因为也许你...
    Zurichy阅读 132评论 0 1