>  기사  >  데이터 베이스  >  Redis를 사용하여 복권 기능 완료

Redis를 사용하여 복권 기능 완료

齐天大圣
齐天大圣원래의
2020-05-13 16:21:163970검색

Redis 컬렉션 소개

Redis의 컬렉션 데이터 유형은 매우 강력합니다. 집합이라고 하면 고등학교 수학에서 집합을 떠올릴 수 있습니다. 사실, 그것들은 같은 의미를 가지고 있습니다. Redis 컬렉션은 많은 문자열(요소)을 저장할 수 있습니다. Redis는 최대 2의 32승 - 1 요소를 지원하지만 컬렉션의 요소는 고유하며 중복되지 않습니다. 수학의 집합과 마찬가지로 Redis도 교집합, 합집합, 차이를 지원합니다.

이를 사용하여 많은 흥미로운 기능을 완성할 수 있습니다. 가장 일반적인 것은 태그 기능입니다. 아마도 사용자 A의 태그에는 "애니메이션", "스포츠", "2차원"이 포함될 수 있고 사용자 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);
    }
}

Lottery, 의사 코드는 다음과 같습니다.

/**
 * 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;
}

스탠드는 확률을 설정하는 데 사용됩니다. 예를 들어 컬렉션에 10,000개의 요소가 있고 스탠드가 10으로 설정된 경우 redis 컬렉션에서 반환된 요소 값이 이 값보다 작거나 같다면 확률은 10/10,000입니다. 선택된.

Redis 컬렉션은 당일 액세스 IP 계산, 활성 사용자 계산 등과 같은 다른 흥미로운 기능도 수행할 수 있습니다. 누구나 상상력을 발휘하여 더 흥미로운 기능을 완성할 수 있습니다.

위 내용은 Redis를 사용하여 복권 기능 완료의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.