如何解决 redis value 较大的问题?

2017-04-09 13:57:36 +08:00
 twogoods
面试官看我用过 redis 就问了这个问题,当时我聊到的 redis 的场景是每个用户在 redis 里有一个 key , value 是这个用户的好友列表,是个 set 的结构,而且每个用户有个得分,用户主页里要列出这个用户的好友按这个得分排序的列表,这个排序我用了 redis 的 sortedset 。然后面试官问了这个 value 较大的问题,说实话我以前确实没考虑过这个问题,这种问题肯定得和业务场景联系起来的吧,硬着头皮说,在这个场景下拆分成多个 key ,每个 key 分别排序,排好的各拿出前 200 个继续排序,得出总的前 200 个好友,后面的用户排序应该没那么关心了。面试官不是很满意说发散性一般-_-......后来想想这™就是内存不够的排序嘛! redis value 较大这个只能跟业务联系起来做规避吧?
20072 次点击
所在节点    程序员
22 条回复
hareandlion
2017-04-09 14:08:37 +08:00
对同一个 key 的不同 score ,使用不同的加权来实现多个 value 的进一步分组,这个实用吗?
Ouyangan
2017-04-09 14:38:44 +08:00
问下楼主 , 这是把 redis 当数据库了么
twogoods
2017-04-09 15:22:50 +08:00
@Ouyangan 对,这个东西做成了微信上分享的页面供用户炫耀分数的。至于为什么,师傅定的,我是实习生,还真说不出 123😔
loveyu
2017-04-09 15:27:34 +08:00
有时候就是为了用 redis 而用 redis
twogoods
2017-04-09 15:31:46 +08:00
@hareandlion 没明白😳
Infernalzero
2017-04-09 16:02:55 +08:00
首先你得确定 value 达到多少 M 了算大,然后估算多少个好友会达到这个上限
你这种业务场景,如果好友列表只存 id 的话,几千个好友都不可能达到那个上限的
其次,这里即使这个 set 的 value 比较大,但因为数据是分页取的,并不会产生慢查询,除非你把整个 set 一下全取出来,如果是,那说明需求不合理,就要改需求为分页获取
而且这个和查 mysql 不同,也不会因为 offset 过大导致读取内存过多的问题
we3613040
2017-04-09 16:09:35 +08:00
什么叫 value 较大?是啥问题,大引起了什么问题?是存不下了还是什么?看不懂
mazyi
2017-04-09 16:36:08 +08:00
redis 毕竟不是数据库,何苦考虑大 value 的情况,这样 redis 不就失去了意义,快不起来了。
Miy4mori
2017-04-09 16:39:57 +08:00
貌似 redis 中 value 大于 10k 才会引起性能明显下降,你这个 set 集合无论怎么看都不会大于 10k 吧。
akira
2017-04-09 16:42:19 +08:00
@we3613040 随着 value 的增加 性能会急剧下降
sagaxu
2017-04-09 16:46:25 +08:00
你可以反问面试官, 1K 个好友, 1M 个好友,和 1G 个好友的时候分别怎么做
oclock
2017-04-09 16:48:53 +08:00
redis 有序集有 ZRANGEBYSCORE ,支持分页
boywang004
2017-04-09 17:17:49 +08:00
说句实话吧,一般绝大部分业务真遇不到 redis value 大带来的问题……所以面试官感觉有点儿小刁难,是不是你介绍里写〔精通〕 redis 了?呵呵。不过反过来说真遇到了那这个问题还挺严重的,嗯。
we3613040
2017-04-09 17:36:18 +08:00
@akira 没遇到需要考虑 value 大的场景,因为内存不够用么?这分 key 不也是还不够用么,只能加机器,做分布式
twogoods
2017-04-09 18:00:06 +08:00
@boywang004 我一应届的渣渣敢写精通...连熟悉我都要想一想再写😂
boywang004
2017-04-09 20:21:30 +08:00
@twogoods 这时候就反问面试官咯,还能表达出一幅对知识苛求的样子。最不济骗个答案下次面别的时候可以装个 B 。😂
izoabr
2017-04-09 23:26:32 +08:00
面试的问题,早年我遇到过一个面试问我一个以太网底层的问题,然后我正好又知道,回答了,面试官仍然不满意,但是我还是进去了,后来知道这是他们一直困扰解决不了的技术问题。
所以你懂的,互相尊重,谦虚请教,但不卑微,他未必比你明白。句号前的叫自信。
8355
2017-04-10 10:00:19 +08:00
这种其实就是伪需求,实际开发中应该规避的问题。但是现在却发生了问你怎么解决。直接说不知道没遇见过 把你能说的说了 然后问他怎么解决就好了。 说的好回去查查当学习 说的不好大概说明这个面试官也只不过想让你打不出来从而压点工资。。不必在意。
banksiae
2017-04-10 10:38:30 +08:00
sortedset 慎用,这东西数据量打了性能跟不上。 redis 尽量使用 O(1)的操作, redis 做存储用倒也可以,就是要考虑容量的问题,满了之后 lru 就比较麻烦了。
dylanhf
2017-07-10 18:49:00 +08:00
@Miy4mori 老铁你好,今天才看到这个帖子,我的项目也遇到类似的问题:有一组 Redis Hash 的 value,达到了 27KB,造成了 Redis 查询太慢,我们的项目系统后续的 HSET/HGET 操作因此而延迟。

想要跟你讨教下,这个 value,多大才算大呢?多大才算合适呢?
项目想要调整系统中这个 hash value 结构的大小,但是又拿捏不准这个值的大小。感觉老铁身经百战,能否给出一个建议呢?

多谢多谢!

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

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

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

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

© 2021 V2EX