redis.md

redis

[toc]


点击使用慧言AI进行模拟面试


一、redis常用的数据结构

list ,map,hash,set,zset

二、redis为什么快

单线程,纯内存操作,数据结构简单,使用i/o多路复用

三、redis优缺点

  • 优点:读写速度块;数据可持久化;支持事务数据结构丰富hash,set,zset,list;支持主从复制
  • 缺点:容量受限物理机;不具备容错恢复功能;在线扩容难。

四、应用场景

计数器;缓存,如mybatis;会话缓存,如分布式环境存session;分布式锁

五、 redis持久化

  • RDB:按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的 save参数来定义快照的周期。
  • AOF:AOF持久化是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

六、 redis如何做分布式锁

Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系Redis中可以使用SETNX命令实现分布式锁。
原理:当且仅当key不存在,将 key的值设为value。若给定的 key已经存在,则SETNX不做任何动作返回值:设置成功,返回1。设置失败,返回0 。

image-20220721150247283

七、什么是缓存雪崩,怎么避免?

  • 缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
  • 解决方案
    1.缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
    1. 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。
    2. 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。

八、 什么是缓存穿透,怎样避免?击穿?

  • 缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。

  • 解决方案

    1. 接口层增加校验,如用户鉴权校验,id做基础校验,id小于等于0 的直接拦截;
    2. 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用》。这样可以防止攻击用户反复用同一个id暴力攻击
    3. 采用布隆过滤器
  • 击穿:某个key的高并发访问

九、 如何确保缓存与数据库双写是的数据一致性

读请求和写请求串行化,在一个内存队列。(尽量不用)

十、假如 Redis 里面有1亿个key,其中有10w 个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

  • keys:使用keys指令可以扫出指定模式的 key列表。但可能会让线程阻塞。
  • scan:可以解决阻塞,但key有可能重复,需要再做次去重,费时。

缓存常见问题

image-20220721150256888


redis.md
http://example.com/8368.html
作者
John Doe
发布于
2022年9月8日
许可协议