1. 實例化一個 Redis
連接
$redis = app('redis.connection');
2. 如何去設計 key
呢?
$dayKey = 'login:'.\now()->format('Ymd'); // 輸出類似:login:20190310
3. 簽到
-
setbit - SETBIT KEY_NAME OFFSET (Time complexity: O(1))
對 key 所儲存的字符串值,設置或清除指定偏移量上的位 bit
$redis->setbit($dayKey, $this->user->id, 1);
4. 統計一週內的簽到數據
-
bitop - BITOP operation destkey key [key ...]
對一個或多個保存二進制位的字符串 key 進行位元操作,並將結果保存到 destkey 上
AND : 對一個或多個 key 求邏輯並
OR : 對一個或多個 key 求邏輯或
XOR : 對一個或多個 key 求邏輯異或
NOT : 對給定 key 求邏輯非$redis->bitop('AND', 'threeAnd', 'login:20190311', 'login:20190312', 'login:20190313'); echo "連續三天都簽到的用戶數量:" . $redis->bitCount('threeAnd'); $redis->bitop('OR', 'threeOr', 'login:20190311', 'login:20190312', 'login:20190313'); echo "三天中籤到用戶數量(有一天籤也算簽了):" . $redis->bitCount('threeOr'); $redis->bitop('AND', 'monthActivities'', $redis->keys('login:201903*')); echo "連續一個月簽到用戶數量:" . $redis->bitCount('monthActivities'); echo "當前用戶指定天數是否簽到:" . $redis->getbit('login:20190311', $this->user->id);