Redis 到底应该怎么存储使用?

2021-11-05 14:29:36 +08:00
 chengouzi

问这个是因为我们公司目前的方法 我觉得挺不妥的 然后我也没有接触过别的公司或者并发比较大的系统中如何存储以及如何读取 redis

使用 redisson 连接的 redis(哨兵)

目前是存人群信息, 分了 1000 个 key (redis 中 key 如果很多的话会有问题么)

1000 个 key 的 value 是 一个大 Map ,存取这个 map 用的是 getLocalCachedMap

map 的每个 key 对应一个人 value 就是他的数据(数据量肯定不大 几百 k 吧)

然后业务集群每天大概请求在 40 -50 亿 然后峰值是 70 亿(其中也会过滤一些请求 比如不合法的或者各种过滤条件过滤掉),剩下的基本每次请求都会去请求一下 Redis 拿用户数据

这样一个 map 的话就会存多个人群数据 这样子维护的话 不会混乱么 比如有的人更新了有的人数据没更新

大家有做过类似的这种 redis 数据维护么 我也想了解了解

8299 次点击
所在节点    Redis
73 条回复
v2orz
2021-11-06 10:31:19 +08:00
比你们小一半左右的量
我觉得不是很妥当,key 数量并不会显著影响存取性能,但是大 key or 大 value 会显著降低 redis 性能
小于 1k 的键值对操作性能,和 10k 以上的 k-v 操作性能,有数量级差距
印象中 redis hash 结构推荐的 field 数量应该在 100 左右以内

另一方面,我的理解,你们是手动将人群进行了 hash 分片,自己维护。但这本身是可以由 cluster 来做的事情。
eric96
2021-11-06 10:41:41 +08:00
应该是广告相关的,看描述,是实时竞价相关的吗,交易所或者 DSP 吧
draymonder
2021-11-06 10:45:36 +08:00
感觉楼上的 xdm ,都不好好看内容啊,人家说的是 一天的峰值在 70 亿,平均下来是 8w qps ,平均峰值三倍 24w qps ,用 localcache + redis 是能抗住的吧...
chengouzi
2021-11-06 11:04:16 +08:00
@v2orz 看了你说的, 我现在理解是我们公司 redis 撑不住 每次业务请求来了都去请求 redis 拿数据,最后你说的
你们是手动将人群进行了 hash 分片,自己维护。但这本身是可以由 cluster 来做的事情。
这个问题是因为 redis 现在是跨机房的(一个在金华 三个从节点在北京),运维说 集群如果同步挂了 很麻烦,所以只能是主从同步这样子搞,
然后就把多个人群数据放到一个 map 中 使用 redisson 的 localcachemap 缓存到本地, 这样子也就减少了请求 redis
(这么算下来还是公司钱不够哇...... 可能老板也是想着 降低成本 然后做更高效的事情 ...)
chengouzi
2021-11-06 11:05:15 +08:00
@eric96 怎么好多人都知道.... 这么明显么 大佬做过 ADX 么
v2orz
2021-11-06 14:50:00 +08:00
@chengouzi
这个问题是因为 redis 现在是跨机房的(一个在金华 三个从节点在北京),运维说 集群如果同步挂了 很麻烦,所以只能是主从同步这样子搞,

确实有点麻烦。所以我们的做法是,直接建了两个一样的 cluster , 第一个挂了直接干掉,转移到第二个 cluster 去

单 redis 撑不住就 cluster 分片。cluster 太大了就手动先分一次(比如多个主 cluster )
kieoo
2021-11-06 16:44:36 +08:00
广告业务一天流量 70 亿很正常的, 多 region, 多集群部署, 是抗得下来的, 说白了就是堆机器; 这边 redis 主要存临时数据(数据存储是在 mongodb, s3 上比较稳, 然后通过类 ETL 定期更新 redis), 按广告业务的量级, 肯定要做本地缓存(从 redis 集群成本和稳定性考虑); 楼主是哪家 ADX?
kerro1990
2021-11-07 09:52:50 +08:00
facebook 开源的那一套很轻松搞定
chengouzi
2021-11-07 10:24:10 +08:00
@kieoo 我们 redis 用来存人群信息和请求的进行匹配 比较简单是频次限制 ,我看你说的你们是存临时数据的,咱们可能用法不太一样

哪家 ADX 就不方便说了.... 小公司而已
itfisher
2021-11-07 12:25:08 +08:00
@chengouzi 非广告也有这么高的呀,redis 请求有可能是服务放大之后的结果,之前搞过 redis 1000w qps 的项目,也就是怼机器罢了
SirCarol
2021-11-12 13:16:15 +08:00
楼主也是在做计算广告相关的业务吗?看这种场景,应该是用户通过移动端(或 PC 端)经过无线请求到后端检索平台的 ADX ,然后 ADX 会经过分发、过滤、排序(粗排、精排)等过程,然后查 Redis 。与 ADX 对接的可能还会有公司内部的 DSP 和外部的 DSP 平台。

但是你说的「 redis 用来存人群信息和请求的进行匹配」,针对人群信息,我所在的公司有内部自己搭建的 DMP 平台,在进行人群信息匹配的时候,后端会将 ADX 的请求通过用户唯一标识( imei 或 idfa 或 oaid )与 DMP 平台匹配人群定向信息,当然也会有人群包的概念,对于匹配的结果其实会放在本地缓存或 MySQL 中的。具体展开讲的话,会有很多细节的部分。因为我自己本身也在做品牌广告投放端和检索端的事情,如果感兴趣的话,可以多多交流~
SirCarol
2021-11-12 13:21:51 +08:00
@chengouzi # 62 我所在的部门也是自己实现的 ADX 、DSP ,只不过是单独实现了一个频控服务工程,这些都是 C 端的服务,它们要求系统的性能比较高,由于调用链路短,因此对代码的要求比较高。而 B 端的话,流量比较小,而且调用链路比较长,要求系统具有一定的稳定性。
chengouzi
2021-11-12 17:58:34 +08:00
@SirCarol 我们现在比较成熟的就是 adx ssp ,然后现在在慢慢做 dmp dmp 现在就是把人群包解析到 redis 中 然后请求来了进行匹配

以后可以多交流 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/813275

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX