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