麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > Redis > 正文

利用Redis簡單高效實(shí)現(xiàn)各種計(jì)數(shù)功能

2020-02-17 14:55:52
字體:
供稿:網(wǎ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ù),基本操作命令如下:


?# 獲取注冊用戶數(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ù)的例子,基本操作命令如下:


# 假定操作 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)控制,偽代碼如下所示:


?# 每秒最大請求數(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ù),可以由模式


? key: topic::views
? value: view count (integer)

?

轉(zhuǎn)換為模式:


?key: topic:views
? value: hash
??? hash key:
??? hash value: view count (integer)

?

以上就是利用Redis簡單高效實(shí)現(xiàn)各種計(jì)數(shù)功能的全部內(nèi)容,感謝大家的閱讀,更多內(nèi)容請關(guān)注武林技術(shù)頻道網(wǎng)站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 暖暖免费观看高清完整版电影 | 欧美一级视屏 | 国产美女自拍av | 成熟女人特级毛片www免费 | 一区二区三区四区视频在线观看 | 男男羞羞视频网站国产 | 亚洲综合网站 | 亚洲电影在线观看高清免费 | 97久久曰曰久久久 | 欧美日韩在线播放 | 蜜桃传媒视频麻豆第一区免费观看 | 亚洲成人中文字幕在线 | 久久综合婷婷 | 依依成人综合 | 国产成人综合在线观看 | 成人短视频在线播放 | 久久看视频 | 国产成人精品日本亚洲语音 | 91九色视频观看 | 久久毛片免费观看 | 久久免费视频精品 | 一区二区三区四区视频在线观看 | 福利在线免费 | 久久av免费 | 久久精品黄 | h色在线观看 | 久久国产精品电影 | 色呦呦一区二区三区 | 女人a级毛片| 色播av在线 | 一级免费毛片 | 国产精品99精品 | 亚洲五码在线观看视频 | 欧美在线观看视频一区二区 | 成人18网站 | 91精品成人福利在线播放 | 性欧美xxxx极品摘花 | 激情久久一区二区 | 亚洲人成电影在线 | 欧美国产精品一区二区 | 免费黄色大片在线观看 |