簡單的簽到代碼_PHP實現一個小小的簽到功能,到底用MySQL還是Redis?

dd91a6bf24db73539247c083813e3b43.gif

來源 |?http://suo.im/5EWN3k

今天,看下簽到功能怎么選擇?

現在的網站和app開發中,簽到是一個很常見的功能,如微博簽到送積分,簽到排行榜~

c535188d5a1b4ec07e6c469f596ee6cd.png微博簽到

如移動app ,簽到送流量等活動,68bdec1ae1c239b1620e6729c39d4f85.png移動app簽到

用戶簽到是提高用戶粘性的有效手段,用的好能事半功倍!

下面我們從技術方面看看常用的實現手段:

一. 方案1

直接存到數據庫MySQL

用戶表如下:89ca623c96797ee47372d9b65349e05d.pnglast_checkin_time 上次簽到時間

checkin_count 連續簽到次數

記錄每個用戶簽到信息

簽到流程

1.用戶第一次簽到

last_checkin_time = time()checkin_count=1

2.用戶非第一次簽到,且當天已簽到

什么也不做,返回已簽到。

3.用戶非第一次簽到,且當天還未簽到

a.昨天也有簽到

last_checkin_time = time()checkin_count= checkin_count+1

b.昨天沒有簽到

last_checkin_time = time()checkin_count=1

使用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();

二. 方案2

redis實現方案,使用bitmap來實現,bitmap是redis 2.2版本開始支持的功能,一般用于標識狀態,

另外 ,用bitmap進行當天有多少人簽到非常的方便,使用bitcount

count=redis->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; $i>=0;$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^32,512M;大概可以標識5億個bit位,絕大多數的應用都是夠用的啦;

偏移量很大的時候可能造成 Redis 服務器被阻塞;所以要考慮切分。

好啦,兩種方式介紹完了,各有利弊,你喜歡哪種方式呢?

看完本文有收獲?點贊、分享是最大的支持!

17d9c84c4076a118981e8f6ebc4678af.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535019.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Redis 6】緩存穿透、緩存雪崩、緩存擊穿(附解決方案、代碼)

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站黑馬的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&#…

8軟件遇到的問題及解決方法_Excel工作表中的8個常見問題,你一定遇到過,附解決方法...

在Excel工作表中&#xff0c;最常用的還是一些技巧&#xff0c;如果能夠熟練掌握&#xff0c;對于工作效率的提高絕對不是一點點哦&#xff0c;結合工作實際&#xff0c;小編對工作中常見的問題進行了總結&#xff0c;一共有8類&#xff0c;你一定也遇到過……一、Excel工作表常…

unity著色器和屏幕特效開發秘笈_Oculus研發分享:開發移動VR內容時應避免的PC渲染技術...

查看引用/信息源請點擊&#xff1a;映維網開發移動VR內容時應避免的PC渲染技術&#xff08;映維網 2019年11月25日&#xff09;有不少開發者都是以與PC相同的方式來開發Quest游戲&#xff0c;但這可能會導致優化性能方面出現大量困難。Oculus軟件工程師特雷弗達什&#xff08;T…

Java包裝類、java中的方法傳參機制:按值調用

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 方法…

尤克里里怎么樣_尤克里里和吉他區別?尤克里里與吉他相比有什么不可替代的優勢...

尤克里里和吉他有什么區別&#xff1f;想必大家都見過尤克里里吧&#xff0c;就是類似吉他形狀的一種小型弦撥樂器。我們可以簡單的認為&#xff1a;尤克里里是簡化版本的吉他&#xff0c;更加簡單&#xff0c;更加便宜。小編彈的就是尤克里里2.從外觀上&#xff1a;吉他很大&a…

餓漢懶漢單例設計模式的使用及區別、java中的import關鍵字

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 關于…

廣電運通不好進嗎_我可以說鄭州新風的安裝大部分都是垃圾嗎?

說鄭州的新風安裝都是垃圾&#xff0c;這話很無禮&#xff0c;很自大&#xff0c;很傲慢&#xff0c;但是我能說確實是這樣嘛&#xff1f;其實包括我以前安裝的也不合格——雖然我不是故意的。這幾年見過許多家同行安裝的新風&#xff0c;可以說目前見到的很多家都不合格&#…

Java迭代器和Collection接口

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 關于…

atlas安裝需要kafka嗎_Atlas 2.1.0 實踐(2)—— 安裝Atlas

