国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Redis Zset來(lái)處理活動(dòng)常用排行榜(精確排行)

eternalshallow / 1388人閱讀

摘要:我們要維護(hù)一個(gè)公平的排行榜。舉個(gè)例子用戶分最后加分用戶分最后加分那么按照排行榜的規(guī)定來(lái)算,用戶要排在用戶之前。所以說(shuō),如果活動(dòng)周期在天以內(nèi)的話,那么我們就可以使用加活動(dòng)結(jié)束時(shí)間作為數(shù)字來(lái)保證排行榜的順序正確。

嚴(yán)格的排行榜

一個(gè)嚴(yán)格的排行榜,必須要滿足每個(gè)人的排序都是有實(shí)際意義的,簡(jiǎn)單來(lái)說(shuō)就是即使兩個(gè)人的分?jǐn)?shù)一樣,那么也要分出先后來(lái)。
活動(dòng)周期在92天以內(nèi)的話,那么我們就可以使用200w加活動(dòng)結(jié)束時(shí)間作為數(shù)字A來(lái)保證排行榜的順序正確

在很大的活動(dòng)中,比如獎(jiǎng)項(xiàng)很大,第10名和第11名,可能獎(jiǎng)金的額度相差了幾萬(wàn)、幾千。這個(gè)時(shí)候我們?cè)谧鎏幚淼臅r(shí)候就要小心了。我們要維護(hù)一個(gè)公平的排行榜。為了滿足這樣一個(gè)排行榜,我們需要在score的后面添加一個(gè)時(shí)間戳相關(guān)的系數(shù)。舉個(gè)例子:

用戶a 100 分 14:00 最后加分
用戶b 100 分 14:20 最后加分

那么按照排行榜的規(guī)定來(lái)算,用戶a要排在用戶b之前。
但是我們?cè)谶M(jìn)行排行的時(shí)候,不能將時(shí)間直接加到分?jǐn)?shù)后面,否則就排序反了,這個(gè)時(shí)候我們要用一個(gè)足夠大的數(shù)A來(lái)減去時(shí)間戳,并且要保證位數(shù)在整個(gè)活動(dòng)期間不變。

首先我們要理解一個(gè)redis的排序,redis的zset中的score值為double類型,精度只有16位,事實(shí)上在存儲(chǔ)9999999999999999 16位整數(shù)的時(shí)候,會(huì)變?yōu)?7位的10000000000000000,超過(guò)17位會(huì)變?yōu)榭茖W(xué)計(jì)數(shù)法1e+17

在活動(dòng)中,我們要保證用戶的分?jǐn)?shù)不能丟失,所以必須保證在16位以內(nèi),一個(gè)用戶最多的粉絲是5000w如果一個(gè)活動(dòng)期間能保證所有的用戶給他刷分,那么可能是億級(jí)別的,但是實(shí)際上按照之前的活動(dòng)量來(lái)看,最多能到千萬(wàn)級(jí)別。

這個(gè)時(shí)候我們按照1億來(lái)算,長(zhǎng)度要保證在9位,然后剩下的排重用的時(shí)間戳的精度,要保證在7位,也就是說(shuō)我們要保證整個(gè)活動(dòng)期間足夠大的數(shù)減去時(shí)間戳的開(kāi)始時(shí)間和結(jié)束時(shí)間都是7位數(shù)。

首先保證數(shù)字A-結(jié)束時(shí)間為一個(gè)7位數(shù) ,那么我們要給這個(gè)結(jié)束時(shí)間+1000000 (一百萬(wàn)) 得到數(shù)字A,這樣能最低限度保證活動(dòng)結(jié)束之前時(shí)間戳系數(shù)的位數(shù)不變?yōu)?位數(shù)。
然后我們要保證數(shù)字A-活動(dòng)開(kāi)始時(shí)間也是一個(gè)七位數(shù),也就是說(shuō)開(kāi)始時(shí)間和結(jié)束時(shí)間之間的跨度只能是900w,一旦超過(guò)900w,那么數(shù)字A減去開(kāi)始時(shí)間就會(huì)得到一個(gè)8位數(shù)。

