中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何用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

芮城县| 新津县| 榕江县| 府谷县| 合作市| 肇庆市| 红桥区| 田东县| 娄烦县| 沙坪坝区| 遵化市| 信阳市| 合阳县| 盐城市| 尼玛县| 玉田县| 沙河市| 启东市| 乌兰浩特市| 曲靖市| 汉中市| 广西| 宁国市| 金溪县| 龙岩市| 延寿县| 霍林郭勒市| 长葛市| 莒南县| 闸北区| 陵水| 罗平县| 奉贤区| 塘沽区| 盈江县| 堆龙德庆县| 云梦县| 库伦旗| 万宁市| 镇宁| 辽宁省|