最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何利用 Redis 實現接口頻次限制

 更新時間:2021年02月04日 09:51:26   作者:你的小可愛吖  
這篇文章主要介紹了如何利用 Redis 實現接口頻次限制,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

介紹:

我們可以利用 redis 過期Key來實現接口的頻次限制??梢宰远x一些訪問的(速度)限制條件來把那些觸發(fā)限制的請求拒之門外.一般常用來進行對爬蟲的限制.

下面就利用 redis 來實現了一個簡單的案例:

裝飾器實現

def frequency_limit(f):
  @wraps(f)
  def frequency_function(*args, **kwargs):
    if 'csrf_token' in session:
      token = session.get("csrf_token")
      url_ = request.url_rule
      redis_key = token + str(url_)
      conn = redis.StrictRedis(host="127.0.0.1", port="6379", password="123456", db=0)
      clicks = conn.get(redis_key)
      if not clicks:
        conn.set(redis_key, 1)
        conn.expire(redis_key, 60)
      else:
        if int(clicks) >= 5:
          return jsonify({'code': 500, 'status': 0, 'message': "您的訪問頻率太快,請稍后再試", 'data': [],
                  'token': token})
        overdue = 1 if conn.ttl(redis_key) <= 0 else conn.ttl(redis_key)
        conn.set(redis_key, int(clicks) + 1)
        conn.expire(redis_key, overdue)
    return f(*args, **kwargs)

  return frequency_function

注:在使用 redis Key過期的時候需要注意,在設置了過期時間后,再次改變 Key 的 Value 值時,之前設置的過期時間會失效。

解決辦法:

1)在修改 Value 值的時候,查一下過期時間還有多少 ttl 在修改值的時候把過期時間重新賦值回去(本文用的就是此方法)

2)redis 中設置了過期時間,如果 list 結構中添加一個數據或者改變 hset 數據的一個字段是不會清除超時時間的;

官方網站看了一下expire的說明:
這樣解釋的:

The timeout will only be cleared by commands that delete or overwrite the contents of the key, including DEL, SET, GETSET and all the *STORE commands. This means that all the operations that conceptually alter the value stored at the key without replacing it with a new one will leave the timeout untouched. For instance, incrementing the value of a key with INCR, pushing a new value into a list with LPUSH, or altering the field value of a hash with HSET are all operations that will leave the timeout untouched.

如果用DEL, SET, GETSET會將key對應存儲的值替換成新的,命令也會清除掉超時時間;如果list結構中添加一個數據或者改變hset數據的一個字段是不會清除超時時間的;如果想要通過set去覆蓋值那就必須重新設置expire。

到此這篇關于如何利用 Redis 實現接口頻次限制的文章就介紹到這了,更多相關Redis 實現接口頻次限制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • redis字符串類型_動力節(jié)點Java學院整理

    redis字符串類型_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了redis字符串類型的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Redis秒殺實現方案講解

    Redis秒殺實現方案講解

    這篇文章主要介紹了Redis秒殺實現方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • 淺談Redis中bind的坑

    淺談Redis中bind的坑

    本文主要介紹了淺談Redis中bind的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Redis 過期鍵刪除策略的實現示例

    Redis 過期鍵刪除策略的實現示例

    Redis的過期數據刪除策略主要有三種,包括定時刪除、惰性刪除和定期刪除,本文主要介紹了Redis 過期鍵刪除策略的實現示例,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Redis集群的相關詳解

    Redis集群的相關詳解

    這篇文章主要介紹了Redis集群的相關,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Redis的KEYS 命令千萬不能亂用

    Redis的KEYS 命令千萬不能亂用

    這篇文章主要介紹了Redis的KEYS 命令千萬不能亂用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Redis的數據類型和內部編碼詳解

    Redis的數據類型和內部編碼詳解

    Redis是通過Key-Value的形式來組織數據的,而Key的類型都是String,而Value的類型可以有很多,在Redis中最通用的數據類型大致有這幾種:String、List、Set、Hash、Sorted Set,下面通過本文介紹Redis數據類型和內部編碼,感興趣的朋友一起看看吧
    2024-04-04
  • Redis性能監(jiān)控的實現

    Redis性能監(jiān)控的實現

    本文使用 redis_exporter + prometheus +grafana 實現對Redis服務進行監(jiān)控,原因:成本低,人工干預少,感興趣的可以了解一下
    2021-07-07
  • 詳解Redis數據類型實現原理

    詳解Redis數據類型實現原理

    這篇文章主要介紹了Redis數據類型實現原理,在工作中或學習中有需要的小伙伴可以參考一下這篇文章
    2021-08-08
  • redis發(fā)布和訂閱_動力節(jié)點Java學院整理

    redis發(fā)布和訂閱_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了redis發(fā)布和訂閱的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

玉山县| 梅州市| 合江县| 上蔡县| 武威市| 宜昌市| 天祝| 闸北区| 五河县| 洪泽县| 玉山县| 万载县| 河源市| 通化市| 象山县| 农安县| 永昌县| 霞浦县| 红河县| 龙里县| 定南县| 易门县| 舞钢市| 平山县| 环江| 台前县| 个旧市| 沭阳县| 枣阳市| 蒙自县| 佛冈县| 周至县| 汾西县| 芦溪县| 洛南县| 青浦区| 胶州市| 曲松县| 鄂托克旗| 涪陵区| 拉萨市|