当前位置:   article > 正文

java面试题(Redis)

java面试题(Redis)

事情干的差不多了,开刷面试题和算法,争取在短时间内快速成长,理解java面试的常见题型

一、redis使用场景:

缓存:穿透、击穿、雪崩 双写一致、持久化 数据过期、淘汰策略

分布式锁:setnx、redisson

计数器:

保存token:

消息队列:

延迟队列:

二、其他面试题:

集群:主从 哨兵 集群

事务:

redis为什么快:

(1)、缓存穿透

缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会每次请求都查数据库

解决一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存

优点:简单

缺点:小号内存,可能会发生不一致的问题

解决二:布隆过滤器

布隆过滤器的实现方案:redisson,Guava

优点:内存占用较少,没有多余key

缺点:实现复杂,存在误判

(2)缓存击穿

当redis的key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把db压垮

两种,一种是互斥锁恢复数据库数据,一种是逻辑过期

(3)缓存雪崩

缓存雪崩是指同一时段大量的缓存key失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力

解决方案:给不同的key的TTL添加随机值,利用redis集群提高服务的可用性,给缓存业务添加降级限流策略,给业务添加多级缓存

(4)双写一致性

读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间

写操作:延迟双删

不双删的话应对多线程会出现错误

第二种方法:分布式锁

共享锁:读锁readLock,加锁之后,其他线程可以共享读操作

排他锁:独占锁writeLock也叫,枷锁周,阻塞其他线程读写操作

读数据时添加共享锁,读不互斥,写互斥

写数据时添加排他锁,读写互斥

(5)redis持久化

1、RDB

2、AOF

(6)redis过期策略

redis数据删除策略-惰性删除

惰性删除:设置该key过期时间后 ,不管,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key

定期删除:每隔一段时间,我们就对一些key进行检查,删除里面过期的key(从一定数量的数据库中取出一定数量)

定期清理有两种模式:

SLOW模式是定时任务,执行频率默认为10hz,每次不超过25ms,以通过修改配置文件redis.conf的hz选项来调整这个次数

FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms

(7)数据淘汰策略

当redis中的内存不够用时,此时在向redis中添加新的key,那么redis就会按照某一种规则将内存中的数据删掉,这种数据的删除规则被称之为内存的淘汰策略

8种不同策略来选择要了删除的key:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/398082
推荐阅读
相关标签
  

闽ICP备14008679号