果洛州wap网站建设公司,品牌网站建设新闻,苏州网络推广营销公司,做网站怎么申请百度推广来源 | http://suo.im/5EWN3k今天#xff0c;看下签到功能怎么选择#xff1f;现在的网站和app开发中#xff0c;签到是一个很常见的功能#xff0c;如微博签到送积分#xff0c;签到排行榜~微博签到如移动app #xff0c;签到送流量等活动#xff0c;移动app签到用户签… 来源 | http://suo.im/5EWN3k今天看下签到功能怎么选择现在的网站和app开发中签到是一个很常见的功能如微博签到送积分签到排行榜~微博签到如移动app 签到送流量等活动移动app签到用户签到是提高用户粘性的有效手段用的好能事半功倍下面我们从技术方面看看常用的实现手段一. 方案1直接存到数据库MySQL用户表如下last_checkin_time 上次签到时间checkin_count 连续签到次数记录每个用户签到信息签到流程1.用户第一次签到last_checkin_time time()checkin_count12.用户非第一次签到且当天已签到什么也不做返回已签到。3.用户非第一次签到且当天还未签到a.昨天也有签到last_checkin_time time()checkin_count checkin_count1b.昨天没有签到last_checkin_time time()checkin_count1使用yii实现的代码如下//0点$today_0 strtotime(date(y-m-d));//昨天0点$yesterday_0 $today_0-24*60*60;$last_checkin_time $model-last_checkin_time;if(empty($last_checkin_time)){ //first checkin $model-last_checkin_time time(); $model-checkin_count 1; }else{ if($today_0 $last_checkin_time){ //checkin ed 当天已签到过 return json_encode([code 0, msg 已签到成功]); } //昨天签到过 if($last_checkin_time $today_0 $last_checkin_time $yesterday_0){ $model-last_checkin_time time(); $model-checkin_count $model-checkin_count 1; }else{ //昨天没签到过重新计数 $model-last_checkin_time time(); $model-checkin_count 1; }}$rs $model-save();二. 方案2redis实现方案使用bitmap来实现bitmap是redis 2.2版本开始支持的功能一般用于标识状态另外 用bitmap进行当天有多少人签到非常的方便使用bitcountcountredis-BITCOUNT($key);签到流程设置两个bitmap ,一个以每天日期为key 每个uid为偏移量一个以用户uid为key 当天在一年中的索引为偏移量这样记录一个用户一年的签到情况仅需要365*1bit以下是签到代码//每天一个key $key checkin_ . date(ymd); if($redis-getbit($key, $uid)){ //已签到 return json_encode([code 0, msg 已签到成功]); }else{ //签到 $redis-setbit($key, $uid, 1); $redis-setbit(checkin_.$uid , date(z), 1); }以下是用户连续签到计算public static function getUserCheckinCount($uid){ $key checkin_.$uid; $index date(z); $n 0; for($i $index; $i0;$i--){ $bit Yii::$app-redis-getbit($key, $i); if($bit 0) break; $n; } return $n; }以下是计算一天签到用户数$key checkin_ . date(ymd);$redis Yii::$app-redis;$count $redis-BITCOUNT($key);还有什么需求呢可以自己试着去实现三. 优缺点比较1、直接MySQL思路简单容易实现缺点占用空间大表更新比较多影响性能数据量大时需要用cache辅助2、Redis bitmap优点是占用空间很小纯内存操作速度快缺点是记录的信息有限只有一个标识位偏移量不能大于2^32512M大概可以标识5亿个bit位绝大多数的应用都是够用的啦偏移量很大的时候可能造成 Redis 服务器被阻塞所以要考虑切分。好啦两种方式介绍完了各有利弊你喜欢哪种方式呢看完本文有收获点赞、分享是最大的支持