這篇文章給大家分享的是redis制作抽獎功能的詳細(xì)介紹,相信大部分人都還沒學(xué)會這個技能,為了讓大家更加了解,給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比姚安網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式姚安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋姚安地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
Redis集合簡介
Redis的集合數(shù)據(jù)類型,功能非常強(qiáng)大。說到集合的話,你可能想到高中數(shù)學(xué)上的集合。其實(shí)他們本就是一個意思。Redis集合里面可以存放很多字符串(元素),Redis最多支持2的32次方減1個元素,但是集合里的元素都是唯一的,不會有重復(fù)。和數(shù)學(xué)里集合一樣,Redis也支持交集,并集以及差集。
用它可以完成許多有意思的功能。最常見的就是標(biāo)簽功能了,可能A用戶的標(biāo)簽有“動漫”、”運(yùn)動“、”二次元“,B用戶的標(biāo)簽有”運(yùn)動“、”旅游“、”籃球“。那么,使用集合的并集,就能知道他們的共同標(biāo)簽是什么。另外,當(dāng)系統(tǒng)知道用戶的標(biāo)簽后,就可以給他們推薦相關(guān)的廣告或產(chǎn)品。除此之外,還要許多有意思的功能它也能實(shí)現(xiàn)。今天,我們來看看如何使用Reids實(shí)現(xiàn)抽獎功能。
sRandMember、sPop
這兩個命令功能非常相似,都是從集合中返回一個元素值。不同的是,sRandMember不會從集合中刪除返回的元素,但是sPop會刪除。這兩個命令可以分別實(shí)現(xiàn)不同的抽獎算法。
比如,集合中有100個元素,值從數(shù)字1到數(shù)字100.我們定義抽到的是數(shù)字1的話,即表示中獎。
使用sRandMember的話,不管之前抽過多少次,下次抽中的概率都是1%。而使用sPop的話,則每次抽中的概率都不一樣。第一個人抽中概率是1%,當(dāng)?shù)谝粋€人沒抽中的話,第二個人抽中概率就是1/99,以此類推。
抽獎功能實(shí)現(xiàn)
抽獎功能實(shí)現(xiàn)其實(shí)就只有兩步,首先設(shè)置抽獎概率,即往集合中添加元素,然后就是開始抽獎了。
設(shè)置抽獎概率,偽代碼如下:
/** * $key 集合鍵名 * $cnt 集合元素?cái)?shù)量 */ function setProb($key, $cnt) { for ($i = 1; $i <= $cnt; $i ++) { $redis->sAdd($key, $i); } }
抽獎,偽代碼如下:
/** * string $key 集合鍵名 * int $stand 小于等于該數(shù)即表示抽中 * int $type 抽獎算法,1表示使用sRandMember,2的話 * 使用sPop */ function draw ($key, $stand, $type = 1) { if ($type == 1) { $number = $redis->sRandMember($key); } else { $number = $redis->sPop($key); } return $number < $stand; }
注意,stand是用來設(shè)置概率的。比如,集合中有10000個元素,將stand設(shè)置為10,那么概率即為10/10000.當(dāng)redis集合返回的元素值小于等于該值,即表示抽中。
Redis的集合還能完成其他有趣的功能,比如,統(tǒng)計(jì)當(dāng)天的訪問ip,統(tǒng)計(jì)活躍用戶等等。大家可以發(fā)揮自己的想象力,完成更多有趣的功能。
以上就是redis制作抽獎功能的具體介紹,內(nèi)容較為全面,而且我也相信有一些方法可能是我們?nèi)粘9ぷ骺赡軙姷交蛴玫降?。通過這篇文章,希望你能收獲更多。