Redis是什么?Redis是一个开源的、支持网络的、内存存储,在内存中存储数据以提供快速读写能力的高性能数据结构服务器。试题解析:单线程事件模型,为什么Redis这么快?因为它基于Reactor模式,使用了epoll作为事件处理机制,单线程避免了上下文切换的开销。
Redis五大数据类型详解
String类型:最基本的数据类型,可以存储字符串、整数、浮点数等。常用命令:SET key value, GET key。解析:Redis的String类型是动态字符串(SDS),支持二进制安全,比C字符串更高效。
List类型应用场景
List是链表结构,支持从两端插入和弹出。命令:LPUSH key value, RPOP key。试题:消息队列如何用Redis实现?使用List作为队列,LPUSH生产,RPOP消费。
Set和ZSet解析
Set是无序集合,不允许重复元素,命令SADD key member。ZSet是有序集合,每个元素关联一个score。试题:排行榜怎么做?用ZADD key score member,ZREVRANGE获取前N名。
Hash数据类型
Hash类似于Map,适合存储对象。命令HSET key field value。解析:内存优化好,适合小对象存储,避免String序列化开销。
Redis持久化机制
RDB:定时快照,fork子进程保存。AOF:命令日志,追加写操作。试题:RDB和AOF怎么选择?RDB适合大数据备份,AOF数据更安全但恢复慢。
Redis主从复制和哨兵
主从:slaveof主节点IP端口。哨兵:监控主节点,自动故障转移。解析:实现高可用,读写分离。
常见面试题
Redis缓存穿透?用布隆过滤器或空值缓存。缓存雪崩?设置不同过期时间+限流。缓存击穿?加互斥锁或热点key不过期。
FAQ
Q: Redis单线程为什么性能高?
A: 避免多线程上下文切换,使用IO多路复用。
Q: Redis和Memcached区别?
A: Redis支持丰富数据结构,持久化,Memcached只支持key-value。
Q: 怎么保证Redis高可用?
A: 主从+哨兵+集群。
Q: Redis内存满了怎么办?
A: 配置maxmemory和淘汰策略如volatile-lru。