Redis 使用求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond

Redis 使用求助

  •  
  •   LeeReamond 2021 年 3 月 15 日 1109 次点击
    这是一个创建于 1865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我在菜鸟教程的 Redis 页面大概过了一下 redis 使用方法,遇到一些不清楚的地方。

    其一是,redis 的基础数据类型中,key 的 api 很丰富,可以设置超时等等,但 list 和 hash 则没有这么丰富,不知道能否手动设置超时?一个典型的业务场景是,后端生成验证码校验,利用 redis 进行多节点间的同步,最方便的方式是 redis 里设置好超时时间,比如五分钟,这样用户申请验证的时候业务端只需要查一下 redis,如果能获取到数据就一切正常,如果获取不到数据就说明该验证码失效了,很清晰。

    但是这种验证码如果使用 key 的话很不好管理,key 的数量会泛滥,最好放在同一个 hash 里面,而 hash 我观察网上写的 api,并没有超时功能,想请问一下是就是这么设计的还是有什么别的用法?

    ===

    其二问题是,redis 有没有办法主动限制 hash 的存储量。典型业务场景是进行页面缓存管理,比如我服务器资源有限,我想限制 redis 最多保存一万条缓存,超过数量则按照先进先出方式滚动,这个是业务上的限制需求。我目前了解到的实现方式,以上实现似乎是通过限制 redis 最大内存占用量,然后占用达到最大后触发 redis 的自动清理,来实现限制缓存量,但这种控制感觉不是很精确,而且清理会不会除了指定内容外,对其他不希望清理的内容产生影响呢?请问一下这类需求该怎么实现,谢谢

    8 条回复    2021-03-16 08:56:49 +08:00
    des
        1
    des  
       2021 年 3 月 16 日
    1 、redis 的 hash 没有单个 key 过期的功能,详见: https://github.com/redis/redis/issues/1042
    2 、可以使用 list 结构,每次 push 完用 ltrim 修剪。
    LeeReamond
        2
    LeeReamond  
    OP
       2021 年 3 月 16 日
    @des 感谢回复,所以需求 1 的实现方式应该就是用普通 key,然后每次 exists key 查看是否存在?需求 2 你提到的是一个方法,但可能我主题中描述有些问题,因为实际业务需求用 fifo 可能不太合适,最好是结合访问次数,比如一个多次被访问的页面即使加入时间较早也不会被挤到队列末尾。印象中以前看过一些技术文章,redis 是支持这类算法的,同样地是只能使用内存上限来进行限制吗?
    des
        3
    des  
       2021 年 3 月 16 日   1
    @LeeReamond
    文章的话,基本都是在讲 redis 自带的缓存淘汰,我看到的好像都是这样
    建议自行用 hash + sorted set 实现缓存淘汰算法

    另外提一句,你要实在看着一堆 key 难受,可以放另外一个 db,眼不见心不烦
    des
        4
    des  
       2021 年 3 月 16 日
    @des
    当然更为简单的是直接用 expire,访问过就重新设置一下 expire
    没有访问的话,就自动过期删除了,不过需要考虑一下内存会用满
    LeeReamond
        5
    LeeReamond  
    OP
       2021 年 3 月 16 日
    @des 请问“hash+sorted set 实现缓存淘汰算法”应该如何理解,想了一下没有理解怎么做。sortedset 中的字段可以和 hash 中的 key 相对应,然后呢?
    ferock
        6
    ferock  
    PRO
       2021 年 3 月 16 日
    页面缓存管理,该走 SE 的还是走 SE 去
    LeeReamond
        7
    LeeReamond  
    OP
       2021 年 3 月 16 日
    @ferock 请问 SE 是什么
    ferock
        8
    ferock  
    PRO
       2021 年 3 月 16 日
    @LeeReamond #7

    Search Engines,例如,你可以部署 Elasticsearch
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2869 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 13:09 PVG 21:09 LAX 06:09 JFK 09:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86