?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
BITCOUNT key [start end]
自2.6.0起可用。
時間復雜度: O(N)
計算字符串中的設(shè)置位數(shù)(人口計數(shù))。
默認情況下,會檢查字符串中包含的所有字節(jié)。只能在傳遞附加參數(shù) start 和 end 的間隔中指定計數(shù)操作。
與 GETRANGE 命令類似,開始和結(jié)束可以包含負值,以便從字符串的末尾開始索引字節(jié),其中-1是最后一個字節(jié),-2是倒數(shù)第二個字符,等等。
不存在的鍵被視為空字符串,因此該命令將返回零。
整數(shù)回復
位數(shù)設(shè)置為1。
redis> SET mykey "foobar" "OK"
redis> BITCOUNT mykey (integer) 26
redis> BITCOUNT mykey 0 0 (integer) 4
redis> BITCOUNT mykey 1 1 (integer) 6
位圖是某些類型信息的非常節(jié)省空間的表示。一個例子是需要用戶訪問歷史記錄的 Web 應(yīng)用程序,例如,可以確定哪些用戶是測試版功能的良好目標。
使用 SETBIT 命令可以很輕松地完成,每天用一個小漸進整數(shù)標識。例如,第0天是應(yīng)用程序上線的第一天,第二天的第1天等等。
每次用戶執(zhí)行頁面查看時,應(yīng)用程序都可以在當天使用 SETBIT 命令訪問網(wǎng)站,并設(shè)置當天對應(yīng)的位。
稍后,知道用戶訪問網(wǎng)站的單天數(shù)量簡單地調(diào)用 BITCOUNT 命令對位圖將是微不足道的。
在名為“ 使用Redis位圖的快速簡單實時指標 ”的文章中介紹了使用用戶標識代替天數(shù)的類似模式。
在上述計算日期的示例中,即使10年后應(yīng)用程序處于聯(lián)機狀態(tài),我們?nèi)匀恢挥?code>365*10每位用戶的數(shù)據(jù)位,即每位用戶只有456個字節(jié)。有了這個數(shù)據(jù)量,BITCOUNT 仍然像任何其他O(1)Redis命令一樣快,如 GET 或 INCR 。
當位圖很大時,有兩種選擇:
采取每次修改位圖時分離的密鑰。使用小型 Redis Lua 腳本,這可以非常高效并且原子化。
使用 BITCOUNT 開始和結(jié)束可選參數(shù)遞增地運行位圖,累積客戶端的結(jié)果,并可選擇將結(jié)果緩存到密鑰中。