• radis相关面试题


    一、对redis缓存机制的了解?

    1.rdb

    这种方式基于一个时间节点去备份数据,比如14:00去备份,只会备份这个时间点以前的数据,设置的时间间隔为1小时的话,14:30分停电了,就会导致数据恢复不完整

    2.aof

    这种是通过apped方法去追加命令的方式去执行的,如果发生断电,会第一时间将aof文件中的命令重新执行一遍,这种方式的缺点就是,可能会重复操作过程数据,现在到redis6之后的话,会通过overwrite的方式不让执行过程数据,直接回复最终数据

    一般在使用的过程当中,一般会将两种缓存的机制配合使用,因为rdb的方式,体量较小并且执行高效,比如在14:00这个节点用rdb的方式恢复数据,这个时间的节点以后用apped追加的命令来恢复数据,这样就可以高效并完整的恢复redis的数据。

    二、如何保证redis与数据库的一致性?

    方案一:延时双删,先删除缓存,在写数据库,休眠一会后在进行缓存的删除,如果数据库写的操作很频繁,同样会出现脏数据的问题。

    方案二:引入MQ,保证原子操作;redis发送指令给mq,mq有两个消费费者,一个负责去删缓存,一个负责去写数据,如果删缓存失败的话,可以通过mq的重试机制进行再次删除,还是会存在一个问题,如果在重试的过程中,有多次写的操作,同样会读到脏数据

    三、redis缓存的淘汰机制?

    有四种算法:

    1.random算法随机移除某个key

    2.ttl算法,在设置的过期时间里面找到即将过期的key进行移除

    3.lru算法,去移除最近很少使用的key

    4.lfu算法,维护一个大小为16的候选池,候选池里面的数据会根据时间去排序,每次抽取5个key放到候选池里面,当候选池满了以后,访问时间间隔最大的key会被删除

    四、谈谈你对redis的理解?

    redis是一个基于内存的非关系型数据库,能够存储的数据类型也比较全面(String、Hash、List、Set、Sorted Set),使用单线程实现io操作,可以支持数据的持久化

    五、redis缓存击穿、穿透、雪崩怎么理解?

    1.缓存穿透:当用户访问了一个本身不存在的数据,请求都会去直接访问数据库,

    解决办法:1.使用布隆过滤器判断缓存是否存在

                       2.为请求设置一个为null的缓存,设置一个比较短的过期时间

    2.缓存击穿:当缓存过期失效,高并发下直接访问数据库会导致,数据库压力过大

    解决办法: 1.让热点数据的缓存永不过期

                        2.采用分布式锁,缓存失效后只有一个线程更新缓存

    3.缓存雪崩:大面积的缓存击穿或服务器不可用

    解决办法: 1.使用redis哨兵或者集群等架构提升可用性

                        2.采用和缓存击穿一样的方式

    六、主从模式,哨兵模式、集群架构?

    主从模式:有一个主节点,其他为从节点,有主节点提供服务,从节点相当于业务备份,如果主节点挂掉,则需要手动从从节点上选择一个从节点作为主节点,可用性不高

    哨兵模式:对于主从模式新增了哨兵节点,监听每一个主从节点,客户端通过哨兵获取到主节点的ip及端口号去访问主节点,如果主节点挂掉之后,哨兵会从从节点中重新选举出主节点

    集群架构:对于单个主节点只能存储100g左右,如果超了,则使用集群架构,用切片的方式将数据分到每一个主从节点上面,官方推荐不超过1000个节点,如果小的集群中的主节点挂掉之后,则会影响读写,如果访问不是该节点,则完全不影响

    七、分布式事务?

    核心方法:setnx+expire

  • 相关阅读:
    java基于springboot中小企业合同管理系统
    基于Java+Spring+mybatis+vue+element实现酒店管理系统
    nohup命令后台启动jar包
    Spring Security基本框架之认证和授权
    云时代【1】—— 云时代的前夜:虚拟化
    本地无法正常连接ubuntu问题
    快速排序Rapidly Sort
    结构化文本的跨行计算
    胡思乱想 ----2022/11/10
    一起Talk Android吧(第三百七十五回:如何使用ViewPager2)
  • 原文地址:https://blog.csdn.net/yb1887/article/details/126494587