Redis面试

Redis

  1. 使用单线程的多路IO复用模型。多个socket可能会并发产生不同的操作,IO多路复用程序监听多个socket,将产生的事件放入队列中排队,事件分派器每次用队列中取出一个事件,交给对应的事件处理器处理

  2. String,List,Hash,Set,ZSet 端口号:6379

  3. 过期时间:

    1. 定期删除:每隔100ms随机抽取设置了过期时间的key,检查是否过期
    2. 惰性删除:查询key时,检查是否过期,然后删除
    3. 内存淘汰:如果定期删除没删除掉,还未进行惰性删除,redis在内存耗尽后会出发内存淘汰
  4. 内存淘汰:

    1. lru:最近最少淘汰(allkey全部数据,volatile设置过期时间数据)
    2. ttl:将要过期数据淘汰(volatile)
    3. random:随机淘汰(allkey,volatile)
    4. no-eviction:不进行淘汰
    5. lfu:最不经常使用数据淘汰(allkey,volatile)
  5. 持久化机制:

    1. RDB:快照(在a秒后如果有b个key发生变化,创建快照)
    2. AOF:追加文件(每执行一条更改指令或每秒,追加到硬盘的aof文件)
    3. 混合持久化:aof重写时直接把rdb卸载aof文件的开头
  6. 缓存雪崩怎么办:

    ​ 缓存一时间大面积的失效,所以后面的请求落到数据库,造成短时间承受大量请求崩掉

    1. 事前:选择合适的内存淘汰策略,尽量保证整个redis高可用性
    2. 事中:hystrix限流&降级,避免mysql崩
    3. 事后:利用redis持久化机制保存的数据尽快恢复
  7. 缓存穿透怎么办:

    ​ 由于大量不在缓存中的请求导致请求直接落在数据库上

    1. 做好参数校验,不合法的参数直接抛出异常
    2. 缓存无效key,设置较短过期时间
    3. 布隆过滤器:把所有可能存在请求的值都放在布隆过滤器中,只相应其中的值
  8. 缓存击穿怎么办:

    ​ 由于redis缓存过期导致在过期时间大量请求落在数据库上

    1. 使用Redis分布式锁,让对数据库的重复查询操作变为1次
    2. 使用jvm锁,每台数据库只查询一次
  9. 并发竞争key

    ​ 多个系统对同一个key进行操作,执行顺序的不同导致结果不同

    ​ 使用Redis、Zookeeper分布式锁

  10. 双写一致性

    读请求和写请求串行到一个内存队列中,导致吞吐量大幅降低

  11. 主从复制

    存数据库的为主服务器,可以是树形结构。只有主服务器可以进行写操作,所有从服务器进行数据同步。先全量复制(快照)再增量复制(aof)

  12. 哨兵模式

    在主从复制的基础上,哨兵引入了主节点的自动故障转移。当出现故障时,通过投票机制选择新的master。哨兵会不断检查主节点和从节点是否运作正常,由一个或多个哨兵节点,不存储数据。

  13. 集群模式

    数据分区将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。

    Redis集群引入的hash槽,集群的每个分片负责一部分hash槽,每个分片又实现了主从复制

  14. 除了做缓存还可以实现什么功能?Session

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值