数据库:
* 专库
水平表(以用户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数据存储量,减少数据维护量,减少结构点
每次获取数据的时候再更新缓存