Redis夺命连环11问
第33期 Redis的43连环炮,试试你能扛住几个
应对面试你要掌握 Redis 哪些原理
【对线面试官】Redis基础
大厂面试!我和面试官之间关于Redis的一场对弈!
Redis 6.0 新特性-多线程连环13问!
支持哪些基本数据类型
(1)string,字符串,最大能存储512MB
redis 127.0.0.1:6379> SET runoob "菜鸟教程"
OK
redis 127.0.0.1:6379> GET runoob
"菜鸟教程"
(2)hash 哈希表
redis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
"OK"
redis 127.0.0.1:6379> HGET runoob field1
"Hello"
redis 127.0.0.1:6379> HGET runoob field2
"World"
(3)list,列表,头尾部都可以添加元素
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabbitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabbitmq"
2) "mongodb"
3) "redis"
(4)set,无序不重复集合
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "redis"
2) "rabbitmq"
3) "mongodb"
(5)zset,有序不重复集合,每个元素关联一个score,按照score进行排序
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
1) "mongodb"
2) "rabbitmq"
3) "redis"
总结:
Redis 为什么默认 16 个数据库?
Redis数据结构底层系列-SDS
字典内部构造与rehash
跳表的原理
带你一步一步认识跳跃链表_阳阳的博客-CSDN博客_跳跃链表
Redis—跳跃表
Bitmap简介
42张图,带你真正搞懂redis数据类型的底层
十二张图带你了解 Redis 的数据结构和对象系统
Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单
Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单
使用Redis,你必须知道的21个注意要点
https://mp.weixin.qq.com/s/WWJyrPToqLSO6qGxtS0hRg
Redis的键过期策略
Redis的键过期策略、内存淘汰机制与LRU实现,这一篇给你安排了!_阳阳的博客-CSDN博客
能说不了解吗,就算是没有听说过,咋们也可以来一句:“不好意思面试官,这一块还不怎么深入,但是从字面意思来理解巴拉巴拉”,不至于一脸懵逼。下面我们看看redis的缓存策略
Redis中通过maxmemory参数来设定内存的使用上限,如果Redis所使用内存超过设定的最大值,那么会根据配置文件中的策略选取要删除的key来删除,从而留出新的键值空间。主要的六种淘汰key策略
-
volatile-lru
在键空间中设置过期时间,移除哪些最近最少使用的key,占着茅坑不拉屎的key
-
allkeys-lru
移除最近最少使用的key
-
volatile-random
在键空间中设置过期时间,随机移除一个key
-
allkeys-random
随机移除一个key
-
noeviction
当内存使用达到阀值的时候,所有引起申请内存的命令会报错;
ok,现在知道了需要淘汰哪些key,那我们如何去淘汰这些key
-
定时删除
很简单,设置一个闹钟,闹钟响了就删除即可。这种方式对于内存来说还是比较友好,内存不需要啥额外的操作,直接通过定时器就可保证尽快的删除。对于CPU来说就有点麻烦了,如果过期键比较多,那么定时器也就多,这删除操作就会占用太多的CPU资源
-
惰性删除
每次从键空间获取键的时候检查键的过期时间,如果过期了,删除完事。
-
定期删除
每隔一段时间就去数据库检查,删除过期的键
这种方案是定时删除和惰性删除的中和方法,既通过限制删除操作执行的时长来减少对CPU时间的影响,也能减少内存的浪费。但是难点在于间隔时长需要根据业务情况而定。
布隆过滤器的原理
面试官:缓存一致性问题怎么解决?
哎,这要人老命的缓存一致问题啊!!!
【面试热点】如何解决缓存系统的数据不一致问题
https://mp.weixin.qq.com/s/g_NKPdZXTI3h8Y573LkkHA
数据库跟缓存的双写一致性
第41期 面试被问:如何保证 Redis 缓存与数据库双写一致性?
第41期 面试被问:如何保证 Redis 缓存与数据库双写一致性?
美团面试题:缓存一致性,我是这么回答的!
老生常谈的 Redis 雪崩、击穿、穿透、预热、降级一次全安排
老生常谈的 Redis 雪崩、击穿、穿透、预热、降级一次全安排
什么是缓存穿透、击穿与雪崩,怎么处理
缓存穿透
一般来说,缓存系统会通过key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。这个时候如果一些恶意的请求到来,就会故意查询不存在的key,当某一时刻的请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
如何避免?
对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。
缓存雪崩
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。
如何避免?
在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。
不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
再也不怕,缓存雪崩、击穿、穿透
Redis 分布式锁|从青铜到钻石的五种演进方案
https://mp.weixin.qq.com/s/JpAqxQrQA7jRisNqiGoxBA
分布式锁中的王者方案 - Redisson
redis实现分布式锁
面试题:Redis如何实现分布式锁!
记一次由Redis分布式锁造成的重大事故,避免以后踩坑!
Redis:从应用到底层,一文帮你搞定
Redis 核心篇:唯快不破的秘密
搞懂 Redis 为什么这么快
Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
怎么解决热key与大key(多大叫大key)
谈谈redis的热key问题如何解决
【原创】谈谈redis的热key问题如何解决 - 孤独烟 - 博客园
【对线面试官】Redis持久化
Redis—持久化
Redis 日志篇:无畏宕机快速恢复的杀手锏
面试官:Redis 主从复制时网络开小差了怎么整?
你管这破玩意叫哨兵?
误用Redis命令导致服务器挂了
实现一个消息队列
Redis延时队列,这次彻底给你整明白了
实现排行榜
凉了呀,面试官叫why哥设计一个排行榜。|技术点评 - 掘金