-------需求说明
---- 需求分析
积分签到处于app页面“我的”,用户会频繁的来回切换,如果将数据全部存储到数据库中然后去数据库中做查询,所以这里我才用的Redis缓存的方式将签到数据缓存起来;
在表结构设计的时候,由于需求还没有完全确定下来,所以签到规则等信息还不是很明确,这里配置了两个表,一个积分签到表,一个积分配置表;
CREATE TABLE `np_customer_sign_info` (
`sign_info_id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`rule_name` varchar(50) DEFAULT NULL COMMENT '规则名称、说明',
`sign_info_type` varchar(30) DEFAULT NULL COMMENT ' 积分类型名称',
`rule_key` varchar(20) DEFAULT NULL COMMENT '规则Key值(redis缓存或者mysql查询) ',
`rule_grade` int(10) DEFAULT NULL COMMENT '规则对应积分值',
`rule_type` enum('1','2','3') DEFAULT NULL COMMENT '规则类型 1 累加 2 翻倍 3 其他',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`del_flag` enum('0','1') DEFAULT '0' COMMENT '删除标志 0正常 1删除',
PRIMARY KEY (`sign_info_id`),
KEY `redis_key` (`rule_key`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='会员签到积分配置表';
积分签到表
CREATE TABLE `np_customer_sign_grade` (
`grade_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '签到id',
`customer_id` bigint(20) NOT NULL COMMENT '会员id',
`grade__flow_id` bigint(30) DEFAULT NULL COMMENT '积分流水号',
`grade_detail` varchar(75) DEFAULT NULL COMMENT '积分说明',
`grade_type` enum('0','1') NOT NULL COMMENT '积分类型 0获取积分 1消费积分',
`grade` int(20) NOT NULL COMMENT '积分',
`succ_record` int(2) DEFAULT NULL COMMENT '连续签到记录数',
`create_time` timestamp NOT NULL COMMENT '创建时间',
`create_date` varchar(50) NOT NULL COMMENT '创建日期',
`del_flag` enum('0','1') NOT NULL COMMENT '删除标志 0未删除 1已删除',
PRIMARY KEY (`grade_id`)
) ENGINE=InnoDB AUTO_INCREMENT=223 DEFAULT CHARSET=utf8 COMMENT='会员签到积分表';
为了避免页面刷新频繁查询数据库,所以我才用了将签到信息存储到Redis中的方式进行存储,这样每次刷新页面的时候,可以直接在Redis中查询数据,从而避免频繁查询数据库;
由于每次签到都需要先校验昨天是否有签到记录,然后之后就不再查询两天前的数据,所以这里为每一个签到数据设置了一个过期时间,避免签到无用的签到数据占用服务器内存空间,以提高Redis效率;redis设置的过期时间为2天;
在最初写代码的时候,我想的是将用户的签到信息用Ha