您好!大家好,我是小七,不靠谱的程序员小七打算在轻松幽默的对话中分享一些技术。如果你觉得通过小七的文章有所收获,那就给小七点个赞吧。文章持续更新中1.前言作为一个Java程序员,Redis的一些底层原理是我们不用学就能搬砖干活的技能,但是为什么小七还说起呢?难道只是为了浪费大家宝贵的1分钟时间,一个人1分钟,50万人1年,5000万人100年。当然不是,而且小七的文章也没那么多人看,顶多浪费一个肾。学习Redis底层原理是因为面试官要问!,所以我们要学习,什么?不实用就不学吗?邻居小七要努力学习,到时候面试官只想要小七,不要你。至于为什么让面试官问Redis的底层原理,这个。..我把这个机会留给你。下次面试的时候,面试官会问:“说说Redis的底层原理”。你:“面试官你好,为什么要问Redis的底层原理?给我一台电脑,我五分钟给你搭建一个图书管理系统,好不好?让我们看看真相吧键盘。”这时候面试官会告诉你答案,你可以在评论区打出答案,让小七和很多小伙伴知道你为什么要问?2.面试是在一个阳光明媚的星期天,来到一个陌生的公园(不要问为什么是星期天,是997,但是为了填饱农民工的肚子,只能去山里旅游,知道山上有猛虎),坐在陌生的会议室里,等着HR小姐姐给面试官打电话,此时的心情和朋友们一样五味杂陈,生怕面试官的问题有难度?知识盲点怎么办?待会儿自我介绍的时候,你是不是要吹嘘我和小七的关系?进来一个帅气的面试官,眼神犀利,看着他那双仿佛能看透一切的锐利眼神,我在想,不然我一会不要20k,我要8k,这个面试官看不出来好迷茫,不过我想起来了,来之前刚刚看了小七的一个有趣的编程系列。完全领悟了小七的精髓。我顿时信心大增,决定暂时要30k。等一下(哈哈)面试官:小七,简历带来了吗?我:没带。现在彩印两块钱,我有五份简历。每次面谈十元。我的朋友说不要去一份要求你先付钱才能找到工作的工作。面试官:。..那你靠什么征服我,让我雇佣你我:气质?(这时候面试官没有叫保安,而是从门后拿出等我好久的棍子,我瞬间胆小了)只好从背包里拿出return早上问了其他公司的面试官。简历,上午的情况是这样的。早间面试官:今天的面试就这些,回去等通知吧!我:面试官你好,如果贵公司不打算招我,能不能把我的纸质简历还给我,我下午还有面试。上午面试官:我说你的简历有多皱,所以你一直在回收!这些症状出现多久了?我:半个月了。..(当我把皱巴巴的简历递给面试官的时候,面试才得以继续……)3、Redis是如何实现持久化的面试官:我看你简历上写的精通Redis?(呵呵,面试官轻蔑一笑)(看着面试官轻蔑的笑容,我忍不住拿出我的Redis书推给他)我:这本书我背熟了,有什么问题可以问,还有你不能回答他们我输了,你必须为你的轻视向我道歉。(我的笑容渐渐变得自信了。。。)(此时面试官正若有所思的看着书,我怀疑他一定在想自己对这本书了解多少)面试官:好吧,那你先说说怎么样Redis实现持久化:Redis主要有两种持久化方式,一种是RDB(快照)方式,一种是AOF格式。面试官:能不能说说这两者的区别,如何配置和使用?我们可以想象一下,如果我现在要记录一个人的姿势会是什么样子,那么我只能通过拍照或描述来记录RDB(快照)。明白了,我想知道一个人目前的姿势是什么样子的,那我就给他拍张照片,照片会表现出他的姿势。AOF可以理解为对动作的描述。我通过描述人的每一个动作,就知道这个人的姿势是什么样子的。比如人的左手六,右手七,左脚盘旋,右脚蹬地。然后我通过这些动作知道了人当前的姿势。因此,RDB快照相当于将数据保存在Redis中。还原时只需将照片取出,按照姿势还原即可。而AOF相当于记录了Redis中的每一条执行命令。还原时,需一一照做,先左手六,再右手七,再用左脚画圈,再用右脚踢。..(不明白的可以按照理解的姿势试一下)redis.conf目录下配置了RDB。命令格式为save[time][times],则以save6010000为例,表示如果至少有10000次变化,则自动保存一次,即拍一张照片。如果中间做500个变化的时候Redis挂了,那么这500个变化就找不到了。如果save命令的执行会影响Redis的正常读写,我们可以使用bgsave(copy-on-write)命令生成RDB快照。bgsave使用子线程实现快照功能,主线程继续其读写任务使用AOF来保存数据,RDB快照不会有Redis宕机的风险,因为AOF保存了每条命令,但AOF不每个命令只保存一次,这会消耗性能。我们可以设置为每1秒执行一次保存,即使丢失也只会丢失1秒的数据。可以通过在配置文件中将appendonly设置为yes来开启AOF功能。AOF有3种保存策略:appendfsyncalways:每次有新命令就保存,性能最慢,但最安全appendsynceverysec:每秒保存一次命令,速度足够快,失败时只会丢失1秒的数据appendfsyncno:从不保存,将数据交给操作系统处理。它更快,更不安全。推荐使用每秒保存一次命令的方式。1、AOF重写面试官:AOF里还原那么多命令太麻烦了。有什么办法可以优化吗?AOF文件中无用的命令太多,所以AOF会根据内存中最新的数据周期性的生成AOF文件。比如我们记录一个人的动作,发现他先举手,然后放下手,再举手,我们就可以把这些动作组合成一个动作,就是举手。因为举手、放手、举手这三个动作和只执行一个举手动作是一样的,所以我们可以配置AOF重写的频率。有两个配置项auto-aof-rewrite-percentage100(aoffilefromabove如果rewrite后文件大小增加100%,会再次触发rewrite)auto-aof-rewrite-min-size64mb(aof文件至少要达到64M才会自动重写,文件太小恢复速度会很快,写入意义不大)aof可以手动重写,命令为:bgrewriteaof,一个子进程会此时用于rewrite,不会影响redis2的正常命令。RDB和AOF混用。面试官:RDB和AOFAOF各有优缺点。我们应该如何选择?redis启动时,如果同时配置了RDB和AOF,则优先使用AOF,因为AOF更安全,但性能不是很好,但我们可以混合使用,以达到更好的效果。混合RDB和AOF。比如恢复时,先根据照片恢复上次的照片记录,再恢复拍照后记录的动作配置。启用混合使用:aof-use-rdb-preambleyes4.Redis主从架构面试官:能不能讲讲redis的主从架构,如何搭建?I:是的,redis的主从架构其实就是用一个redis节点做写操作(master节点),多个redis节点做读操作(Slave节点),master节点会将写入的数据同步到slave节点,保证从从节点读取的数据是最新的数据构建方式:主节点不需要修改任何配置,从节点修改redis.conf配置文件配置主节点的ip端口:replicaof(代表哪个从节点同步数据的主节点)配置从节点后,启动从节点。此时启动从节点,从节点会第一次从主节点获取数据。5.Redis哨兵架构面试官:能不能说说redis的哨兵架构模式,如何搭建?数据只能从从节点读取,非常不方便。然后我们建立一个哨兵集群来监控这些节点。当master节点挂掉后,我们的sentinel选举出一个slave节点成为master节点,并让写入数据的命令继续执行(我们以一个比较有名的村庄为例...)。构建:复制一个sentinel.conf文件修改,redis默认有这个文件修改端口号,sentinel命令,格式为:sentinelmonitor
