Redis的使用模式之計數(shù)器模式實例
來源:易賢網(wǎng) 閱讀:970 次 日期:2015-04-14 14:08:00
溫馨提示:易賢網(wǎng)小編為您整理了“Redis的使用模式之計數(shù)器模式實例”,方便廣大網(wǎng)友查閱!

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

常見匯總計數(shù)器

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

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

代碼如下:

# 獲取注冊用戶數(shù)

get total_users

# 注冊用戶數(shù)增加一位

incr total_users

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

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

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

代碼如下:

# 假定操作 2014-07-06 數(shù)據(jù)

# 獲取注冊用戶數(shù)

get total_users:2014-07-06

# 2014-07-06 注冊用戶數(shù)增加一位

incr total_users:2014-07-06

# 設置 48 小時過期時間 172800 = 48 * 60 * 60

expire total_users:2014-07-06 172800

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

速度控制

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

代碼如下:

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

有時候需要維護大量計數(shù)器,比如每一個論壇主題的查看數(shù),比如每一個用戶訪問頁面次數(shù),因為論壇主題和用戶基數(shù)可能很大,直接基于論壇主題或用戶 ID 生成計數(shù)器的話,占用 Redis 資源還是相當可觀的,這時可以用 Hash 數(shù)據(jù)類型壓縮所需資源。

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

代碼如下:

key: topic:<topic_id>:views

value: view count (integer)

轉(zhuǎn)換為模式:

代碼如下:

key: topic:views

value: hash

hash key: <topic_id>

hash value: view count (integer)

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

更多信息請查看IT技術專欄

更多信息請查看數(shù)據(jù)庫
易賢網(wǎng)手機網(wǎng)站地址:Redis的使用模式之計數(shù)器模式實例
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢?yōu)闇剩?/div>

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網(wǎng)