• redis-过期时间、访问限制与缓存


    原文:http://www.tuicool.com/articles/baaUJ3

    过期时间:

    redis > SET session:27e7a id1234
    OK
    redis > EXPIRE session:27e7a 1200
    (integer) 1

    EXPIRE命令返回1表示成功,返回0表示键值不存在或设置失败。

    #查看剩余时间
    ttl session:27e7a

    ttl命令在键不存在或被删除之后,会返回-2,在没有为键设置生存时间(即永久存在,建一个键之后的默认情况)时返回的是-1

    #取消过期时间

    persist session:27e7a

    除了使用persist命令外,使用set、getset命令为键赋值,也会同时消除键的过期时间


    访问限制:

    需求:限制一个用户对一个资源的访问频率,我们假定一个用户(用IP作为判断)每分钟对一个资源访问次数不能超过10次。

    方案:设定一个队列rate.limiting.192.168.1.1(假定是这个IP),把每次的访问时间都添加到队列中,当队列长度达到10以后,判断当前时间与队列第一个值的时间差是否小于60,如果小于60则说明60秒内访问次数超过10次,不允许访问;否则说明可以访问,则把队列头的值删除,队列尾增加当前访问时间。

    缺点:当限制的次数比较大时,这种方法占用的存储空间也会比较大。


    缓存:

    有时候会把一些对CPU或IO资源消耗比较大的操作结果缓存起来,并设置一定时间的自动过期。比如我们设定一个微博外链的最热站点缓存放于新浪微博的首页,这样我们不可能每次访问都重新计算最热的外链站点,所以我们可以设定两小时更新一次。每次访问是判断这个键有没有,如果存在则直接返回,如果没有则通过计算把内容存入键中,并设定两小时的过期时间。

    所以我们最好的办法是设定缓存的淘汰规则。这种方式比较适用于将redis用作缓存系统的时候比较好。

    具体就是:修改配置文件中的maxmemory参数,限制redis的最大内存,当超出后会按照maxmemory-policy参数指定的策略删除不需要的键,直到redis占用的内存小于设定值。  

      

    规则

    说明

    volatile-lru

    使用LRU 算法 删除一个键(只对设置了生存时间的键)

    allkeys-lru

    使用LRU算法删除一个键

    volatile-random

    随机删除一个键(只对设置了生存时间的键)

    allkeys- random

    随机删除一个键

    volatile-ttl

    删除生存时间最近的一个键

    noeviction

    不删除键,只返回错误

     LRU算法即是【最近最少使用】


  • 相关阅读:
    [学习笔记] 高维前缀和
    [模板] BEST 定理
    [HDU6765] Count on a Tree II Striking Back
    Codeforces Round #775 (Div. 1)
    Stream流:自定义的distinctByKey根据对象的属性进行去重
    代码优化:尽量采用懒加载的策略,即在需要的时候才创建
    volatile解决内存可见性的使用
    代码优化:String替换尽量少用正则表达式(replace()和replaceAll()的区别)
    内存可见性以及synchronized实现可见性
    代码优化:防止空指针异常 NPE ,是程序员的基本修养,注意 NPE 产生的场景:
  • 原文地址:https://www.cnblogs.com/rigid/p/6513919.html
Copyright © 2020-2023  润新知