Redis|青训营笔记

49 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第12天

本节课我们学习了大厂程序员是怎么用Redis

数据从单表,演进出了分库分表 ·MySQL从单机演进出了集群 数据量增长 ·读写数据压力的不断增加

Hash数据结构dict

rehash:rehash操作是将ht[O]中的数据, 全部迁移到h[1]中。数据量小的场景下, 直接将数据从ht[0]拷贝到ht[1]速度是较快的。数据量大的场景,例如存有上百万的KV时,迁移过程将会明显阻塞用户请求。 渐进式rehash:为避免出现这种情况,使 用了rehash方案。基本原理就是,每次用户访问时都会迁移少量数据。将整个迁移过程,平摊到所有的访问用不请求过程中。

5.限流

要求1秒内放行的请求为N,超过N则禁止访问 Key: comment_freq_limit_1671356046 对这个Key调用incr,超过限制N则禁止访问 1671356046是当前时间戳

Redis使用注意事项

1.大Key、热Key

大Key的危害 读取成本高 ·容易导致慢查询(过期、删除) ·主从复制异常,服务阻塞 无法正常响应请求 业务侧使用大Key的表现 ·请求Redis超时报错

2.慢查询场景

容易导致redis慢查询的操作 (1)批量操作一次性传入过多的key/value,如mset/hrmset/sadd/zadd等Oin)操作建议单批次不要超过100,超过100之后性能下降明显。 (2)zset大部分命令都是O(log(n),当大小超过5k以上时,简单的zado/zrom也可能导致慢查询 (3)操作的单个vakue过大,超过10KB,也即,源免使用大Kaey (4)对大kay的dela te/expirn操作也可能导致慢查询,Reois4.0之前不支持异步删除urirnk,大kry删除会脂塞Fadis

3.缓存穿透、缓存雪丽

缓存穿透:热点数据查询绕过缓存,直接查询数据库 缓存雪崩:大量缓存同时过期 缓存穿透的危害 (1)查询一个一定不存在的数据 通常不会缓存不存在的数据,这类查询请求都会直接打到db,如果有系统bug或人为攻击,那么容易导致d响应慢甚至宕机 (2))缓存过期时 在高并发场景下,一个热key如果过期,会有大量请求同时击芽至db,容易影响db性胞和稳定。 同一时间有大量koy集中过期时,也会导致大量请求落到db上,导致查询变慢,基至出现db无法响应新的查询