您好,登錄后才能下訂單哦!
redis集合簡介">這篇文章給大家分享的是redis制作抽獎功能的詳細介紹,相信大部分人都還沒學會這個技能,為了讓大家更加了解,給大家總結了以下內容,話不多說,一起往下看吧。
Redis集合簡介
Redis的集合數據類型,功能非常強大。說到集合的話,你可能想到高中數學上的集合。其實他們本就是一個意思。Redis集合里面可以存放很多字符串(元素),Redis最多支持2的32次方減1個元素,但是集合里的元素都是唯一的,不會有重復。和數學里集合一樣,Redis也支持交集,并集以及差集。
用它可以完成許多有意思的功能。最常見的就是標簽功能了,可能A用戶的標簽有“動漫”、”運動“、”二次元“,B用戶的標簽有”運動“、”旅游“、”籃球“。那么,使用集合的并集,就能知道他們的共同標簽是什么。另外,當系統知道用戶的標簽后,就可以給他們推薦相關的廣告或產品。除此之外,還要許多有意思的功能它也能實現。今天,我們來看看如何使用Reids實現抽獎功能。
sRandMember、sPop
這兩個命令功能非常相似,都是從集合中返回一個元素值。不同的是,sRandMember不會從集合中刪除返回的元素,但是sPop會刪除。這兩個命令可以分別實現不同的抽獎算法。
比如,集合中有100個元素,值從數字1到數字100.我們定義抽到的是數字1的話,即表示中獎。
使用sRandMember的話,不管之前抽過多少次,下次抽中的概率都是1%。而使用sPop的話,則每次抽中的概率都不一樣。第一個人抽中概率是1%,當第一個人沒抽中的話,第二個人抽中概率就是1/99,以此類推。
抽獎功能實現
抽獎功能實現其實就只有兩步,首先設置抽獎概率,即往集合中添加元素,然后就是開始抽獎了。
設置抽獎概率,偽代碼如下:
/** * $key 集合鍵名 * $cnt 集合元素數量 */ function setProb($key, $cnt) { for ($i = 1; $i <= $cnt; $i ++) { $redis->sAdd($key, $i); } }
抽獎,偽代碼如下:
/** * string $key 集合鍵名 * int $stand 小于等于該數即表示抽中 * 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是用來設置概率的。比如,集合中有10000個元素,將stand設置為10,那么概率即為10/10000.當redis集合返回的元素值小于等于該值,即表示抽中。
Redis的集合還能完成其他有趣的功能,比如,統計當天的訪問ip,統計活躍用戶等等。大家可以發揮自己的想象力,完成更多有趣的功能。
以上就是redis制作抽獎功能的具體介紹,內容較為全面,而且我也相信有一些方法可能是我們日常工作可能會見到或用到的。通過這篇文章,希望你能收獲更多。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。