數據庫:
* 專庫
水平表(以用戶ID 取100模來建表)
增加當天的日期字段來方便取同一天的數據。
CREATE TABLE `jifen_log90` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '積分記錄表',
`uid` int(10) unsigned NOT NULL DEFAULT '0',
`from` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '1界面',
`channel` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '1www2m3app',
`action` mediumint(8) unsigned DEFAULT '0' COMMENT '獲取積分的動作',
`credits` mediumint(8) unsigned DEFAULT '0' COMMENT '獲得積分的數目',
`addtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '獲得時間',
`day` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '當天時間',
PRIMARY KEY (`id`),
KEY `idx_uda` (`uid`,`day`,`action`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
總表(在添加用戶積分時 同步更新),
CREATE TABLE `jifen_total` (
`uid` int(10) unsigned NOT NULL DEFAULT '0',
`total` int(10) NOT NULL DEFAULT '0',
`updatetime` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
配置表(可在項目庫中,方便管理),
CREATE TABLE `jifen_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '埋碼值',
`title` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '標題',
`credits` int(11) NOT NULL DEFAULT '0' COMMENT '單次積分',
`max_credits` int(11) NOT NULL DEFAULT '0' COMMENT '每日最大積分',
`max_num` int(11) NOT NULL DEFAULT '0' COMMENT '每日最多次數',
`addtime` int(11) NOT NULL COMMENT '添加時間',
`updatetime` int(11) NOT NULL COMMENT '更新時間',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '狀態 1啓用,0禁用',
`type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '類型,0多端顯示,1web端,2app端',
`order` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
==========================================由定時維護方便分析
每天總積分統計
CREATE TABLE `jifen_count` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '積分統計',
`total` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '總分',
`www` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'www端',
`m` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'm端',
`app` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'APP端',
`day` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8
每天分類積分統計
CREATE TABLE `jifen_count_detail` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`actid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '積分配置',
`total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '總積分',
`www` int(11) unsigned NOT NULL DEFAULT '0',
`m` tinyint(11) unsigned NOT NULL DEFAULT '0',
`app` tinyint(11) unsigned NOT NULL DEFAULT '0',
`day` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
程序緩存使用
每次添加積分:
1 用數據庫判斷是否已達到每日限額;
2 如果總積分存在,就更新,不存在剛不更新,等待用戶獲取的時候再更新緩存
3刪除每日各項jifen的redis hset
4 更新分表和總表的時候要使用事務操作
*減少redis數據存儲量,減少數據維護量,減少結構點
每次獲取數據的時候再更新緩存