• 请不要在回答技术问题时复制粘贴 AI 生成的内容
golangLover
V2EX  ›  程序员

如何正确的使用 redis

  •  
  •   golangLover · Aug 11, 2022 via Android · 3307 views
    This topic created in 1457 days ago, the information mentioned may be changed or developed.
    求教于各位,先谢谢了



    例如一个方法里面收十几个参数,这种东西你们会直接缓存掉这个方法吗?



    如果方法是接受 list 的,然后里面一个数据库查询是用 in 查询结果,那不同的 in 肯定就出来不同的结果啊。那每一次参数变更查不到就存起来吗?



    还有就是这个 key 的设计也很难设计啊。。一个方法收 10 个参数,而且参数值可变,例如 grade 这个字段,可以是 normal 又可以是 vip , 而且还有例如 type ,这样夹起来有好几十个组合,不知道这种怎么设计。







    另外就是我觉得不停的查缓存有没有这个 key ,有就拿,没有就存起来这个 template 代码好烦的感觉。。。不知道应该怎么办。
    8 replies    2022-08-27 23:39:43 +08:00
    lingly02
        1
    lingly02  
       Aug 11, 2022 via iPhone   ❤️ 1
    简单做法,把所有参数值拼起来计算 md5 作为 key 。
    k9982874
        2
    k9982874  
       Aug 11, 2022 via Android
    楼上正解
    Juszoe
        3
    Juszoe  
       Aug 11, 2022
    一般封装成装饰器(注解)来复用逻辑吧,比如 py 的 https://pypi.org/project/python-redis-cache/
    有些语言没有装饰器就不知道了
    exonuclease
        4
    exonuclease  
       Aug 11, 2022
    参数太复杂的话命中率真的高吗 没啥必要丢缓存吧
    spediacn
        5
    spediacn  
       Aug 12, 2022
    @exonuclease 正解,平白给部署增加复杂度
    chendy
        6
    chendy  
       Aug 12, 2022
    对于很多项目正确的使用方式是不用
    好好优化一下数据库和查询逻辑就够了
    tyrone2333
        7
    tyrone2333  
       Aug 12, 2022
    如何正确 "地" 使用 redis
    golangLover
        8
    golangLover  
    OP
       Aug 27, 2022
    @lingly02 谢谢了,这个方法可行的。

    @Juszoe 好的谢谢。

    @exonuclease 参数是多的,但是也不是完全没有组合。但是我就不知道数据库查询比较复杂的情况,redis 能不能解决掉这种问题。

    @chendy 瓶颈在数据库。然而写的 sql 应该已经尽量优化了。但还是有很多 in 的查询(例如某个表格查询返回一群 id, 然后用这些 id 在数据库中再用 In 查询), 并发量上不去,瓶颈在数据库。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2511 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 15:34 · PVG 23:34 · LAX 08:34 · JFK 11:34
    ♥ Do have faith in what you're doing.