欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用 Redis 實現(xiàn)接口頻次限制

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

介紹:

我們可以利用 redis 過期Key來實現(xiàn)接口的頻次限制。可以自定義一些訪問的(速度)限制條件來把那些觸發(fā)限制的請求拒之門外.一般常用來進(jìn)行對爬蟲的限制.

下面就利用 redis 來實現(xiàn)了一個簡單的案例:

裝飾器實現(xiàn)

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過期的時候需要注意,在設(shè)置了過期時間后,再次改變 Key 的 Value 值時,之前設(shè)置的過期時間會失效。

解決辦法:

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

2)redis 中設(shè)置了過期時間,如果 list 結(jié)構(gòu)中添加一個數(shù)據(jù)或者改變 hset 數(shù)據(jù)的一個字段是不會清除超時時間的;

官方網(wǎng)站看了一下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對應(yīng)存儲的值替換成新的,命令也會清除掉超時時間;如果list結(jié)構(gòu)中添加一個數(shù)據(jù)或者改變hset數(shù)據(jù)的一個字段是不會清除超時時間的;如果想要通過set去覆蓋值那就必須重新設(shè)置expire。

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

相關(guān)文章

  • Redis主從復(fù)制詳解

    Redis主從復(fù)制詳解

    今天小編就為大家分享一篇關(guān)于Redis主從復(fù)制詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的方法詳解

    Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的方法詳解

    這篇文章主要給大家介紹了關(guān)于Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Redis分布式鎖及安全問題解決

    Redis分布式鎖及安全問題解決

    在分布式環(huán)境中,遇到搶購等訪問共享資源的場景時,需要我們有一種鎖機(jī)制去解決并發(fā)問題,本文主要介紹了Redis分布式鎖及安全問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Redis鍵值設(shè)計的具體實現(xiàn)

    Redis鍵值設(shè)計的具體實現(xiàn)

    本文主要介紹了Redis鍵值設(shè)計的具體實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Redis官方ORM框架比RedisTemplate更優(yōu)雅

    Redis官方ORM框架比RedisTemplate更優(yōu)雅

    這篇文章主要為大家介紹了Redis官方ORM框架比RedisTemplate更優(yōu)雅的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 基于Redis實現(xiàn)搶紅包和發(fā)紅包功能

    基于Redis實現(xiàn)搶紅包和發(fā)紅包功能

    搶紅包是我們生活常用的社交功能, 這個功能最主要的特點(diǎn)就是用戶的并發(fā)請求高, 在系統(tǒng)設(shè)計上, 可以使用非常多的辦法來扛住用戶的高并發(fā)請求, 在本文中簡要介紹使用Redis緩存中間件來實現(xiàn)搶紅包算法,需要的朋友可以參考下
    2024-04-04
  • Redis安裝教程圖解

    Redis安裝教程圖解

    Redis是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。本文就教大家如何安裝Redis,需要的朋友可以參考下
    2015-10-10
  • 為什么RedisCluster設(shè)計成16384個槽

    為什么RedisCluster設(shè)計成16384個槽

    本文主要介紹了為什么RedisCluster設(shè)計成16384個槽,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Redis?搭建主從集群的操作指南

    Redis?搭建主從集群的操作指南

    單節(jié)點(diǎn)的?Redis?并發(fā)能力有限,要進(jìn)一步提高?Redis?的并發(fā)能力,就需要搭建主從集群,實現(xiàn)讀寫分離,這篇文章主要給大家介紹了Redis搭建主從集群的操作指南,需要的朋友可以參考下
    2023-08-08
  • redis分布式ID解決方案示例詳解

    redis分布式ID解決方案示例詳解

    這篇文章主要為大家介紹了redis分布式ID解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評論