123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- /*
- * Manage data in cache
- *
- * author: xuchangzhang
- *
- * */
- require_once(ONU_ROOT . 'application/lib/data/Base.class.php');
- class CacheMg{
-
- public static $Key_PromoteUserCnt = 'CACHE_KEY_PROMOTE_USER_CNT';
- public static $Key_UidIpPromCntLimit = 'CACHE_KEY_UID_IP_PROMOTE_CNT_LIMIT';
- private static $memcache;
- private static $db;
-
- private static function getCacheIns(){
-
- if(!isset(self::$memcache)){
- global $_ONU_CONFIG;
- self::$memcache = new Mcache($_ONU_CONFIG['_memcache_conf']);
- }
- return self::$memcache;
- }
-
- private function getDbIns(){
-
- if(!isset(self::$db)){
- global $_ONU_CONFIG;
- self::$db = new MysqlHandler($_ONU_CONFIG['_db_conf']);
-
- }
- return self::$db;
- }
-
- public static function get($key){
- $cache = self::getCacheIns();
- return $cache->get($key);
- }
-
- public static function set($key,$val){
- $cache = self::getCacheIns();
- return $cache->set($key,$val);
- }
-
- public static function getPromoteUserCnt($uid){
-
- $cache = self::getCacheIns();
- $userCntSet = $cache->get(self::$Key_PromoteUserCnt);
-
- if(empty($userCntSet)){
- $userCntSet = array();
- }
- else{
- $userCntSet = json_decode($userCntSet,true);
- }
-
- $uNumber = $userCntSet[$uid];
- // no data in cache get from db
- if(empty($uNumber)){
- $res = self::getPromoteUserCntDB($uid);
- $uNumber = (is_array($res))? $res[0]['cnt'] : 0;
- // update data to cache
- $userCntSet[$uid] = $uNumber;
- $cache->set(self::$Key_PromoteUserCnt, json_encode($userCntSet));
- }
-
- return $uNumber;
- }
-
- private static function getPromoteUserCntDB($uid){
- $db = self::getDbIns();
- $effectiveLevel = EFFECTIVE_PLAYER_LEVEL;
- $sql = "select count(id) cnt from onu_promote where uid='$uid' and player_grade =>$effectiveLevel;";
- return $db->query($sql);
- }
-
- // set method must be called after get method
- public static function setPromoteUserCnt($uid,$number){
- $cache = self::getCacheIns();
- $userCntSet = $cache->get(self::$Key_PromoteUserCnt);
- $userCntSet = json_decode($userCntSet,true);
- if(is_array($userCntSet)){
- $userCntSet[$uid] = $number;
- $cache->set(self::$Key_PromoteUserCnt, json_encode($userCntSet));
- }
- }
-
- //
- private static function getDayTimeKey_BJ(){
- date_default_timezone_set("Asia/Chongqing");
- $today = date("Ymd");
- return strtotime($today);
- }
-
- //
- // one ip can registe at most 5 users for one promote user in 3 days
- //
- public static function setUidIpPrmoteCnt_Plus($uid,$ip,$num){
-
- $cache = self::getCacheIns();
- $timeKey = self::getDayTimeKey_BJ();
- $itemKey = "$uid-$ip";
- $dataKey = '';
-
- $dataSet = $cache->get(self::$Key_UidIpPromCntLimit);
- $dataSet = json_decode($dataSet, true);
-
- if(empty($dataSet)) $dataSet = array();
- // set time period key
- if(count($dataSet) == 0){
- $dataSet[$timeKey] = array();
- $dataKey = $timeKey;
- }
-
- // set new key and clear the first key
- $oldPeriodKey = NULL;
- foreach($dataSet as $key=>$val){
-
- // over 3 days
- if( ($timeKey - $key) >= 259200){
- $oldPeriodKey = $key;
- }
- else{
- $dataKey = $key;
- }
- break;
- }
-
- if(!empty($oldPeriodKey)){
- $dataSet[$timeKey] = array();
- $dataKey = $timeKey;
- unset($dataSet[$oldPeriodKey]);
- }
-
- // set item value
- if(empty($dataSet[$dataKey][$itemKey])){
- $dataSet[$dataKey][$itemKey] = $num;
- }
- else{
- $dataSet[$dataKey][$itemKey] ++;
- }
- // update cache
- $cache->set(self::$Key_UidIpPromCntLimit,json_encode($dataSet));
- }
-
- public static function getUidIpPrmoteCnt($uid,$ip){
-
- $cache = self::getCacheIns();
- $itemKey = "$uid-$ip";
- $dataKey = '';
-
- $dataSet = $cache->get(self::$Key_UidIpPromCntLimit);
- $dataSet = json_decode($dataSet, true);
-
- if(empty($dataSet)) return 0;
-
- foreach($dataSet as $key=>$val){
- $dataKey = $key;
- }
-
- return $dataSet[$dataKey][$itemKey];
- }
- //Class end
- }
|