- 1、本文档共69页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
图⽂详解 53 道 Redis ⾯试⾼频题,这次吊打⾯试官,我觉得稳了(⼿动 dog)。整理:楼仔,作者:三分
恶,戳原⽂链接。
基础
1.说说什么是Redis?
Redis是⼀种基于键值对(key-value)的NoSQL数据库。
⽐⼀般键值对数据库强⼤的地⽅,Redis中的value⽀持string (字符串)、hash (哈希)、 list (列表)、set (集
合)、zset (有序集合)、Bitmaps (位图)、 HyperLogLog 、GEO (地理信息定位)等多种数据结构,因此
Redis可以满⾜很多的应⽤场景。
⽽且因为Redis会将所有数据都存放在内存中,所以它的读写性能⾮常出⾊。
不仅如此,Redis还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的
时候,内存中的数据不会“丢失” 。
除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流⽔线、Lua脚本等附加功能。
总之,Redis是⼀款强⼤的性能利器。
2.Redis可以⽤来⼲什么?
1. 缓存
这是Redis应⽤最⼴泛地⽅,基本所有的Web应⽤都会使⽤Redis作为缓存,来降低数据源压⼒,提⾼响应速
度。
2. 计数器
Redis天然⽀持计数功能,⽽且计数性能⾮常好,可以⽤来记录浏览量、点赞量等等。
3. 排⾏榜
Redis提供了列表和有序集合数据结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。
4. 社交⽹络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新。
5. 消息队列
Redis提供了发布订阅功能和阻塞队列的功能,可以满⾜⼀般消息队列功能。
6. 分布式锁
分布式环境下,利⽤Redis实现分布式锁,也是Redis常⻅的应⽤。
Redis的应⽤⼀般会结合项⽬去问,以⼀个电商项⽬的⽤户服务为例:
Token存储:⽤户登录成功之后,使⽤Redis存储Token
登录失败次数计数:使⽤Redis计数,登录失败超过⼀定次数,锁定账号
地址缓存:对省市区数据的缓存
分布式锁:分布式环境下登录、注册等操作加分布式锁
……
3.Redis 有哪些数据结构?
Redis有五种基本数据结构。
string
字符串最基础的数据结构。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON 、
XML))、数字 (整数、浮点数),甚⾄是⼆进制(图⽚、⾳频、视频),但是值最⼤不能超过512MB。
字符串主要有以下⼏个典型使⽤场景:
缓存功能
计数
共享Session
限速
hash
哈希类型是指键值本身⼜是⼀个键值对结构。
哈希主要有以下典型应⽤场景:
缓存⽤户信息
缓存对象
list
列表(list)类型是⽤来存储多个有序的字符串。列表是⼀种⽐较灵活的数据结构,它可以充当栈和队列的⻆⾊
列表主要有以下⼏种使⽤场景:
消息队列
⽂章列表
set
集合(set)类型也是⽤来保存多个的字符串元素,但和列表类型不⼀样的是,集合中不允许有重复元素,并且集
合中的元素是⽆序的。
集合主要有如下使⽤场景:
标签(tag)
共同关注
sorted set
有序集合中的元素可以排序。但是它和列表使⽤索引下标作为排序依据不同的是,它给每个元素设置⼀个权重
(score)作为排序的依据。
有序集合主要应⽤场景:
⽤户点赞统计
⽤户排序
4.Redis为什么快呢?
Redis的速度⾮常的快,单机的Redis就可以⽀撑每秒⼗⼏万的并发,相对于MySQL来说,性能是MySQL的⼏⼗
倍。速度快的原因主要有⼏点:
1. 完全基于内存操作
2. 使⽤单线程,避免了线程切换和竞态产⽣的消耗
3. 基于⾮阻塞的IO多路复⽤机制
4. C语⾔实现,优化过的数据结构,基于⼏种基础的数据结构,redis做了⼤量的优化,性能极⾼
5.能说⼀下I/O多路复⽤吗?
引⽤知乎上⼀个⾼赞的回答来解释什么是I/O多路复⽤。假设你是⼀个⽼师,让30个学⽣解答⼀道题⽬,然后检查
学⽣做的是否正确,你有下⾯⼏个选择:
第⼀种选择:按顺序逐个检查,先检查A ,然后是B,之后是C、D。。。这中间如果有⼀个学⽣卡住,全班都
会被耽误。这种模式就好⽐,你⽤循环挨个处理socket,根本不具有并发能⼒。
第⼆种选择:你创建30个分身,每个分身
文档评论(0)