SETBIT key offset value大數據
對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit),位的設置或清除取決於 value 參數,能夠是 0 也能夠是 1,當 key 不存在時,自動生成一個新的字符串值;offset 參數必須大於或等於 0 ,小於 2^32 (bit 映射被限制在 512 MB 以內),時間複雜度O(1),返回原偏移量的位code
BITCOUNT key [start] [end]內存
計算給定字符串中,被設置爲 1 的比特位的數量,指定額外的 start 或 end 參數,能夠讓計數只在特定的位上進行,能夠使用負數值:好比 -1 表示最後一個位,而 -2 表示倒數第二個位,以此類推,時間複雜度O(N),返回被設置爲 1 的位的數量字符串
可用於大數據簽到、重複點贊、訂單重複評論等
實現一:get
# 假設某用戶id=1,文章id=1,相互拼接爲11,則偏移量11設置成1(前提用戶id和文章id是惟一的) 127.0.0.1:6379> setbit artcle 11 1 (integer) 0 # 統計所有點贊人數 127.0.0.1:6379> bitcount artcle (integer) 1 # 模擬重複點贊同一篇文章,返回了1,就能夠根據返回值避免重複點贊 127.0.0.1:6379> setbit artcle 11 1 (integer) 1
實現二:it
# 假設某用戶id=10,有篇文章叫artcleA,則設置artcleA上的位10成1 127.0.0.1:6379> setbit artcleA 10 1 (integer) 0 # 統計文章artcleA的點贊人數 127.0.0.1:6379> bitcount artcle (integer) 1 # 模擬重複點贊同一篇文章,返回了1,就能夠根據返回值避免重複點贊 127.0.0.1:6379> setbit artcleA 10 1 (integer) 1
總結:
倆種方法,角度不一樣實現不一樣,均可以實現目標,第一種方法,優勢存儲內存低,缺點擴展性低,不能查看某篇文章點贊數,第二種方法,擴展性高,能夠經過BITOP方法操做多個key,實現一些統計功能,缺點比第一種花費更多存儲空間效率