当前位置:网站首页>redis中常见的面试题
redis中常见的面试题
2022-08-04 04:30:00 【Dumpling_skin】
1、什么是缓存穿透?怎么解决?
1. 数据库中没有该记录,缓存中也没有该记录,这时有人恶意大量访问这样的数据。这样就会导致该请求绕过缓存,直接访问数据,从而造成数据库压力过大。
2.解决办法:
[1]在controller加数据校验。
[2]我们可以在redis中存入一个空对象,而且要设置过期时间不能太长。超过5分钟
[3]我们使用布隆过滤器。底层:有一个bitmap数组,里面存储了该表的所有id.
解决方法:
//伪代码
String get(String key) { //布隆过滤器钟存储的是数据库表钟对应的id
String value = redis.get(key); //先从缓存获取。
if (value == null) { //缓存没有命中
if(!bloomfilter.mightContain(key)){//查看布隆过滤器钟是否存在
return null;
}else{
value = db.get(key); //查询数据库
redis.set(key, value);
}
}
return value;
}2、什么是缓存击穿?如何解决?
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
缓存击穿解决方案:
1.设置永久不过期。【这种只适合内存比较大的服务器】
2.使用互斥锁(mutex key)业界比较常用的做法。
解决方法:
//伪代码
String get(String key) {
String value = redis.get(key);
if (value == null) { //代表缓存值过期
//设置3min的超时,防止del操作失败的时候,下次缓存过期一直不能load db
if(redis.setnx(key_mutex,1,3*60)==1){
//代表设置成功
value = db.get(key);
redis.set(key, value,expire_secs);
redis.del(key_mutex);
}else{
//这个时候代表同时候的其他线程已经load db并回设到缓存了,这时候重试获取缓存值即可
sleep(50);
//重试
get(key);
}
}else {
return value;
}
}3、什么是缓存雪崩?如何解决?
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
1.什么下会发生缓存雪崩:
[1]项目刚上线,缓存中没有任何数据
[2]缓存出现大量过期。
[3]redis宕机
2.解决办法:
1.上线前预先把一些热点数据放入缓存。
2.设置过期时间为散列值
3.搭建redis集群
4、Redis 淘汰策略有哪些?
当Redis中内存不足的时候,为了保证命中率,就会选择一定的数据淘汰策略。
volatile(从已经设置过期时间的key中)
allkeys(所有的key中)
1)volatile-lru:当内存不足时,从设置了过期时间的key中使用LRU(最近最少使用)算法,选出最近使用最少的数据,进行淘汰;
2)allkeys-lru:当内存不足时,从所有key中使用LRU(最近最少使用)算法,选出最近使用最少的数据,进行淘汰。
3)volatile-lfu:当内存不足时,从设置了过期时间的key中使用LFU(最近最不常用)算法,选出使频率最低的数据,进行淘汰。
4)allkeys-lfu:当内存不足时,从所有key中使用LFU算法,从所有key中使用LFU算法,选出使频率最低的数据,进行淘汰。
5)volatile-random:当内存不足时,从设置了过期时间的key中,随机选出数据,进行淘汰。
6)allkeys-random:当内存不足时,从所有的key中,随机选出数据,进行淘汰。
7)volatile-ttl:当内存不足时,从设置了过期时间的key中,选出即将过期的数据(按照过期时间的先后,选出先过期的数据),进行淘汰。
8)no-enviction:当内存不足时,禁止淘汰数据,写入操作报错默认策略,是Redis默认的内存淘汰策略。
边栏推荐
- For Qixi Festival, I made a confession envelope with code
- Stop behind.
- 2022年软件测试——精选金融银行面试真题
- centos 安装postgresql13 指定版本
- 【21 Days Learning Challenge】Direct Insertion Sort
- See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business
- 一文详解DHCP原理及配置
- 8.Haproxy 搭建Web集群
- JVM的内存模型简介
- 如何简化现代电子采购的自动化?
猜你喜欢
随机推荐
Based on the statistical QDirStat Qt directory
XSS相关知识点
Shell 函数
7-2 LVS+DR概述与部署
7-3 LVS+Keepalived Cluster Description and Deployment
企业直播风起:目睹聚焦产品,微赞拥抱生态
10 Convolutional Neural Networks for Deep Learning 3
FFmpeg —— 录制麦克风声音(附源码)
Introduction to mq application scenarios
打造一份优雅的简历
【Ryerson情感说话/歌唱视听数据集(RAVDESS) 】
外卖店优先级
系统设计.秒杀系统
张量篇-应用案例
JVM的内存模型简介
2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
drools from download to postman request success
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
【 observe 】 super fusion: the first mention of "calculate net nine order" evaluation model, build open prosperity of power network
如何动态添加script依赖的脚本