但是100w是一個(gè)臨界點(diǎn),我們100w和結(jié)束時(shí)間相加得到數(shù)字A,可能會(huì)因?yàn)榛顒?dòng)結(jié)束時(shí)間的延長(zhǎng)導(dǎo)致效果變成了為結(jié)束時(shí)間+99w 得到數(shù)字A,這個(gè)時(shí)候,活動(dòng)最后結(jié)束的分?jǐn)?shù)系數(shù)的位數(shù)就變?yōu)榱?位,這簡(jiǎn)直就是個(gè)災(zāi)難。

所以我們將100w擴(kuò)大為200w,這樣相應(yīng)的就給活動(dòng)的結(jié)束時(shí)間增加了(100w/3600/24 = 11)天的時(shí)間。但是得到的效果將 活動(dòng)的跨度周期減小到了800w秒,也就是(8000000/86400=92)天。所以說(shuō),如果活動(dòng)周期在92天以內(nèi)的話,那么我們就可以使用200w加活動(dòng)結(jié)束時(shí)間作為數(shù)字A來(lái)保證排行榜的順序正確。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/25974.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.37 - 分布式緩存利器:Redis

    摘要:持久化到中反向代理的負(fù)載均衡基于的集群搭建如何實(shí)現(xiàn)從中訂閱消息轉(zhuǎn)發(fā)到客戶端的擴(kuò)展是阻塞式,使用訂閱發(fā)布模式時(shí),會(huì)導(dǎo)致整個(gè)進(jìn)程進(jìn)入阻塞。緩存是用于解決高并發(fā)場(chǎng)景下系統(tǒng)的性能及穩(wěn)定性問(wèn)題的銀彈。 showImg(https://segmentfault.com/img/bVYE6k?w=900&h=385); Redis 是由意大利程序員 Salvatore Sanfilippo(昵稱:a...

    binaryTree 評(píng)論0 收藏0
  • redis實(shí)現(xiàn)行榜

    摘要:前言實(shí)現(xiàn)一個(gè)排版榜,我們通常想到的就是的簡(jiǎn)單粗暴就擼出來(lái)了。刪除直接使用的命令分?jǐn)?shù)設(shè)計(jì)回到排行榜的實(shí)現(xiàn),要利用結(jié)構(gòu)來(lái)實(shí)現(xiàn)的話,重要的是如何設(shè)計(jì)分?jǐn)?shù)。分析一下排行榜單的設(shè)計(jì)。實(shí)現(xiàn)如下如果排行榜的設(shè)計(jì)按兩個(gè)維度比如金幣數(shù)量和用時(shí)。 1 前言 實(shí)現(xiàn)一個(gè)排版榜,我們通常想到的就是mysql的order by 簡(jiǎn)單粗暴就擼出來(lái)了。但是這樣真的優(yōu)雅嗎? 數(shù)據(jù)庫(kù)是系統(tǒng)的瓶頸,這是眾所周知的。如果給你...

    hzx 評(píng)論0 收藏0
  • 面試中關(guān)于Redis的問(wèn)題看這篇就夠了

    摘要:所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些面試和學(xué)習(xí)中你必須掌握的問(wèn)題。在微博應(yīng)用中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中,將其所有粉絲存在一個(gè)集合。 昨天寫(xiě)了一篇自己搭建redis集群并在自己項(xiàng)目中使用的文章,今天早上看別人寫(xiě)的面經(jīng)發(fā)現(xiàn)redis在面試中還是比較常問(wèn)的(筆主主Java方向)。所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些redis面試和學(xué)習(xí)中你必須掌握的問(wèn)題。...

    yanbingyun1990 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<