大厂程序员是怎样用Redis的学习笔记

33 阅读3分钟

学习笔记分为三大部分 第一部分:Redis是什么 第二部分: Redis应用案例 第三部分:使用注意事项 第一部分:Redis是什么 数据从单表,演进出了分库分表 MySQL从单机演进出了集群 数据量增长 读写数据压力的不断增加 数据分冷热 . 热数据:经常被访问到的数据 · 将热数据存储到内存中 第二部分:Redis应用案例 1.连续签到 掘金每日连续签到 用户每日有一次签到的机会,如果断签,连续签到计数将归0。 连续签到的定义:每天必须在23:59:59前签到 Key:cc_uid_1165894833417101 valge 252 expiicAt: 后天的0点 String数据结构 数据结构﹣sds .可以存储 字符串、数字、二进制数据 .通常和expire配合使用 . 场景:存储计数、Session 2.消息通知 用list作为消息队列 使用场景: 消息通知。 例如当文章更新时,将更新 后的文章推送到ES,用户就 能搜索到最新的文章数据 3.计数 一个用户有多项计数需求,可通过hash结构存储。 rehash:rehash操作是将ht[0]中的数据,全部迁移到ht[1]中。数据量小的场景下,直接将数据从ht[0]拷贝到ht[1]速度是较快的。数据量大的场景,例如存有上百万的KV时,迁移过程将会明显阻塞用户请求。 渐进式rehash:为避免出现这种情况,使用了rehash方案。基本原理就是,每次用户访问时都会迁移少量数据。将整个迁移过程,平摊到所有的访问不用请求过程中。 4.排行榜 积分变化时,排名要实时变更 查找数字7的路径,head,3,3,7 结合dict后,可实现通过key操作跳表的功能 第三部分:使用注意事项 大Key的危害 读取成本高 容易导致慢查询(过期、删除) 主从复制异常,服务阻塞 无法正常响应请求 业务侧使用大Key的表现 请求Redis超时报错 拆分 将大key拆分为小key。例如一个String拆分成多个String 压缩 将value压缩后写入redis,读取时解压后再使用。压缩算法可以是gzip、snappy、lz4等。通常情况下, 一个压缩算法压缩率高、则解压耗时就长。需要对实际数据进行测试后,选择一个合适的算法。 如果存储的是JSON字符串,可以考虑使用MessagePack进行序列化。 集合类结构hash、list、set、set (1)拆分:可以用hash取余、位掩码的方式决定放在哪个key中 (2)区分冷热:如榜单列表场景使用zset,只缓存前10页数据,后续数据走db。