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

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

 更新時(shí)間:2015年03月23日 10:23:54   投稿:junjie  
這篇文章主要介紹了Redis的使用模式之計(jì)數(shù)器模式實(shí)例,本文講解了匯總計(jì)數(shù)器、按時(shí)間匯總的計(jì)數(shù)器、速度控制、使用 Hash 數(shù)據(jù)類(lèi)型維護(hù)大量計(jì)數(shù)器等內(nèi)容,需要的朋友可以參考下

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

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

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

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

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

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

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

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

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

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

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

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

速度控制

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

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

 # 每秒最大請(qǐng)求數(shù)
  MAX_REQUESTS_PER_SECOND = 10

  # 檢查 ip 請(qǐng)求限制
  # @param ip
  # @raise 超過(guò)限制,拋出 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ù)類(lèi)型維護(hù)大量計(jì)數(shù)器

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

比如,對(duì)應(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ù)器,可以簡(jiǎn)單高效實(shí)現(xiàn)各種計(jì)數(shù)功能。

相關(guān)文章

  • 如何使用Redis保存用戶(hù)會(huì)話(huà)Session詳解

    如何使用Redis保存用戶(hù)會(huì)話(huà)Session詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Redis保存用戶(hù)會(huì)話(huà)Session的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Redis配置外網(wǎng)可訪(fǎng)問(wèn)(redis遠(yuǎn)程連接不上)的方法

    Redis配置外網(wǎng)可訪(fǎng)問(wèn)(redis遠(yuǎn)程連接不上)的方法

    默認(rèn)情況下,當(dāng)我們?cè)诓渴鹆藃edis服務(wù)之后,redis本身默認(rèn)只允許本地訪(fǎng)問(wèn)。Redis服務(wù)端只允許它所在服務(wù)器上的客戶(hù)端訪(fǎng)問(wèn),如果Redis服務(wù)端和Redis客戶(hù)端不在同一個(gè)機(jī)器上,就要進(jìn)行配置。
    2022-12-12
  • Redis實(shí)現(xiàn)延遲隊(duì)列的項(xiàng)目示例

    Redis實(shí)現(xiàn)延遲隊(duì)列的項(xiàng)目示例

    延遲隊(duì)列是Redis的一個(gè)重要應(yīng)用場(chǎng)景,本文主要介紹了Redis實(shí)現(xiàn)延遲隊(duì)列的項(xiàng)目示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Redis中秒殺場(chǎng)景下超時(shí)與超賣(mài)問(wèn)題的解決方案

    Redis中秒殺場(chǎng)景下超時(shí)與超賣(mài)問(wèn)題的解決方案

    當(dāng)我們?cè)趌inux中使用ab來(lái)模擬高并發(fā)秒殺時(shí)可能會(huì)遇到兩種問(wèn)題,“超時(shí)和超賣(mài)”,本文就詳細(xì)介紹了Redis中秒殺場(chǎng)景下超時(shí)與超賣(mài)問(wèn)題的解決方案,感興趣的可以了解一下
    2022-05-05
  • mac下redis安裝、設(shè)置、啟動(dòng)停止方法詳解

    mac下redis安裝、設(shè)置、啟動(dòng)停止方法詳解

    這篇文章主要介紹了mac下redis安裝、設(shè)置、啟動(dòng)停止方法詳解,需要的朋友可以參考下
    2020-02-02
  • redis replication環(huán)形緩沖區(qū)算法詳解

    redis replication環(huán)形緩沖區(qū)算法詳解

    這篇文章主要介紹了redis replication環(huán)形緩沖區(qū)算法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 深入解析Java中Redis的20個(gè)常用方法

    深入解析Java中Redis的20個(gè)常用方法

    隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,Java編程語(yǔ)言在計(jì)算機(jī)科學(xué)與技術(shù)中的應(yīng)用日益廣泛,本論文以"深入解析Java中Redis的20個(gè)常用方法"為主題,系統(tǒng)地探討了Java在Redis數(shù)據(jù)庫(kù)操作中的應(yīng)用和實(shí)現(xiàn),需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)多級(jí)緩存的方法詳解

    Java實(shí)現(xiàn)多級(jí)緩存的方法詳解

    對(duì)于高并發(fā)系統(tǒng)來(lái)說(shuō),有三個(gè)重要的機(jī)制來(lái)保障其高效運(yùn)行,它們分別是:緩存、限流和熔斷,所以本文就來(lái)和大家探討一下多級(jí)緩存的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助
    2024-02-02
  • redis 主從備份及其主備切換的操作

    redis 主從備份及其主備切換的操作

    這篇文章主要介紹了redis 主從備份及其主備切換的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Redis瞬時(shí)高并發(fā)秒殺方案總結(jié)

    Redis瞬時(shí)高并發(fā)秒殺方案總結(jié)

    本文講述了Redis瞬時(shí)高并發(fā)秒殺方案總結(jié),具有很好的參考價(jià)值,感興趣的小伙伴們可以參考一下,具體如下:
    2018-05-05

最新評(píng)論

河北省| 鄢陵县| 兴化市| 石柱| 彭阳县| 黔南| 二连浩特市| 西华县| 山西省| 太谷县| 封开县| 马尔康县| 北宁市| 泸水县| 龙岩市| 工布江达县| 九江市| 衡阳县| 方城县| 竹溪县| 东至县| 西城区| 津市市| 刚察县| 师宗县| 无棣县| 庆元县| 红安县| 武邑县| 大悟县| 西贡区| 离岛区| 射洪县| 吕梁市| 丰城市| 西安市| 葫芦岛市| 安康市| 三门县| 隆回县| 会宁县|