在完成Atlas編譯以后&#xff0c;就可以進行Atlas的安裝了。Atlas的安裝主要是安裝Atlas的Server端&#xff0c;也就Atlas的管理頁面&#xff0c;并確保Atlas與Kafka Hbase Solr等組件的集成。Atlas的系統架構如下&#xff0c;在確保 底層在完成Atlas編譯以后&#xff0c;就可以…

ue4中隱藏燈光和相機圖標_[HDRP]物理燈光是什么?科普向

HDRP拋棄了Bulitin的燈光&#xff0c;改用物理單位以及物理屬性。那么物理燈光到底是什么&#xff1f;請點贊評論來支持作者&#xff0c;提前祝大家新年快樂。https://connect.unity.com/p/hdrp-wu-li-deng-guang-shi-shi-yao-ke-pu-xiang?connect.unity.com同步更新unity con…

私鑰經過哈希計算可以產生公鑰_「區塊鏈基礎概念100」:公鑰和私鑰 | 027

免責聲明&#xff1a;本文旨在傳遞更多市場信息&#xff0c;不構成任何投資建議。文章僅代表作者觀點&#xff0c;不代表火星財經官方立場。小編&#xff1a;記得關注哦投資區塊鏈&#xff0c;猛戳&#xff1a;火星財經App下載來源&#xff1a;學習區塊鏈原文標題&#xff1a;「…

關于List集合類ArrayList、LinkedList、Vector詳解

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 關于…

1562a檢測軟件_洛達1562a空間音頻版評測!!!

哈嘍大家好&#xff01;這里是小澤&#xff0c;一個不專業的Beatboxer~~~今天給大家帶來一期HQB最新空間音頻版洛達1562a耳機的評測視頻&#xff0c;建議先贊再看&#xff01;&#xff08;滑稽&#xff09;聽說你不點贊&#xff1f;昨晚拍了一晚&#xff0c;但是因為是第一次搞…

python 趣味編程課_青少年編程:Python趣味編程基礎入門課程

課程目錄 章節1:編程課前說明試看 課時1 編程課前說明07:49可試看 章節2:第一章 Python基礎-認識環境試看 課時2 1、什么是計算機程序和編程&#xff1f;08:48可試看 課時3 2、為什么學習編程&#xff1f;03:10可試看 課時4 3、Python的安裝11:48可試看 課時5 4、用Python編寫第…

shell181網格劃分_ANSYS中Shell181單元介紹誰知道

再畢業設計做模型中要應用到SHELL181單元&#xff0c;那么這個單元有什么好處誰能具體的告訴我下&#xff0c;我有英文但是有的地方翻譯不通。或者誰能幫我翻譯一下~謝謝~SHELL181issuitableforanalyzingth...再畢業設計做模型中要應用到SHELL181單元&#xff0c;那么這個單元有…

關于Set集合類你都知道什么?來自《卷Ⅰ》的靈魂提問

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄&#xff0c;在這個系列專欄中我將記錄淺學這本書所得收獲&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波簡直就是血賺 &#x1f4a1;涉及的知識點速通&#x1f6eb; 關于…

流程圖虛線框表示什么_UI設計|APP的交互線框布局設計

一.流程圖設計流程圖(Flow Chart)&#xff1a;用圖示的方式反映出特定主體為了滿足特定需求而進行的有特定邏輯關系的一系列操作過程。流程圖的四種基本結構&#xff1a;順序結構&#xff0c;條件結構(又稱選擇結構)&#xff0c;循環結構&#xff0c;分支結構。1.流程圖的常用符…

使用Redis完成商品秒殺業務

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的Redis 6專欄&#xff0c;在這個系列專欄中我對B站黑馬的Redis教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知識點速覽&#…

表格列隱藏_【excel每日提升】Excel隱藏列,不讓別人打開!

【新朋友】點擊標題下面藍色字“王俊東“關注。 【老朋友】點擊右上角&#xff0c;轉發或分享本頁面內容。excel系列課程excel特效系列課程開始了&#xff0c;今天第2節&#xff01;第1節&#xff1a;Excel有公式的單元格標記顏色&#xff0c;很簡單&#xff01;第2節&#xf…

map與weakmap,ES6 Map和WeakMap有什么區別?

Looking this and this MDN pages it seems like the only difference between Maps and WeakMaps is a missing "size" property for WeakMaps. But is this true? Whats the difference between them?解決方案The experienced JavaScript programmer will notice…