91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用redis制作抽獎功能?

發布時間:2020-05-18 09:59:37 來源:億速云 閱讀:389 作者:Leah 欄目:關系型數據庫

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制作抽獎功能的具體介紹,內容較為全面,而且我也相信有一些方法可能是我們日常工作可能會見到或用到的。通過這篇文章,希望你能收獲更多。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

资源县| 汝阳县| 韩城市| 蓬莱市| 新巴尔虎左旗| 厦门市| 镶黄旗| 谷城县| 岳阳县| 黎川县| 连城县| 宜兴市| 绥化市| 齐齐哈尔市| 稻城县| 栖霞市| 容城县| 手游| 满城县| 西乡县| 永兴县| 勃利县| 马山县| 乌拉特前旗| 普洱| 安达市| 沂源县| 广南县| 轮台县| 阿荣旗| 永定县| 建德市| 缙云县| 三门县| 繁昌县| 奉化市| 虹口区| 台江县| 师宗县| 亚东县| 澄城县|