日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

PHP利用redis位圖實現(xiàn)簡單的簽到功能

瀏覽:224日期:2022-06-14 09:11:46
目錄前言基礎(chǔ)知識位圖源頭Mysql占用對比使用功能實現(xiàn)需求流程圖簽到周期獲取簽到存儲key簽到結(jié)語前言

不會吧不會吧, 都2202年了還有人不會寫簽到? redis位圖實現(xiàn)簽到功能簡單方便, 走過路過可不要錯過呦!

基礎(chǔ)知識位圖源頭

在日常開發(fā)中, 我們會遇到需要存儲大量 bool類型數(shù)據(jù)的需求, 比如用戶簽到和用戶登陸的記錄等, 這個時候用mysql存儲來說比較占用資源, 所以為了解決這個問題, redis提供了位圖數(shù)據(jù)結(jié)構(gòu)(就是 位數(shù)組), 每個 bool值只占用1個位, 8個位組成一個字節(jié), 這樣存儲空間的節(jié)約率不用我多說吧;

Mysql占用對比

mysql 存一個thinyint需要占用1個字節(jié)(bool類型默認為thinyint(1)), 而且你還需要存一個主鍵Id(你不存也會自動隱性的幫你存一列), int的話需要占用 4個字節(jié), 不算其他光是這兩個字段存儲你就需要5個字節(jié), 而在位圖里面5個字節(jié)都夠存40條記錄了...

使用

需要先知道以下幾點:

位圖的內(nèi)容實際上也就是字符串, 只不過是更改的個位的內(nèi)容, 所以分為零存零取和整存零取;位圖的位數(shù)是會自動補位的, 比如你設(shè)置一個空鍵第8位為1, 則會自動補充前8位為0 (數(shù)組從0開始計數(shù));127.0.0.1:6379> setbit zero 0 1 // 設(shè)置第0位為true(integer) 0127.0.0.1:6379> getbit zero 0(integer) 1127.0.0.1:6379> setbit zero 8 1 // 設(shè)置第8位為true(integer) 0127.0.0.1:6379> getbit zero 8(integer) 1127.0.0.1:6379> getbit zero 7 // 前面會自動補位(integer) 0// 通過python方法獲取 h 的二進制>>> bin(ord('h'))'0b1101000'127.0.0.1:6379> set one h // 直接存入字符 h = 01101000OK127.0.0.1:6379> getbit one 0(integer) 0127.0.0.1:6379> getbit one 1(integer) 1127.0.0.1:6379> getbit one 2(integer) 1127.0.0.1:6379> getbit one 3(integer) 0127.0.0.1:6379> getbit one 4(integer) 1127.0.0.1:6379> getbit one 5(integer) 0功能實現(xiàn)

看完上面的基礎(chǔ)知識大家就都基本知道怎么實現(xiàn)了, 下面是實戰(zhàn)環(huán)節(jié)

需求以自然周為周期進行簽到;展示簽到周期;重復簽到提示報錯;流程圖

簽到周期獲取

獲取每個自然周的起始和結(jié)束時間

// SignStartEndTime 簽到起始時間&結(jié)束時間.func (slf *TaskService) SignStartEndTime() (startTime, endTime int64) {now := time.Now()weekDay := int(now.Weekday()) // 如果是周日的話weekDay=0if weekDay == 0 { weekDay = 7}startTime = time.Date(now.Year(), now.Month(), now.Day()-weekDay+1, 0, 0, 0, 0, now.Location()).Unix()endTime = startTime + 86400*7 - 1return}簽到存儲key

因為是以自然周為單位, 所以設(shè)定key的格式為 user:sign:userId:20221107(周一的日期)

// SignKey 簽到key.func (slf *TaskService) SignKey(userId string) string {st, _ := slf.SignStartEndTime()return fmt.Sprintf('user:sign:%s:%s', userId, time.Unix(st, 0).Format('20060102'))}簽到const (SignTypeNo = iota // 未簽到SignTypeYes// 已簽到)// Sign 簽到.func (slf *TaskService) Sign(userId string) (code errcode.ErrCode, err error) {var (client = redis.GetClient()key = slf.SignKey(userId)weekDay = int64(time.Now().Weekday()))if weekDay == 0 {weekDay = 7}val, err := client.SetBit(key, weekDay, SignTypeYes).Result()if err != nil {return errcode.ServerErr, fmt.Errorf('sign setBit err: %v', err)}if val == SignTypeYes {return 已簽到錯誤碼, fmt.Errorf('sign already, val: %d', val)} // 如果是第一次簽到需要加個過期時間signDay := client.BitCount(key, nil).Val()if signDay == 1 {client.Expire(key, time.Hour*24*7)}if err = 簽到成功獲取的獎勵; err != nil {// 如果添加獎勵失敗, 重置簽到狀態(tài)if err = client.SetBit(key, weekDay, SignTypeNo).Err(); err != nil {log.Errorf('sign reset err: %v', err)}return errcode.ServerErr, fmt.Errorf('sign add reward err: %v', err)}return errcode.Code200, nil}結(jié)語

簽到任務看著簡單, 但實際上確實也不難, 但是我們在實現(xiàn)的時候要考慮到如何有效的節(jié)約和利用資源, 哪種實現(xiàn)方式會更好更優(yōu)雅一些;

