分布式缓存和Redis面试总结

分布式缓存:

LRU(最近最少使用)算法实现:可以使用一个有序的单链表来实现。当有一个新的数据被访问时,如果存在于单链表之中,则直接读取该数据,然后把该节点插入链表头部。如果不存在单链表之中,先判断是否还有缓存,如果有则将该节点插入单链表的头部,如果没有先删除单链表尾部的节点,然后再将节点插入到单链表头部。

引入缓存常见的问题:缓存穿透、雪崩、击穿、数据一致性。

缓存穿透解决方案:缓存空对象;布隆过滤器。

缓存雪崩解决方案:缓存高可用;本地缓存;请求DB限流;服务降级。

缓存击穿解决方案(针对一个key,真实存在):使用互斥锁;手动过期。

数据一致性相关:

产生的原因:并发场景下读取老DB更新到缓存;缓存和DB的操作不在一个事务,一个成功一个失败。

解决方案:todo

Redis:

优点:速度快;支持持久化存储;支持丰富的数据类型;丰富的特性。

支持的数据类型:String、List、Set、Sorted Set、Hash

效率高的原因:完全内存的操作;非阻塞的IO多路复用;单线程操作避免了上下文切换;Hash

持久化的方式:RDB(全量)和AOF(增量)

过期策略:主动删除;被动删除;maxmemory

淘汰策略:volatile-lru;volatile-ttl;volatile-random;allkeys-lru;allkeys-random;no-enviction;

实现分布式锁:set指令;redlock

实现消息队列:用list结构实现,rpush 生产消息,lpop 消费消息。

为什么用跳表不用红黑树:redis主要的操作有插入单个数据、删除单个数据、查找单个数据、查找某个区间的数据,对于前三个操作来说红黑树和跳表差不多,但是对于第四个操作,跳表明显优于红黑树。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值