当前位置:网站首页>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默认的内存淘汰策略。
边栏推荐
猜你喜欢
深度学习——以CNN服装图像分类为例,探讨怎样评价神经网络模型
Eight guiding principles to help businesses achieve digital transformation success
学会iframe并用其解决跨域问题
如何简化现代电子采购的自动化?
Enterprise live broadcast is on the rise: Witnessing focused products, micro-like embracing ecology
Functions, recursion and simple dom operations
Stop behind.
某母婴小程序加密参数解密
结构体函数练习
The video of machine learning to learn [update]
随机推荐
Embedded database development programming MySQL (full)
drools from download to postman request success
7.LVS负载均衡群集之原理叙述
[Skill] Using Sentinel to achieve priority processing of requests
汇编语言之栈
XSS related knowledge points
Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析
Introduction to the memory model of the JVM
mysql索引笔记
share总结
Mobile payment online and offline payment scenarios
2022 Hangzhou Electric Power Multi-School League Game 5 Solution
Cache pool of unity framework
Metaverse "Drummer" Unity: Crazy expansion, suspense still exists
7-3 LVS+Keepalived Cluster Description and Deployment
For Qixi Festival, I made a confession envelope with code
FFmpeg —— 通过修改yuv,将视频转为黑白并输出(附源码)
Simple operation of the file system
2003. 每棵子树内缺失的最小基因值 DFS
技术解析|如何将 Pulsar 数据快速且无缝接入 Apache Doris