用redis實現使用者登入計數

2021-06-25 09:52:25 字數 2273 閱讀 9349

最近有個問題 :實現顯示使用者本月登入日期 ,累計天數到一定數目可參加活動,和下圖展示的功能類似。

過去看過使用redis bitmap進行活躍使用者統計的例子,覺得和本功能非常match,決定用redis的bitset來實現。

每個使用者每月產生乙個key,字段意義如下 0 位表示某月1日登入  ,1表示某月2日登入,以此類推。

每個使用者一月的活躍度需要8byte,1w使用者每年需要1w*12*8byte 約1m資料

使用者每次登入系統,需要用setbit設定使用者本日登入,可用bitcount的到使用者本月登入天數總和,因為php原生不對bitset進行支援,採用get得到字串進行操作得到使用者登入日期

測試**如下:

<?php 

/** *

* user: shikiliu

* date: 14-8-27

*/class activedate

$redis = $this->getredis();

$redis->setbit($this->userprefix . $userid . '_' . date('y-m', $time), intval(date('d', $time)) - 1, 1);

return true;

}/**

* 得到使用者本月登入天數

* redis >= 2.6.0 才可以

*/public function getactivedatescount($userid, $time = null)

$redis = $this->getredis();

return $redis->bitcount($this->userprefix . $userid . '_' . date('y-m', $time));

}/**

* 得到使用者某月所有的登入過日期

*/public function getactivedates($userid, $time = null)

$redis = $this->getredis();

$strdata = $redis->get($this->userprefix . $userid . '_' . date('y-m', $time));

if (empty($strdata))

$monthfirstday = mktime(0, 0, 0, date("m", $time), 1, date("y", $time));

$maxday = cal_days_in_month(cal_gregorian, date("m", $time), date("y", $time));

$chardata = unpack("c*", $strdata);

for ($index = 1; $index <= count($chardata); $index++)

$result = date('y-m-d', $monthfirstday + ($intervalday-1) * 86400);}}

}return $result;

}/**

* redis連線

*/private function getredis()

$redis->select(3);

$this->redis = $redis;

}return $this->redis;

}}$activedate = new activedate();

var_dump($activedate->setactivedate(514540767,1406822600));// 2014/8/1 0:3:20

var_dump($activedate->setactivedate(514540767,1407225600));// 2014/8/5 16:0:0

var_dump($activedate->setactivedate(514540767,1409472000));// 2014/8/31 16:0:0

var_dump($activedate->getactivedates(514540767));

var_dump($activedate->getactivedatescount(514540767));

大小: 12.7 kb

大小: 349.3 kb

Django實現使用者登入

今天的文章基於之前做的配置,實現乙個具體的功能demo 登入。在login的templates目錄下建立兩個模板,分別是login.html和home.html,當使用者未登入時,跳轉到login.html頁面,登陸成功或者登入狀態,跳轉到home.html。url的配置主要有兩個,django d...

Session實現使用者登入

前端介面 複製 一 登入驗證 1 將使用者輸入的使用者名稱和密碼與資料庫裡面的使用者名稱密碼進行比對。2 建立user物件,設定使用者名稱和密碼。3 建立session物件,儲存user物件。通過getsession 的setattribute 儲存乙個user物件。4 登入成功,實現頁面跳轉。二 ...

Spring Security實現使用者登入許可權管理

主要工作有 1 認證 判斷使用者名稱和密碼是否正確 2 授權 判斷使用者是否有許可權執行某些操作 接下來是實現的步驟 匯入spring.security對應jar包。在pom.xml中標籤下新增如下 org.springframework.security spring security web 5...