Redis杂项

常见面试题

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有哪几种持久化方式?优缺点是什么?

  1. 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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容