V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
twogoods
V2EX  ›  程序员

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

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

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

    多谢多谢!
    Miy4mori
        21
    Miy4mori  
       2017-07-11 09:45:24 +08:00 via iPhone
    @dylanhf 其实我是从官网看的,我实际使用中并没有优化过 redis。https://redis.io/topics/benchmarks
    dylanhf
        22
    dylanhf  
       2017-07-12 11:06:14 +08:00
    @Miy4mori 哈哈,好吧。谢啦~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   874 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:53 · PVG 05:53 · LAX 14:53 · JFK 17:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.