Redis的使用模式之計數器模式執行個體_Redis

來源:互聯網
上載者:User

Redis 是目前 NoSQL 領域的當紅炸子雞,它象一把瑞士軍刀,小巧、鋒利、實用,特別適合解決一些使用傳統關聯式資料庫難以解決的問題。打算寫一系列 Redis 使用模式的文章,深入總結介紹 Redis 常見的使用模式,以供大家參考。

常見匯總計數器

匯總計數是系統常見功能,比如網站通常需要統計註冊使用者數,網站總瀏覽次數等等。 使用 Redis 提供的基礎資料型別 (Elementary Data Type)就能實現匯總計數器,通過 incr 命令實現增加操作。

比如註冊使用者數,基本操作命令如下:

複製代碼 代碼如下:

 # 擷取註冊使用者數
  get total_users
  # 註冊使用者數增加一位
  incr total_users

按時間匯總的計數器

通常計數還要按時間統計,比如註冊使用者數需要按日統計,處理方法比較簡單,把日期帶入計數器 key 就可以。

還是註冊使用者計數的例子,基本操作命令如下:

複製代碼 代碼如下:

# 假定操作 2014-07-06 資料
  # 擷取註冊使用者數
  get total_users:2014-07-06
  # 2014-07-06 註冊使用者數增加一位
  incr total_users:2014-07-06
  # 設定 48 小時到期時間 172800 = 48 * 60 * 60
  expire total_users:2014-07-06 172800

為計數器設定一個 48 小時的到期時間是為了節省計數器佔用空間,畢竟 redis 是記憶體資料庫,可以在到期前執行一個任務把計數器存入關聯式資料庫。

速度控制

速度控制也是 Redis 一種常見的計數用途,比如有一個 API 服務,希望控制每一個 IP 每秒請求數不超過 10 次,可以用 IP 和 時間秒作為 key 設定一個計數器,實現控制,虛擬碼如下所示:

複製代碼 代碼如下:

 # 每秒最大請求數
  MAX_REQUESTS_PER_SECOND = 10

  # 檢查 ip 要求節流
  # @param ip
  # @raise 超過限制,拋出 RuntimeError 異常

  def check_request_limitation_for_ip(ip)
    time_tick = Time.now.to_i
    key = "#{ip}:#{time_tick}"
    num = $redis.get(key).to_i
    if num > MAX_REQUEST_PER_SECOND
      raise 'too many requests'
    else
      $redis.incr(key)
      $redis.expire(key, 10)
    end
  end

使用 Hash 資料類型維護大量計數器

有時候需要維護大量計數器,比如每一個論壇主題的查看數,比如每一個使用者訪問頁面次數,因為論壇主題和使用者基數可能很大,直接基於論壇主題或使用者識別碼 產生計數器的話,佔用 Redis 資源還是相當可觀的,這時可以用 Hash 資料類型壓縮所需資源。

比如,對應論壇主題查看計數,可以由模式

複製代碼 代碼如下:

  key: topic:<topic_id>:views
  value: view count (integer)

轉換為模式:

複製代碼 代碼如下:

 key: topic:views
  value: hash
    hash key: <topic_id>
    hash value: view count (integer)

總結:利用 Redis 實現計數器,可以簡單高效實現各種計數功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.