ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

每日八股day13

每日八股day13 ### 本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写如有错误纯属本人实力不佳欢迎各位大佬阅读指正 ###注释Redis篇1.HyperLogLog 作用、误差范围、适用场景作用用来做小基数统计,只占用极小内存就可以统计海量数据本质是用概率算法估算基数不存储具体数据。误差范围标准误差越0.81%百万级UV误差通常在几千以内业务上可以接受。适用场景网站/APP UV统计大数据去重计数。2.Bitmap 位图原理、签到、统计活跃用户原理底层是String类型把字符串按bit来操作一个key对应一串连续二进制每个bit代表一个状态占用空间极小。签到用userId月份做key日期做offsetBITCOUNT统计次数。活跃用户用日期做keyuserId做offsetBITCOUNT统计日活BITOP计算交集留存。省内存速度快适合海量用户统计。3.Geo 地理位置实现原理Geo并非独立数据结构而是基于ZSetGeoHash算法实现的地理位置索引核心是把二维经纬转为一维score利用ZSet排序与范围查询能力做附近检索。用GeoHash将经纬度交替编码为52位整数作为ZSet的score相邻位置的GeoHash前缀相似可通过九宫格范围查询快速找到附近点最终使用Haversine公式检验距离实现高效地理位置检索。4.Stream 消息队列原理、消费组、偏移量Stream是Redis 5.0提供的专用消息队列数据结构支持消息持久化消费组偏移量管理和消息确认机制适合可靠的生产级消息队列。原理基于radix tree基数树消息链表实现每条消息拥有全局唯一递增的消息ID消息可持久化保存支持历史回溯范围读取不会像list那样弹出即丢失。消费组一个队列可以创建多个消息组各组独立消费互不干扰。组内多个消费者共同消费消息一条消息指挥发给一个消费者实现负载均衡。内置ACK确认机制未确认的消息进入Pending队列可重新认领保证消息不会丢失。偏移量偏移量就是消息ID用来标记消费进度。消费组会维护全局偏移量消费者可重启后从上次位置继续消费。支持从头部尾部或指定ID开始消费灵活性高。5.BitMap 和 HyperLogLog 区别存储方式BitMap用bit表示每个元素状态能记住具体谁存在。HyperLogLog只做概率基数估算不存储任何原始数据只记录统计信息。精确度BitMap100%精确HyperLogLog标准精确误差0.81%是近似值。内存占用BitMap空间与用户ID最大值相关ID越大越占空间。HyperLogLog无论多少数据固定只占12KB左右。支持的操作BitMap可查单个用户状态统计总数做交并差。HyperLogLog只能估总数量支持合并不能查单个元素不能算交集。适合场景BItMap适合用户签到日活状态留存计算等。HyperLogLog适合海量 UV独立访客去重基数允许小误差追求极省内存。6.Redis 布隆过滤器原理、优缺点、误判问题、使用场景原理布隆过滤是一个二进制向量多个哈希函数构成的概率型数据结构用来判断元素是否存在或不存在。优点空间效率高占用内存极小。查询/插入速度快接近O1。不存储原始数据隐私性好。适合海量数据的去重、是否存在的判断。缺点和误判问题有假阳性误判只能保证不存在一定正确存在可能不是真的存在//误判问题误判由哈希碰撞导致不能完全避免但可以通过参数降低到极低水平如0.01%标准实现不支持删除元素多个元素共用bit位删除一个会导致其他元素被判断为不存在无法删除无法获取元素本身只做存在判断不存储原始数据只记录哈希后位信息不能查具体内容使用场景主要用于解决海量数据的存在性判断典型场景是解决缓存穿透也用于URL去重黑名单过滤推荐去重。
返回列表