• Redis面试常问题2022整理


    Redis为什么快

    首先Redis是基于内存的NOSQL的储存,所以做CRUD操作比常用的MYSQL速度都要看,MYSQL这种都是操作磁盘的所以相差很大。Redis是单线程的 避免了上下文切换所以很快。

    Redis基本数据类型

    string,list,set(无序集合),zset(有序集合),hash

    缓存穿透,缓存击穿,缓存雪崩

    —缓存穿透

    缓存穿透指的是大量不存在的key的请求去查询,由于缓存没有,所以会查询数据库,但是数据库也没有该数据,比如一些恶意攻击造成数据库很大的压力。
    解决方案:布隆过滤器或缓存空数据,对查询数据库不存在的数据进行缓存一条空值,有效时间可以设置短一些比如30秒,可以有效的减少对数据库的访问。

    —缓存击穿

    缓存击穿一般是缓存中没的数据,数据库中有的数据,并发用户特别多,同时给数据库造成很大的压力,导致数据库被压垮。
    解决方案:加锁更新,用户查询数据库查到数据更新到缓存中。 或者是一些快过期的缓存进行一个异步的去刷新过期时间。

    —缓存雪崩

    缓存雪崩就是大量的数据的设置相同的过期时间,然后同时所有请求去访问数据库。
    解决方案:根据不同的key去设置不同的过期时间,防止同一时间大量数据过期。还可以使用二级缓存。

    Redis持久化RDB和AOF

    • RDB
      将内存的数据快照写入磁盘中,恢复时让快照文件读取到内存中。手动触发save和自动触发bgsave。
      RDB文件是一个紧凑的二进制文件,是Redis在某一刻时的全部数据的快照,所以RDB恢复速度比AOF快很多,非常适合备份,全量复制,灾难等场景。 RDB文件可能存在无法兼容高版本的RDB文件的问题,并且执行RDB属于重量级操作,频繁执行成本过高,无法做到秒级别的持久化,因为一旦发生故障,就可能丢失几分钟的数据。
    • AOF
      基于存储命令进行持久化,每次追加命令先存内存再存日志,需要恢复时重新执行AOF文件即可。
      AOF的默认策略是每秒执行一次,在这种配置下Redis仍能保持良好的性能,并且就算发生故障,最多只损失一秒钟的数据。 对于相同的数据集,AOF文件体积通常是比RDB文件体积大,

    分布式锁

    锁的条件:

    • 互斥性: 在任意时刻只能有一个客户端拥有锁。
    • 不会发生死锁,即使有一个客户端持有锁的期间崩溃没有解锁,也不能影响其他客户端的使用。
    • 解铃还须系铃人,加锁解锁的必须是同一个客户端。
      …下次写。

  • 相关阅读:
    Linux 安全 - 扩展属性xattr
    学系统集成项目管理工程师(中项)系列28_后记
    React核心技术浅析
    Real-Time Rendering——9.6 Microgeometry微观几何
    计算机毕业设计ssm超市商品信息管理系统1z2od系统+程序+源码+lw+远程部署
    sql-50练习题0-5
    【Element UI】解决 el-button 禁用状态下,el-tooltip 提示不生效问题
    Newtonsoft.Json use
    Linux查看磁盘、文件系统、文件夹、文件大小的命令(lsblk、df、du、ll)
    算法(一)
  • 原文地址:https://blog.csdn.net/weixin_44562387/article/details/125615539