每日八股day11 ### 本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写如有错误纯属本人实力不佳欢迎各位大佬阅读指正 ###1.Redis 是什么为什么叫高性能Redis是基于内存的高性能非关系型数据库。为什么高性能基于内存操作没有磁盘IO开销。单线程模型避免线程切换与锁竞争CPU利用率高命令串执行高效。IO多路复用采用非阻塞IO单个线程同时监听多个连接有事件才处理并发强高效的数据结构和简单命令复杂度低执行速度快。避免频繁内存拷贝。单线程避免了并发安全问题。补充Redis 单线程为什么还能抗高并发使用IO多路复用单线程同时监听大量连接非阻塞处理。基于内存操作命令执行极快耗时极短。单线程避免锁竞争线程切换等开销CPU利用率高。整体无阻塞单线程也能达到极高QPS。2.Redis 支持的数据类型有哪些5 大基础:StringHashListSetZSet/SortedSet3 大特殊:Bitmap(位图)基于String实现按bit操作用于签到用户在线状态布隆过滤器。HyperLogLog做基数统计用于UV独立访客统计。GEO(地理信息)经纬度存储距离计算用于附近的人附件门店。高级类型:Stream持久化消息队列支持消费者组用于可靠消息日志采集。Module(扩展类型)如RedisJOSNRedisTimeSeries等。用于支持JSON时序全文检索。追问Stream 作用和 List 做队列区别Stream是持久化消息队列支持消费者组消息确认回溯。List不支持ACK消息取出就丢不适合可靠消息。3.Redis 常用应用场景有哪些热点数据缓存核心减轻DB压力提升读取速度用于商品信息用户信息配置。分布式锁SETNX/Redisson解决分布式系统并发安全问题。计数器/限流INCRDECR用于点赞数阅读数接口限流IP限流。会话存储Session共享替代服务器Session用于集群环境统一登陆态。消息队列简单队列异步任务高级用Stream。排行榜ZSet有序集合用于积分排行热度排行等。去重、交集/并集Set用于共同好友去重。签到、用户状态Bitmap用于布隆过滤器签到统计在线状态。附近的人GEO。分布式ID生成INCR/INCRBY全局唯一ID。延迟任务ZSet订单超时未支付自动取消。追问Redis 做缓存三大问题穿透、击穿、雪崩穿透查询不存在的数据使用布隆过滤/缓存空值。击穿热点key过期使用互斥锁永不过期。雪崩大量key同时过期使用过期时间加随机值/集群多级缓存。