Redis相关

Redis:

1.String:最基本的数据类型,二进制安全

记录用户每天访问网站的次数
通过 incr + 拼接用户id userID + 时间戳 精确到日 来记录并统计
然后通过日期和用户id查询用户的访问次数

2.Hash:String元素组成的字典,适合用于存储对象

3.List

能实现stack的功能,因此用来实现了网站的最新公告排行榜功能

4.Set (通过 sadd创建)

微博开发 将一个用户的所有关注人存在一个set中,也可以将其所有粉丝再存入一个
集合中,这样通过并集,差集,交集等来实现共同关注和喜好之类的功能

5.Sorted Set (通过zadd创建) 有序不重复的Set 从小到大排序 值得集合根据Score排序

应用: 不同用户有不同的权限,通过SortedSet来做消息队列, 普通用户score为1,会员用户为2,然后工作线程按score的大小来获取工作的任务,这样会员用户就能优先执行

6.HyperLogLog---用于计数
7.Geo----用于存储地理位置信息

面试问题1:从海量数据里查询某一固定前缀的key?

  1. 先问面试官数据量大概多少
    如果不多则可以直接通过 keys + 正则表达式方式筛选
    如果多则通过
    scan + cursor + match + count 值的命令返回
    如 scan 0 match k1* count 10
    结果会返回已经迭代的游标(cursor)和结果集,返回数量不一定是10个
    下次再查询的时候把之前得到的cursor加上
    但是注意:这个cursor不一定是递增的,因此这就意味着数据可能重复,所以需要自己实现去重操作如使用hashset.

面试问题2:如何通过Redis实现分布式锁?

1.分布式需要解决的问题

  • 互斥性
  • 安全性
  • 死锁
  • 容错

解决:

1.setnx locknx key 通过返回值判断是否成功,返回1则没有被占用,0则被占用
2.expire locknx 2 设置过期时间2s

缺陷:1和2操作都是原子性,但组合起来不一定是原子性,所以该方法可能仍旧存在key会被一直占用的问题.
更好的解决方法:
SET key value[EX seconds] [PX milliseconds] [NX|XX]

如 set locktarget 12345 ex 10 nx

  • EX second:设置键的过期时间为second秒
  • PX millisecond : 设置键的过期时间为millisecond 毫秒
  • NX : 只在键不存在时,才对键进行设置操作
  • XX: 只在键已存在时,才对键进行设置操作
  • SET 操作成功完成时,返回OK, 否则返回nil

面试问题3:大量的key同时过期的注意事项?

答: 集中过期,由于清除大量的key很耗时,因此会出现短暂的卡顿现象

解决方案:在设置key的过期时间时,给每个key加上随机值,使得过期时间分散些即可在很大程度上避免卡顿现象发生

面试问题4:如何使用Redis做异步队列?

答:使用List作为队列,RPUSH生产消息,LPOP消费消息

缺点:LPOP没有等待队列里有值,而直接消费
弥补:可以通过在应用层引入Sleep机制去调用LPOP重试

不通过sleep方式解决:

LIST里还有一条指令
BLPOP key[key...] timeout: 阻塞直到队列有消息或者超时
缺点:只能供一个消费者消费

实现一对多的消息队列:

pub/sub主题订阅者模式:
发布者(pub)向topic(频道)发布消息,多个客户端(订阅者sub)可以订阅topic的消息
缺点:消息的发布是无状态的,无法保证可达----对于发布者来说,消息即发即收的,如果发布消息后,消费者(订阅者下线),再重新上线是无法收到消息的,解决这种问题就需要更专业的消息队列,如kafka

面试问题5:Redis如何做持久化?

1.RDB(快照)持久化: 保存某个时间点的全量数据快照

在redis.conf里有默认三种策略 ,自动触发RDB持久化时候会采用这里的策略通过BGSAVE生成dump.rdb存储

  • SAVE: 阻塞Redis的服务器进程,直到RDB文件被创建完毕
  • BGSAVE: Fork出一个子进程来创建RDB文件,不阻塞服务器进程

RDB持久化缺点:

  • 内存数据的全量同步,数据量大会由于I/O而严重影响性能
  • 可能会因为Redis挂掉而丢失从当前至最近一次快照期间的数据
2.AOF持久化:保存写状态(默认关闭,通过修改redis.conf里的配置开启)
  • 记录下除了查询以外的所有更变数据库状态的指令
  • 以append的形式追加保存到AOF文件中(增量)
RDB和AOF文件共存情况下的Redis数据恢复
  • 1.优先加载AOF文件
  • 2.若不存在AOF则加载RDB
RDB和AOF的优缺点:
  • RDB优点: 全量数据快照,文件小,恢复快
  • RDB缺点: 无法保存最近一次快照之后的数据
  • AOF优点: 可读性高,适合保存增量数据,数据不易丢失
  • AOF缺点: 文件体积大,恢复时间长
redis4.0后采用默认的RDB-AOF混合持久化方式
  • BGSAVE做镜像全量持久化,AOF做增量持久化
面试问题6:为什么使用pipeline?(pipeline的好处?)
  • Pipeline和Linux的管道类似
  • Redis基于请求/响应模型,单个请求处理需要一一答应
  • Pipeline允许批量执行指令,而不需要等待上一条指令的结果,节省多次I/O往返的时间
  • 有顺序依赖的指令建议分批发送
Redis的同步机制

主从同步原理

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

推荐阅读更多精彩内容