美文网首页
Redis/Memcache 节省资源技巧

Redis/Memcache 节省资源技巧

作者: Wind哥 | 来源:发表于2019-11-20 11:33 被阅读0次

    有这样的一个需求:限制每个IP对每个资源的访问
    1.单个资源访问间隔超过30s;
    2.单个资源一天最多能访问10次;
    3.单个ip过来访问的时候,需要最快速度返回访问计数信息(或者说是屏蔽资源列表)

    基于第三要求,设计为

    ipKey {
        srcKey:(int)counter,/记录资源访问次数
        srcTimestamp:long(timestamp)//记录最后访问时间
    }
    

    5台机器 每个机器开两个16G实例,一主一从,可用80G空间
    约12万QPS,每小时消耗5G多(每个master1G多/小时),集群吃不消。

    于是调优结构,改成如下

    ipKey{
        srcKey:"counter:second of today" //字符串形式保持,"{计数器}:{当天第几秒}"
    }
    

    在达到目的的情况下尽量压缩redis空间。
    其中cnt,和timestamp 可以通过字符串反算出来,咱知道性能方面 内存>>磁盘IO>>网络IO
    这个修改不仅提升了redis的利用率,还大大缩减了网络IO,这点反算成本(在内存上进行),算不了什么。

    优化结构后 一天数据约10来G,省下不小服务器资源

    这个是基于这边的用途:
    1.本身需要读取时间戳判断,现在改成读字符串,性能上没损失
    2.只是作为限制资源,所以计数器不要求十分精准(get出来,判断好,set回去,高并发,大家都懂)
    3.不适用于本身需要直接在redis上计数的计数器(incr之类的,那种场景只能用int)

    另外,memcache也是类似的

    相关文章

      网友评论

          本文标题:Redis/Memcache 节省资源技巧

          本文链接:https://www.haomeiwen.com/subject/fkxoictx.html