婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Redis的使用模式之計(jì)數(shù)器模式實(shí)例

Redis的使用模式之計(jì)數(shù)器模式實(shí)例

熱門標(biāo)簽:江西南昌百應(yīng)電話機(jī)器人 400電話從哪里申請濱州 天音通信電話機(jī)器人 hbuilder地圖標(biāo)注 隨州營銷電話機(jī)器人怎么樣 400電話申請?jiān)趺纯?/a> 高德地圖標(biāo)注商家在哪 杭州400電話如何申請的 機(jī)器人電話機(jī)創(chuàng)意繪畫

Redis 是目前 NoSQL 領(lǐng)域的當(dāng)紅炸子雞,它象一把瑞士軍刀,小巧、鋒利、實(shí)用,特別適合解決一些使用傳統(tǒng)關(guān)系數(shù)據(jù)庫難以解決的問題。打算寫一系列 Redis 使用模式的文章,深入總結(jié)介紹 Redis 常見的使用模式,以供大家參考。

常見匯總計(jì)數(shù)器

匯總計(jì)數(shù)是系統(tǒng)常見功能,比如網(wǎng)站通常需要統(tǒng)計(jì)注冊用戶數(shù),網(wǎng)站總瀏覽次數(shù)等等。 使用 Redis 提供的基本數(shù)據(jù)類型就能實(shí)現(xiàn)匯總計(jì)數(shù)器,通過 incr 命令實(shí)現(xiàn)增加操作。

比如注冊用戶數(shù),基本操作命令如下:

復(fù)制代碼 代碼如下:

 # 獲取注冊用戶數(shù)
  get total_users
  # 注冊用戶數(shù)增加一位
  incr total_users

按時(shí)間匯總的計(jì)數(shù)器

通常計(jì)數(shù)還要按時(shí)間統(tǒng)計(jì),比如注冊用戶數(shù)需要按日統(tǒng)計(jì),處理方法比較簡單,把日期帶入計(jì)數(shù)器 key 就可以。

還是注冊用戶計(jì)數(shù)的例子,基本操作命令如下:

復(fù)制代碼 代碼如下:

# 假定操作 2014-07-06 數(shù)據(jù)
  # 獲取注冊用戶數(shù)
  get total_users:2014-07-06
  # 2014-07-06 注冊用戶數(shù)增加一位
  incr total_users:2014-07-06
  # 設(shè)置 48 小時(shí)過期時(shí)間 172800 = 48 * 60 * 60
  expire total_users:2014-07-06 172800

為計(jì)數(shù)器設(shè)置一個(gè) 48 小時(shí)的過期時(shí)間是為了節(jié)省計(jì)數(shù)器占用空間,畢竟 redis 是內(nèi)存數(shù)據(jù)庫,可以在過期前執(zhí)行一個(gè)任務(wù)把計(jì)數(shù)器存入關(guān)系數(shù)據(jù)庫。

速度控制

速度控制也是 Redis 一種常見的計(jì)數(shù)用途,比如有一個(gè) API 服務(wù),希望控制每一個(gè) IP 每秒請求數(shù)不超過 10 次,可以用 IP 和 時(shí)間秒作為 key 設(shè)置一個(gè)計(jì)數(shù)器,實(shí)現(xiàn)控制,偽代碼如下所示:

復(fù)制代碼 代碼如下:

 # 每秒最大請求數(shù)
  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 數(shù)據(jù)類型維護(hù)大量計(jì)數(shù)器

有時(shí)候需要維護(hù)大量計(jì)數(shù)器,比如每一個(gè)論壇主題的查看數(shù),比如每一個(gè)用戶訪問頁面次數(shù),因?yàn)檎搲黝}和用戶基數(shù)可能很大,直接基于論壇主題或用戶 ID 生成計(jì)數(shù)器的話,占用 Redis 資源還是相當(dāng)可觀的,這時(shí)可以用 Hash 數(shù)據(jù)類型壓縮所需資源。

比如,對應(yīng)論壇主題查看計(jì)數(shù),可以由模式

復(fù)制代碼 代碼如下:

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

轉(zhuǎn)換為模式:

復(fù)制代碼 代碼如下:

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

總結(jié):利用 Redis 實(shí)現(xiàn)計(jì)數(shù)器,可以簡單高效實(shí)現(xiàn)各種計(jì)數(shù)功能。

您可能感興趣的文章:
  • Redis實(shí)現(xiàn)唯一計(jì)數(shù)的3種方法分享
  • redis實(shí)現(xiàn)計(jì)數(shù)器-防止刷單方法介紹
  • Redis實(shí)現(xiàn)高并發(fā)計(jì)數(shù)器
  • Spring之借助Redis設(shè)計(jì)一個(gè)簡單訪問計(jì)數(shù)器的示例
  • PHP基于redis計(jì)數(shù)器類定義與用法示例
  • Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問計(jì)數(shù)示例代碼
  • redis通過位圖法記錄在線用戶的狀態(tài)詳解
  • Redis精確去重計(jì)數(shù)方法(咆哮位圖)

標(biāo)簽:保定 沈陽 葫蘆島 石嘴山 招商 常德 昆明 鶴崗

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis的使用模式之計(jì)數(shù)器模式實(shí)例》,本文關(guān)鍵詞  Redis,的,使用,模式,之,計(jì)數(shù)器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis的使用模式之計(jì)數(shù)器模式實(shí)例》相關(guān)的同類信息!
  • 本頁收集關(guān)于Redis的使用模式之計(jì)數(shù)器模式實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 寿宁县| 格尔木市| 龙山县| 商水县| 广水市| 西安市| 闸北区| 方城县| 辽阳县| 海安县| 荆州市| 新巴尔虎右旗| 萨迦县| 玛纳斯县| 图们市| 霍山县| 巴彦县| 台中县| 巩义市| 南丹县| 江津市| 宁都县| 南涧| 闽侯县| 吴江市| 广灵县| 平阳县| 大庆市| 滨海县| 文登市| 剑河县| 青铜峡市| 桐柏县| 荆门市| 汉寿县| 襄汾县| 龙山县| 内江市| 宣化县| 新河县| 湖州市|