常见面试题
Redis支持的数据类型?
Redis有哪几种数据淘汰策略?
noeviction :不删除策略,达到最大内存限制时,如果需要更多内存,直接返回错误信息。大多数命令都会导致占用更多的内存
2.allkeys-lru:所有key通用;优先删除最近最少使用(less recently used,LRU)的key
3.volatile-lru:优先删除最近最少使用(less recently used,LRU)的key(限于会过期的key)
4.allkeys-random:所有key通用;随机删除一部分key
5.volatile-random:随机删除一部分key(限于会过期的key)
6.volatile-ttl:优先删除剩余时间(time to live,TTL)短的key(限于会过期的key)
什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?
- RDB + AOF
- Redis有哪些架构模式?讲讲各自的特点?
1.主从 + 哨兵
使用过Redis分布式锁吗?它是如何实现的?
1.SETNX
使用Redis做异步队列吗?是你怎么用的?有什么缺点?
1.lpush:从左侧存入数据 -》 栈结构 lpop从最外侧弹出
2.rpush:从右侧存入数据 -》队列接口 lpop从最外侧弹出
什么是缓存穿透?如何避免?什么是缓存雪崩?如何避免?
缓存穿透
- 访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉
解决方案:
- 采用布隆过滤器,使用一个足够大的bigmap,用于存储可能访问的key,不存在的key直接被过滤。
- 缓存数据库都查不到的话,把为空的结果写入DB一份
缓存雪崩
- 大量的key设置了相同的过期时间,导致缓存在同一时刻全部失效,造成DB请求量过大,导致崩溃
解决方案:
- 给缓存设置过期时间的基础上,再加上个随机时间,使每个key过期时间错开。
缓存击穿
- 一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增
解决方案
- 在访问key之前,采用setnx(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key
网友评论