Redis作为当下最火的NoSQL数据库(没有之一),在面试中出现的频率堪比Java里的HashMap!今天咱们就来扒一扒那些让面试官眼睛发光的Redis灵魂拷问,看完这篇你至少能顶住三轮技术面!(实战经验+避坑指南双重buff加成)
面试官最爱问:“Redis支持哪些数据类型?各有什么使用场景?”
String(字符串)
SET user:1 "张三"
INCR article:1001:views
(原子计数器)Hash(哈希)
HSET user:1001 name "李四" age 28
HGET user:1001 age
HGETALL
慎用!大哈希表会撑爆网络带宽(亲身踩雷经历)List(列表)
LPUSH news:list "突发:Redis 7.0发布"
RPOP news:list
Set(集合)
SINTER user:1001:friends user:1002:friends
Zset(有序集合)
ZADD game:rank 9999 "玩家A" 8888 "玩家B"
ZREVRANGE game:rank 0 9 WITHSCORES
死亡问题:“Redis的持久化机制有哪些?如何选择?”
SAVE
(阻塞)/ BGSAVE
(后台)save 900 1
(15分钟至少1次修改)appendfsync always
(最安全)appendfsync everysec
(折中推荐)appendfsync no
(交给操作系统)redis-cli BGREWRITEAOF
aof-use-rdb-preamble yes
现象:查询不存在的数据(比如id=-1)
解决方案:
SET null:key "" 300
场景:大批量key同时过期
逃生方案:
// 设置随机过期时间
redisTemplate.opsForValue().set(key, value,
30*60 + (int)(Math.random()*300));
痛点:热点key突然失效
破局之道:
SETNX lock:key "1"
EXPIRE lock:key 10
INFO replication
CLUSTER ADDSLOTS 0 1 2 ...
CLUSTER SETSLOT 1000 IMPORTING node_id
Redis为什么快?
缓存与数据库一致性如何保证?
Pipeline有什么用?
List<Object> results = redisTemplate.executePipelined(...)
大Key问题怎么处理?
redis-cli --bigkeys
扫描Redis6.0多线程改进在哪?
io-threads 4
去年面某大厂时被问:“假设Redis内存满了,继续写入会怎样?”
maxmemory-policy
配置:
OBJECT encoding key
命令slowlog get
分析性能瓶颈祝各位面试时就像Redis一样——又快又稳! (记得面试前吃个士力架,别问我怎么知道的)