当前位置:网站首页>面试追问系列-Redis技术原理
面试追问系列-Redis技术原理
2022-08-02 14:16:00 【蒲春伟】
系列文章
引言
企业面试一般不会单纯的就某一知识点直接一问一答,毕竟问题只有那么多,背诵答案容易的多。那么如何鉴定候选人是否掌握了某项技术呢? 更多的是通过不断追问来确认候选人是否真正理解对应的技术,下面是面试过程中涉及Redis的一些关键问题及其一般追问的问题,大家可以尝试下解答下,下面有针对每一个提问有对应的解答提示。也欢迎沟通交流反馈你在面试中所遇到的问题。
- 缓存使用的业务场景有哪些?
- Redis为什么快?
- 为什么采用单线程?
- Redis 6.0之后为什么更改为多线程?
- Redis常用的数据结构有哪些?
- 如何解决缓存热点Key的问题?
- 什么缓冲击穿、缓存穿透、缓存雪崩?
- Redis数据的过期策略有哪些?
1. 缓存使用的业务场景有哪些?
存在大规模数据访问,对数据查询效率要求高且数据结构相对简单,不涉及大量的关联查询操作的业务场景下适合用缓存来提升整体的业务体验。 相比较数据库硬盘,缓存一般采用内存能够有效减少磁盘的IO操作,提高数据读写的效率,基本是高并发的互联网应用必不可少的基础服务之一。 具体应用的业务场景有:分布式Session、秒杀库存、分布式锁、会员信息等等。
2. Redis速度为什么快?
Redis的速度非常的快,单机的redis就可以支持支撑10万/秒的请求量,主要的原因有以下几点:
- 完全基于内存操作,相比较磁盘IO更快速
- 基于C语言实现,执行效率更高
- 使用单线程,无上下文切换成本
- 基于非阻塞式的IO多路复用机制
3. 为什么采用单线程?
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
4. Redis常用的数据结构有哪些?
- String:字符串,也是比较常用的一种数据结构
- List:链表,可以方便的进行链表的插入和删除,降低整体的成本,主要的应用场景有消息队列
- Hash:哈希对象Map的结构,相当于key没有变化但是Value是一个Map结构
- Set:集合对象,存储不可重复的元素集合
- ZSet:有序集合,排好序的Set,写进去自动根据数据排序
5. 热点Key的问题如何解决?
使用缓存本身就是为了解决热点问题的,但是热点数据中还是最热的数据,比如秒杀商品,一瞬间所有流量都会命中单一的Key集中在分布式缓存集群中某一台机器,导致触发单台机器的极限,进而影响到集群其它缓存数据的访问。那么如何解决热点中的热点也是日常过程中需要去重点处理的事情。一般的处理方案有以下几种:
- 多级缓存,针对热点Key在本地端也保存一份
- 将热点Key进行冗余备份到集群中的多台Redis机器中
6. 什么缓冲击穿、缓存穿透、缓存雪崩?
- 缓存击穿:缓存中的一个热点Key失效了,导致大量的请求击穿缓存直达数据库,进而对数据库性能造成较大影响。
- 缓存穿透:与缓存击穿最为根本的区别在于,Redis查询传进来的Key值是不存在的,这将导致请求的流量均直接穿透Redis缓存直达DB,一旦被外部利用将会导致非常严重的问题,所以在日常开发过程中要做好参数的校验才能够避免此类问题的产生
- 缓存雪崩:大量的Key同一时间失效,导致流量直接打到DB上导致系统整体奔溃
7. Redis数据的过期策略有哪些?
- 定时过期:根据写入数据时设置的缓存失效的时间,如果到了过期时间则立即删除,该方案对内存友好能够尽早释放内存占用,但是会消耗大量的CPU去清理过期的数据
- 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存
- 定期删除:折中的一种方案,每隔一定的时间,默认100ms,会扫描一定数量过期的Key,并清除其中已过期的key,此处不会清理全量失效的key,否则会对Redis的整体性能造成非常大的影响
- 内存淘汰:Redis集群一般会有固定的内存,到存入的数据超越总内存的大小,则会根据具体的策略来处理新增的数据,一般情况下是采用LRU算法,淘汰最近最不常用的数据Key
边栏推荐
猜你喜欢
随机推荐
【网络安全】学习笔记 --02 安全通信协议
在mininet中测试arp欺骗
【软件测试】自动化测试selenium3
adb常用命令
转行软件测试,从零收入到月薪过万,人生迎来新转折
【软件测试】基础篇
VMware 安装openwrt
grub 命令使用
【软件测试】性能测试理论
一线大厂研发流程(转载自鱼皮)
Server-Sent Events 一种轻量级的Push方式
Oauth2.0 认证服务器添加验证码登陆方式
Dcoker的安装及使用命令
移动端UI自动化相关环境配置
Debug on pure method is called
unittest框架
【线程】线程创建 | 理解线程并发 (1)
【线程】 理解线程(并行)线程同步的处理(信号量,互斥锁,读写锁,条件变量)
Oauth2.0 资源服务器搭建
Mysql索引优化一