redis相关的一些面试题?

1.什么是缓存穿透,什么是缓存雪崩,什么是缓存击穿?

缓存穿透:假如某一时刻访问redis的大量key都在redis中不存在(比如黑客故意伪造一些乱七八糟的key),那么也会给数据造成压力,这就是缓存穿透,解决方案是使用布隆过滤器,它的作用就是如果它认为一个key不存在,那么这个key就肯定不存在,所以可以在缓存之前加一层布隆过滤器来拦截不存在的key

缓存击穿:和缓存雪崩类似,缓存雪崩是大批热点数据失效,而缓存击穿是指某一个热点key突然失效,也导致了大量请求直接访问Mysql数据库,这就是缓存击穿,解决方案就是考虑这个热点key不设过期时间

缓存雪崩:如果缓存中某一时刻大批热点数据同时过期,那么就可能导致大量请求直接访问Mysql了,解决办法就是在过期时间上增加一点随机值,另外如果搭建一个高可用的Redis集群也是防止缓存雪崩的有效手段

2.redis怎么设置key的过期时间?

(1)分开设置

// 两条命令分别设置值和过期时间

// 时间单位:秒

redis.expire("key",6);

// 时间单位:毫秒

//redis.pexpire("key",6000L)

(2)合并设置

一条命令同时设置值和过期时间,推荐使用此方式。

// 一条语句设置值和过期时间

// 时间单位:秒

redis.setex("key",6,"value");

// 时间单位:毫秒

//redis.psetex("key",6000L,"value")

3.redis怎么删除过期时间

(1)定期删除

当放入数据后,设置一个定时器,当定时器读秒完毕后,将对应的数据从dict中删除。

优点: 内存友好,数据一旦过期就会被删除

缺点: CPU不友好,定时器耗费CPU资源,并且频繁的执行清理操作也会耗费CPU资源。

用时间换空间

定期删除可以通过:第一、配置redis.conf 的hz选项,默认为10 (即1秒执行10次,100ms一次,值越大说明刷新频率越快,最Redis性能损耗也越大) 第二、配置redis.conf的maxmemory最大值,当已用内存超过maxmemory限定时,就会触发主动清理策略

(2)懒汉式删除

当数据过期的时候,不做任何操作。当访问数据的时候,查看数据是否过期,如果过期返回null,并且将数据从内存中清除。如果没过期,就直接返回数据。

优点: CPU友好,数据等到过期并且被访问的时候,才会删除。

缺点: 内存不友好,会占用大量内存。

4.redis为什么读取速度比较快

(一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快;

(二)单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

(三)采用了非阻塞I/O多路复用机制 用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。这样用户可以注册多个socket,然后不断地调用select读取被激活的socket,redis服务端将这些socke置于队列中,然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中,提高读取效率。

相关推荐
Mahir084 分钟前
MyBatis 延迟加载深度解密:从使用方式到底层动态代理原理全解
java·后端·面试·mybatis
XZ-07000110 分钟前
MySQL-前缀索引
数据库·mysql
专注VB编程开发20年12 分钟前
淘宝上架销售技巧:Excel管理系统开发 / VBA / ERP / OA办公管理
java·数据库·excel
Leon-Ning Liu31 分钟前
【真实经验分享】Grid管理仓库 (GIMR/MGMTDB) 迁移重建实战指南
数据库
代码丰38 分钟前
流式大模型调用中的首包监测:解决流式调用大模型的异步问题
后端
广州灵眸科技有限公司39 分钟前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发套件组装上电
网络·数据库·人工智能·算法·飞书
文盲青年40 分钟前
数据库移除0宽字符
数据库·oracle
剑傲娇1 小时前
【计算机组成原理】 数据通路 之单总线结构
缓存
神奇小汤圆1 小时前
慢请求别急着先查慢 SQL(Redis 缓存雪崩把数据库打满)
后端
取经蜗牛1 小时前
docker环境中redis连接三种场景配置指南,物理机、wsl、docker
redis·docker·容器