到此這篇關(guān)于PHP利用redis位圖實現(xiàn)簡單的簽到功能的文章就介紹到這了,更多相關(guān)redis簽到內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久午夜影视| 99国产精品视频免费观看一公开 | 亚洲ww精品| 欧美极品一区二区三区| 久久五月天小说| 久久精品99国产精品| 久久免费高清| 国产亚洲观看| 在线视频亚洲| 久久久精品区| 日本aⅴ亚洲精品中文乱码| 91亚洲人成网污www| 亚洲乱亚洲高清| 欧美精品影院| 亚洲欧美伊人| 老司机免费视频一区二区| 在线一区欧美| 欧美激情五月| 日韩区一区二| 爽好多水快深点欧美视频| 天堂av在线| 久久精品国产精品亚洲毛片| 亚洲美女91| 久久香蕉精品| 91久久久久| 婷婷成人综合| 久久美女性网| 少妇久久久久| 日本在线观看不卡视频| 欧美一级精品| 日韩中文首页| 亚洲午夜91| 久久国产成人午夜av影院宅| 超碰成人av| 日韩一区电影| 国产99亚洲| 免费精品国产的网站免费观看| 福利一区二区三区视频在线观看| 欧美欧美黄在线二区| 欧美.日韩.国产.一区.二区 | 日本欧美不卡| 亚洲精品一级| 日韩一区二区三区免费视频| 亚洲一区二区动漫| 人人爱人人干婷婷丁香亚洲| 午夜在线精品偷拍| 日本综合视频| 激情久久五月| 日本久久黄色| 亚洲精品亚洲人成在线观看| 精品视频在线观看网站| 国产欧美一级| 在线亚洲国产精品网站| 日韩国产欧美在线播放| 久久久久久色| 黄色在线网站噜噜噜| 蜜桃视频在线网站| 亚洲免费影视| 久久精品女人| 男人的天堂亚洲一区| 欧美91在线| 亚洲欧美视频| 在线精品亚洲欧美日韩国产| 久久亚洲国产精品一区二区| 美女久久精品| 中文字幕日韩亚洲| 日韩欧美不卡| 国产精品伦一区二区| 一区三区视频| 亚洲欧洲美洲av| 欧美日韩亚洲一区三区| 尤物tv在线精品| 四虎成人精品一区二区免费网站| 亚洲免费福利| 高清不卡一区| 精品三区视频| 国产欧美午夜| 久久国产麻豆精品| 一区二区精品| 国产模特精品视频久久久久| 日韩免费福利视频| 国产一区二区三区国产精品| 欧美日韩网址| 日韩黄色av| 青青草国产成人99久久| 亚洲一区二区三区四区五区午夜 | 国产精品亚洲人成在99www| 久久成人一区| 亚洲一区二区动漫| 在线一区欧美| 首页亚洲欧美制服丝腿| 91精品二区| 久久国产精品99国产| 野花国产精品入口| 国内精品福利| 日韩大片免费观看| 黑森林国产精品av| 久久九九99| 高清不卡亚洲| 一级欧洲+日本+国产| 91成人在线网站| 99久久精品费精品国产| 性感美女一区二区在线观看| 精品九九久久| 欧美日韩一区二区三区不卡视频| 综合国产精品| 国产精品日本一区二区三区在线 | 久久亚洲图片| 天堂俺去俺来也www久久婷婷| 日韩国产在线一| 欧美激情麻豆| 亚洲国产专区| 国产调教精品| 日本欧美不卡| 亚洲精品四区| 久久97久久97精品免视看秋霞| 午夜欧美巨大性欧美巨大| 亚洲欧美日韩国产一区二区| 国产精品亚洲片在线播放| 久久久精品网| 国产日韩一区二区三免费高清| 日韩欧美精品一区二区综合视频| 国产精品视频一区二区三区综合| 欧美激情麻豆| 午夜久久福利| 黄色aa久久| 国产亚洲一区二区三区啪| 欧美午夜精彩| 六月丁香综合在线视频| 在线 亚洲欧美在线综合一区| 国产欧美88| 99日韩精品| 成人美女视频| 欧美在线91| 夜夜嗨网站十八久久| 高清日韩欧美| 三级在线观看一区二区| 久久国产主播| 国产成人免费| 日韩高清不卡一区二区| 在线一区欧美| 欧美不卡在线| 久久亚洲在线| 欧美日韩国产观看视频| 69堂免费精品视频在线播放| 在线精品一区| 免费不卡在线视频| 亚洲伊人精品酒店| 亚洲专区一区| 欧美日韩中文| 国产一区二区三区四区大秀| 日本a级不卡| 国产在线视频欧美一区| 日韩欧美一区二区三区免费观看| 视频福利一区| 亚洲一区二区三区高清| 黄色在线观看www| 亚洲一二av| 精品一区二区三区免费看| caoporn视频在线| 久久精品电影| 日韩专区欧美专区| 日本成人中文字幕在线视频| 伊人国产精品| 亚洲精品护士| 欧美日本二区| 欧美日韩尤物久久| 精品免费av| 免费精品一区| 秋霞影院一区二区三区| 鲁大师成人一区二区三区| 日韩午夜免费| 日本不卡视频一二三区| 日本久久综合| 97精品一区| 日韩理论视频| 亚洲午夜91| 日韩一区网站| 国产极品模特精品一二| 久久久91麻豆精品国产一区| а√天堂8资源中文在线| 免费久久精品| 日本不卡视频一二三区| 精品视频99| 模特精品在线| 亚洲网站视频| 国产精品成人国产| 激情久久久久久| av中文字幕在线观看第一页 | 香蕉久久久久久久av网站| 日本一区免费网站| 日本欧美在线看| 日韩成人免费| 亚洲一区有码| 97精品国产| 麻豆久久久久久久| 国产精品视区| 日韩在线不卡| 成人三级高清视频在线看| 日韩在线播放一区二区|