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 数据维护么 我也想了解了解

7683 次点击
所在节点    Redis
73 条回复
JKeita
2021-11-05 16:45:16 +08:00
这访问量,触及我知识盲区
Maboroshii
2021-11-05 16:45:31 +08:00
你们是不是代码写错了? 批量的请求变成了循环请求...
ffxrqyzby
2021-11-05 16:48:13 +08:00
70 亿感觉请求那边放大了, 我记得阿里双十一才 40 亿
siweipancc
2021-11-05 16:48:30 +08:00
……我大胆设想一下,你们的数据更新推送是不是没做,靠前端轮询
iColdCat
2021-11-05 16:51:00 +08:00
40-50E 的量如果你们系统没崩就说明 redis 就应该是这么用的
NoString
2021-11-05 16:57:50 +08:00
楼主这是广告业务吗? 70 亿也太猛了 ..我真不知道
gemini767
2021-11-05 17:03:02 +08:00
假设一个 value 100k
峰值给你估 10e 来算 你需要的瞬时带宽是 100 * 10e = 100,000,000,000k = 100tb/s

要不就是你对项目还没有完全了解,要不就是你的数据统计是混乱的
Yiki
2021-11-05 17:04:32 +08:00
一天 70e 我的天
中国网民都没有 70e...开个专栏具体说说吧
stop9125
2021-11-05 17:08:22 +08:00
要换成 8W/s 的 qps ,峰值算 10 倍,80w/s 感觉一些核心业务还是能拿到的
这个量大多考虑的是分片数据均不均匀,会不会把某个分片搞高,然后整体宽带够不够的问题
peyppicp
2021-11-05 17:13:27 +08:00
我们有系统使用 redis 缓存 RPC 结果的,接口调用量级大概在 20w qps 左右
比较推荐的方法是每个人一个 Key ,这样在进行 redis 主从同步时压力较小; redis 大 key 会降低 redis 吞吐,p99 也会上升

还有一个问题是,拆分的 1000 个 key ,是按照人群维度拆分的吗
cheng6563
2021-11-05 17:16:15 +08:00
Redisson 的 getLocalCachedMap 对应的 Redis 类型就是 hash 吧,那就没啥问题了啊就是这样用的啊,甚至都不需要这 1000key 吧
swulling
2021-11-05 17:22:39 +08:00
8w qps 可以了
xiatian0415
2021-11-05 17:29:56 +08:00
一开始我对我们系统还没啥感觉,现在发现系统 100 多万 QPS ,看评论,感觉这个量级还是挺高啊😂。 得好好看架构代码了。刚毕业不久的
shanghai1943
2021-11-05 17:33:56 +08:00
我还是想等楼主来澄清一下 70e 的数据是怎么来的。。
dynastysea
2021-11-05 17:38:15 +08:00
@CantSee 一天 70e 真不多啊,redis 的可以做到几十万 /s ,就是因为有类似这种需求啊,大厂里就很多场景了。也不要简单理解为 70e 就要对应多少人。有些写扩散场景,比如微信,一个人发一条消息,大群要同时给 500 人扩散写,这种并发一下就上去了。
dynastysea
2021-11-05 17:39:21 +08:00
@Yiki 你是开发吗?请求 70e 代表 70e 用户吗?一万个用户也有可能啊
flexbug
2021-11-05 17:40:05 +08:00
你们还在用哨兵,不用集群模式吗
dynastysea
2021-11-05 17:46:39 +08:00
这样维护的意义只是为了减少 key 吗?否则一个用户一个 key 也是可以的,看起来也没有太大问题
X0ray
2021-11-05 17:46:51 +08:00
70 亿 也可能是读放大造成的,比如一个事件到了以后需要查 100 次 redis ,并不是说就有 70 亿次业务调用。
nicebird
2021-11-05 17:59:08 +08:00
等于手动再分了一次表,看上去没啥问题

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

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

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

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

© 2021 V2EX