1、Redis用过哪些数据类型,每种数据类型的使用场景
2、Redis缓存穿透、缓存雪崩和缓存击穿原因,以及解决方案
3、如何使用Redis来实现分布式锁,redis分布式锁有什么缺陷?
截取田螺哥的文章:
分布式锁,是控制分布式系统不同进程共同访问共享资源的一种锁的实现。秒杀下单、抢红包等等业务场景,都需要用到分布式锁,我们项目中经常使用Redis作为分布式锁。
选了Redis分布式锁的几种实现方法,大家来讨论下,看有没有啥问题哈。
-
命令setnx + expire分开写
-
setnx + value值是过期时间
-
set的扩展命令(set ex px nx) (lua脚本保证业务逻辑是否执行完)
-
set ex px nx + 校验唯一随机值,再删除
-
Redisson
1 命令setnx + expire分开写
如果执行完setnx
加锁,正要执行expire
设置过期时间时,进程crash掉或者要重启维护了,那这个锁就“长生不老”了,别的线程永远获取不到锁啦,所以分布式锁不能这么实现。
2、set的扩展命令(set ex px nx)(注意可能存在的问题)
这个方案可能存在这样的问题:
-
锁过期释放了,业务还没执行完。
-
锁被别的线程误删。
3、 Redisson
分布式锁可能存在锁过期释放,业务没执行完的问题。有些小伙伴认为,稍微把锁过期时间设置长一些就可以啦。其实我们设想一下,是否可以给获得锁的线程,开启一个定时守护线程,每隔一段时间检查锁是否还存在,存在则对锁的过期时间延长,防止锁过期提前释放。
当前开源框架Redisson就解决了这个分布式锁问题。我们一起来看下Redisson底层原理是怎样的
只要线程一加锁成功,就会启动一个watch dog
看门狗,它是一个后台线程,会每隔10秒检查一下,如果线程1还持有锁,那么就会不断的延长锁key的生存时间。因此,Redisson就是使用Redisson解决了锁过期释放,业务没执行完问题。
4、如何解决 Redis 的并发竞争Key问题。
5、如何保证缓存与数据库双写时的数据一致性?
6、Redis的线程模型是什么?
7、Redis Zset 跳跃表算法
redis(五)跳跃表_lz710117239的博客-CSDN博客_redis 跳跃表一:基本概念 跳跃表是一种随机化的数据结构,在查找、插入和删除这些字典操作上,其效率可比拟于平衡二叉树(如红黑树),大多数操作只需要O(log n)平均时间,但它的代码以及原理更简单。跳跃表的定义如下: “Skip lists are data structures that use probabilistic balancing rather thhttps://blog.csdn.net/lz710117239/article/details/78408919面试准备 -- Redis 跳跃表_LuckyToMeet-Dian叶-CSDN博客_redis 跳表看了一下面经,发现具有问了 redis 的跳跃表,惊呆了,赶紧学习顺便写下这一篇文章!https://blog.csdn.net/weixin_41622183/article/details/91126155
8、Redis 面霸篇:从高频问题透视核心原理
码哥的经典文章写的非常nice
Redis 面霸篇:从高频问题透视核心原理从高频面试问题横扫 Redis 核心知识点https://mp.weixin.qq.com/s/wrrXz4GoILd5hsbrYACTmA
9、Redis为什么这么快?
10、2W字!详解20道Redis经典面试题!(珍藏版)
收集的内容丰富 并且详细 艾神的稳藏