有没有方法让redis 自动做热数据缓存? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tioover
V2EX    Redis

有没有方法让redis 自动做热数据缓存?

  •  
  •   tioover
    tioover 2012-10-05 18:36:09 +08:00 16606 次点击
    这是一个创建于 4804 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ORM将某些常用的数据从SQL加载在redis上,然后获取的时候有统一的方式,redis里面有的就用redis里面的,没有的去数据库找。

    再比如说弄个计数器,发现一个时间段对某个数据访问比较频繁就自动放到redis里面,之后冷了以后就删掉。
    10 条回复    2016-09-05 20:21:08 +08:00
    zhangxiao
        1
    zhangxiao  
       2012-10-05 18:42:42 +08:00
    redis貌似可以设置expiration的吧,存的时候设置个过期时间就好了
    fire5
        2
    fire5  
       2012-10-06 15:04:00 +08:00
    个人想法,仅供参考啊
    1.规划缓存。 就是那些东西需要放在缓存中。这个在开发初期 其实你应该就需要想明白,用计数器的方式也是一种方式。 如果(频繁访问) db要是能抗住,那么其实cache 紧紧是为了提升性能。

    2.数据监控分析那些请求比较频繁,着重优化。

    3.缓存预热功能。在高并发访问时候,加入1万请求,同时压到db可能崩溃,那么在应用启动前对 缓存预加载内容也是一种措施。

    4.其实访问不频繁的也需要cache的,不过要是变化不大的 ,cache 超时时间设长点。
    fire5
        3
    fire5  
       2012-10-06 15:05:35 +08:00
    ps 我说的可能只适合网站应用奥。在通俗点 就是 cache命中率的问题。
    YUCOAT
        4
    YUCOAT  
       2012-10-06 17:36:13 +08:00
    楼上的和我用一样的头像
    fire5
        5
    fire5  
       2012-10-07 01:01:53 +08:00
    @YUCOAT 你是左撇子
    huangz
        6
    huangz  
       2012-10-07 14:41:04 +08:00   1
    这类系统可以用 Redis 的 EXPIRE 命令来实现。

    EXPIRE 命令的行为是:

    1)在 key 没有设置生存时间时,那么设置 key 的生存时间;
    2)如果 key 已经设置了生存时间,那么 EXPIRE 就会更新这个 key 的生存时间(注意更新的方式是覆盖而不是延长)。

    根据这一特性,可以在写入时设置数据 key 的生存时间,在读取时更新数据 key 的生存时间:这样在给定时间内被频繁访问的数据就可以一直保存下去,而没人访问的数据就会因为过期而被自动删除。

    以一个字符串 key 为例子:

    def cached_set(key, value)
    $redis.set(key, valu)
    $redis.expire(key, 5 * 60)
    end

    def cached_get(key)
    $redis.get(key)
    $redis.expire(key, 5 * 60)
    end

    以上的代码只会保存 key 数据 5 分钟,如果 5 分钟之内有人访问这个 key ,那么 key 的生存时间就会重新设为 5 分钟,只要一直有人访问,就会一直“续期”下去。

    至于没人访问的数据,在 5 分钟到期之后,就会自动被删除了。

    这应该就能达到缓存热数据的目的了。

    最后,使用这种技术时,要记得在更新数据之后刷新缓存,否则会出现缓存过期的现象。
    huangz
        7
    huangz  
       2012-10-07 14:44:18 +08:00   1
    Tips:将 set/get 命令和 expire 命令包裹在一条事务中,效果更佳。嗯。
    yingluck
        8
    yingluck  
       2014-09-22 23:36:56 +08:00
    @huangz set 和 expire 命令可以合并:setex
    huangz
        9
    huangz  
       2014-09-23 07:47:13 +08:00
    @yingluck 是的,感谢补充。
    yinhexi
        10
    yinhexi  
       2016-09-05 20:21:08 +08:00
    我就是觉得麻烦,每次 get 的时候也要设置过期。很麻烦。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2267 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 15:48 PVG 23:48 LAX 07:48 JFK 10:48
    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