redis中位圖(bitmap)是由多個二進位制組成的陣列,陣列中的每個二進位制都有與之對應的偏移量(也稱索引),使用者通過偏移量可以對位圖中指定的乙個或多個二進位制進行操作。
計算公式:($offset/8/1024/1024)mb;儲存1千萬標記資訊,記憶體1.2mb的樣子,是不是很小。
在時間開發中,我們需要記錄使用者簽到,bitmap就發揮很大作用。
<?php// 載入redis元件
$redis = new redis();
$redis->connect('39.97.105.9', 6379);
$redis->auth('redis@babytime!');
$date = date('ymd'); // 日期
$uids = [1, 300, 1000, 5000, 10000, 20000, 999999]; // 簽到uid
$key = sprintf("sign::%s", $date); // 儲存key
// 使用者簽到
foreach ($uids as $val)
// 查詢uid=5000使用者簽到情況
$uid = 5000;
$status = $redis->getbit($key, $uid);
echo 1 == $status ? "使用者:,今日已簽到!" : "使用者:,今日未簽到!" . php_eol;;
// 統計今日目前簽到總人數
$count = $redis->bitcount($key);
Redis基於Bitmap實現使用者簽到功能
目錄 很多應用上都有使用者簽到的功能,尤其是配合積分系統一起使用。現在有以下需求 對於使用者簽到資料,如果直接採用資料庫儲存,當出現高併發訪問時,對資料庫壓力會很大,例如雙十一簽到活動。這時候應該採用快取,以減輕資料庫的壓力,redis是高效能的記憶體資料庫,適用於這樣的場景。如果採用string型...
Redis中bitmap的妙用
在redis中我們經常用到set,get等命令,細心的你有沒有發現,還有幾個相似的命令叫setbit,getbit,它們是用來幹嘛的?就是通過乙個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。我們知道8個bit可以組成乙個byte,所以bitmap本身會極大的節省儲存空間。r...
Redis中bitmap的妙用
23k 次閱讀 讀完需要 12 分鐘 在redis中我們經常用到set,get等命令,細心的你有沒有發現,還有幾個相似的命令叫setbit,getbit,它們是用來幹嘛的?就是通過乙個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。我們知道8個bit可以組成乙個byte,所以b...