赞
踩
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
阶段1、深入多线程
阶段2、深入多线程设计模式
阶段3、深入juc源码解析
码哥源码部分
码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】
码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】
码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】
码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】
打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】
1.2.2 字符文本(REDIS_STRING) 适用场景建议
【建议】选型为简易文本类缓存 :比如普通的字符、文本、Json结构 ,通常能起到加速读写和降低后端压力的作用。
【建议】计数场景:用于对数值进行增减,同样适用于分布式系统的增量和减量计算
【建议】共享Session:在分布式系统中,用户的每次请求会访问到不同的服务器,这就会导致 session 不同步的问题。
lrange key 0 9
分页获取文章列表。hset [key] [field] [value]
命令, 可以实现以用户Id,商品Id为field,商品数量为value,恰好构成了购物车的3个要素。说明:Redis 中的 Set和Java中的HashSet 类似,内部的键值对是无序、唯一 的。相当于一个特殊的字典,字典中所有的value默认都是一个NULL值。当集合中最后一个元素被移除之后,数据结构被自动删除,内存被回收。
【建议】通用的HashSet 集合使用场景,对于Set中的取值、判断、统计,添加跟移出都有很便利的支持。
比如社交领域的 好友、关注、粉丝、感兴趣的人 等场景:
【建议】Set具备随机获取能力,建议在一些对集合值随机取数场景使用。
类似首页展示随机:美团首页有很多推荐商家,但是并不能全部展示,set类型适合存放所有需要展示的内容,而 srandmember 命令则可以从中随机获取几个。
【建议】Set具备Single能力,建议在一些对集合值需要去重的场景中使用。
类似存储某活动中中奖的用户ID ,因为有去重功能,可以保证同一个用户不会中奖两次。
说明:zset也叫SortedSet,一方面保证了内部 value 的唯一性,另方面它可以给每个 value 赋予一个score,代表这个value的排序权重,所以又具备排序功能。
mt_shop_order
、bidu_istio_userinfo
【必须】提前评估数据的生命周期,合理设置数据过期时间和实效策略,如无特殊情况,所有key必须均设置过期时间;
【必须】避免使用系统自带的自动过期时间机制;
【建议】定期手动清理数据空间,避免僵尸缓存占用空间;
【建议】批量建立的缓存需要打散过期时间,防止集中过期导致数据不可恢复带来的影响; 一般我们采用 n * 3/4 + n * random() 。所以,如果是8小时,就是6小时 + 0~2小时的随机值。
【必须】尽量避免将缓存持久化,这也是Redis官方的建议,需要将缓存持久化的项(无论是AOF还是RDB)或者无过期时间的项,均需严格报备评审并做记录,无用时需严格销毁。
【建议】控制列表长度N的数量,一般控制在1W以内,有遍历的需求可以使用hscan、sscan、zscan代替;
一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素),但是如果列表太长,就跟它高速缓存的目标相悖
【必须】禁止使用keys、flushall、flushdb等操作;
【建议】使用批量操作,提高效率,控制一次性操作元素个数,建议为500;
说明:获取集合中的元素(HASH 类型的 hgetall、List 类型的 lrange、Set 类型的 smembers、zrange 等命令)。如果全量或大量操作会对整个底层数据结构进行全量扫描 ,导致阻塞 Redis 主线程。
【建议】减少事务的使用(redis暂时不支持事务回滚);
【必须】扫描涉及元素数量比较大且设置过期时间的禁止使用scan;
说明:本标准以业内现有的主流分布式数据存储服务能力 为参考,建议读者在设计具备高可用缓存服务的时候,可以通过以下几个部分进行衡量。
主要包含三种模式:常规的主从模式,哨兵模式,和高扩展的分布式集群,配合使用。读者在在设计的时候,根据业务规模和具体实现情况进行选择。
设计时需要保证如下基本要求:
异地多活
【建议】异地多活,多IDC,能保证非强同步(即异步同步),也就是说数据保持最终一致性,并非强一致性。
【建议】多主之间需保证支持至少 1W TPS传输峰值达到 10M/s。
【建议】机房具备容灾:建议多IDC部署,避免单个机房掉电、火灾、网络故障 导致整个系统不可用。
【建议】需保证单机房异交换机部署方式,具备一定的高可用能力。可以部署多个节点,部分节点挂掉后不影响业务;
数据节点支持多副本,单节点挂掉后,不影响业务,管理节点具备高可用性,支持多个节点部署。
【建议】异地机房如果只是用作备服,异步同步可以允许有些许数据延迟,延迟时间不应超过5分钟。
异地的数据中心 主 - 主 同步采用的是异步同步,如下图所示,是异步获取的,会因为延迟导致的数据暂时不一致性。
参考这篇:布隆过滤器
参考这篇:再聊缓存击穿,面试是一场博弈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。