面试题——Redis

devtools/2024/10/18 5:52:38/

1.简述一下缓存穿透,缓存击穿,缓存雪崩 ?

缓存穿透:大量恶意请求一个不存在的数据,使得压力绕过Redis缓存层打到数据库,造成数据库瘫痪

处理:设置黑名单,维护一个可能存在也可能不存在的黑名单数据列表,对请求进行过滤(简单高效)

布隆过滤器,会出现误删,且相对麻烦(不存在一定不存在,存在可能存在[即误判])

缓存击穿:缓存在某一时刻key过期,恰巧有大量对这个key的请求打过来,大并发会把数据库压垮

处理:提前预热,用Xxl-job,在秒杀开始前每十分钟扫描一次,如果过期,就发送查询请求,让Redis去数据库拿数据写到Redis中

缓存雪崩:在Redis设置了相同的TTL(过期时间),导致在同一时刻大量的Key同时失效

处理:错峰:用随机生成数设置TTL,使每个Key的过期时间都不一样,避免集体失效


2.为什么用Redis?(优点)

1.内存型数据库,效率快

2.工作单线程worker,串行化原子操作(IO线程是多线程)-避免上下文切换

3.IO模型,支持高并发

4.KV模型,V具有类型结构

5.具有本地方法,计算向数据移动

6.二进制安全,Value最大512M


3.如何保证缓存数据库一致性

一般我们采取延迟双删,即先删除缓存再更新数据库数据,搁3~5秒再删除缓存数据.但极端情况下也会出现某线程速度慢,运行耗时超过了双删的时间,所以延迟双删也不能绝对保证一致性.

所以我们采取了阿里的Canal,用Canal监听数据库的变化,发生变化时用一个消费者更新Redis的缓存,最终保持一致性.


4.Redis数据结构应用场景

1.字符串(String): 储存字符串,整数,浮点数等类型值。 (计数器:访问量统计,销量统计)

2.列表(List): 按照插入顺序储存一组字符串

3.集合(Set):无序储存一组字符串,支持集合运算。(交集并集)

4.有序集合(ZSet):有序储存一组字符串,每个字符串关联一个分数,(排行榜,统计排名)

5.哈希表(Hash):储存键值对,其中键值都是字符串类型


5.Redis是单线程还是多线程?

总结:Redis5是单线程         Redis6后是单线程+多线程(即工作线程单线程,IO线程多线程)


6.Redis的持久化?

RDB:存储数据结果,关注点在数据(快照)

AOF:存储操作过程,关注点在数据的操作过程(命令)

优点:

RDB:恢复数据快 ; 不额外占用空间

AOF:不易丢失数据,安全性高 ; 保存所有写操作,可读性高

 缺点:

RDB:快照有间隔,丢失数据多 ; 数据集庞大时fork()非常耗时,可能造成服务器停止处理客户端

AOF:恢复数据速度慢 ; 占用空间大


7.在百万keys的Redis里面,如何模糊查找某个key. 

使用Scan:每次调用scan 命令都会返回一个新的游标和一批键名,可以分批查找 ,这样就不会造成线程的阻塞,提高了查询效率。


8.Redis的Key过期策略?

我们一般采取

惰性删除:当用户查询某个Key时,会检查这个Key是否已经过期,如果没过期则返回用户,如果过期则删除。

定期删除:定期删除是在Redis内部有一个定时任务,会定期删除一些过期的key。

两种策略都无法保证过期Kye一定删除,当内存不足时,Redis还会做内存回收,我们采取的是allkeys-lru,在内存不足时,会移除最近最少使用的key。


9.Redis集群模式

1.哨兵模式    2.主从复制    3.Redis官方的Cluster集群模式


10.为什么使用redis分布式锁?

为什么要用分布式锁? 保证一个方法在高并发情况下的同一时间只能被同一个线程执行。

相较于mysql分布式锁,redis分布式锁性能上更好,提供了原子操作,功能上更加丰富.设置一个ttl过期时间,通过Redis分布式锁的看门狗机制,会自动检查线程是否执行完毕,若没有执行完毕则给线程续命,继续延长着任务ttl


http://www.ppmy.cn/devtools/51025.html

相关文章

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发,同时发起代码评审,但合入master的时候存在先后顺序,那么后面同文件的操作则会提示“合并有文件冲突”,导致代码无法入库,只能重新提交。 在个人分支中如何解决与master分支差异&#…

CP AUTOSAR标准之COM(AUTOSAR_CP_SWS_COM)(更新中……)

1 简介和功能概述 本规范是AUTOSAR COM模块软件规范。它基于AUTOSAR COM SRS[1]。它指定了如何实现AUTOSAR COM SRS的要求。这意味着本文档描述了AUTOSAR COM模块的功能和API。   在AUTOSAR分层架构中,AUTOSAR COM模块位于其用户(例如RTE、SwCluC)和PDU路由器之间,参见[2]。…

Java面试八股之内部类有哪些类型

内部类有哪些类型? Java内部类(Inner Class)是指在一个类的内部定义的类。内部类有多种类型,包括成员内部类(非静态内部类)、静态内部类(Static Nested Class)、局部内部类&#xf…

数据结构——排序

引言:在某宝上,当我们以价格升序或者降序来选择商品时,是什么让数以上百万件商品整齐地按照价格排成一列?当我们搜索中国大学排名时,又是哪种算法将中国的大学由高到低进行排列? 而问题的答案就可以在本篇博…

人工智能对零售业的影响

机器人、人工智能相关领域 news/events (专栏目录) 本文目录 一、人工智能如何改变零售格局二、利用人工智能实现购物体验自动化三、利用人工智能改善库存管理四、通过人工智能解决方案增强客户服务五、利用人工智能分析消费者行为六、利用 AI 打造个性化…

AI数字人的开源解决方案

目前,国内外已经涌现出一些优秀的数字人开源解决方案,这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1…

计算机毕业设计Python+Django农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop Hive

课题研究的意义,国内外研究现状、水平和发展趋势 研究意义21世纪是一个信息爆炸的时代,人们在日常生活中可接触到的信息量非常之巨大。推荐系统逐步发展,其中又以个性化推荐系统最为瞩目。个性化推荐系统的核心在于个性化推荐算法&#xff0c…

如何保证数据库和缓存的一致性

背景:为了提高查询效率,一般会用redis作为缓存。客户端查询数据时,如果能直接命中缓存,就不用再去查数据库,从而减轻数据库的压力,而且redis是基于内存的数据库,读取速度比数据库要快很多。 更新…