높은 동시성을 방지하고 상품 획득 만료 시간을 설정하기 위해 Redis를 사용하는 것에 대한 질문
滿天的星座
滿天的星座 2017-04-25 09:02:25
0
1
918

비즈니스

큰 회전목마 복권 경품은 실물 상품과 빨간 봉투로 나누어집니다. 사용자는 실물 상품을 하나만 당첨할 수 있습니다

동일한 사용자를 방지하려면 redis을 사용하세요. 并发 더 많은 실제 개체를 얻으세요. 즉, 여러 개의 실제 개체를 획득하세요.
상금 풀을 받으세요

으아아아

아직 실물을 획득하지 못한 유저가 같은 유저가 동시에 응모한 경우, 무작위로 선정된 경품이 실물이 될 가능성이 있습니다. 요청 중 3번은 실제 상품을 무작위로 선택하는 일이 발생하므로 사용자는 3개의 실제 상품을 획득할 수 있으므로 redis가 더 많은 실제 상품에 부딪히는 것을 방지하기 위해 并发를 도입해야 합니다.

으아아아

过期时间에 대해서는 redis은 기본적으로 악성 사용자의 동시 요청을 위해 도입된 것이므로 일반 사용자의 정상적인 페이지 작업은 필요하지 않기 때문에 아직 평가 방법과 설정 기간을 알 수 없습니다. 만약 이전에 실제 경품을 한 번 받고 나중에 복권에 가면 처음 상금풀을 받을 때 실제 경품이 제외되기 때문에 다음 복권 경품에는 실제 경품이 나오지 않기 때문입니다. 수영장. 따라서 실제 개체가 없습니다.
10분으로 설정한 이유는 두 개의 동시 요청과 둘 다 실제 개체를 획득한 두 개의 요청이 redis.incr(key) 10분 간격으로 실행이 불가능하다고 생각하기 때문입니다. 아래

으아아아

n에게 redis 작업을 수행하도록 요청할 때 key이 만료되지 않음을 10분이면 보장할 수 있으므로 실제 개체를 추월하는 것을 방지할 수 있다고 생각합니다.

근데 왜 key가 요청 2가 실행될 때 만료되는 상황이 있다고 생각하는데,
이러한 상황이 발생하는지 전혀 생각나지 않습니다. 동시 요청 수가 특히 많습니다.

과 같은 것이 가능합니까? 으아아아

예를 들어 요청 1이 오면 물리적 개체가 무작위로 선택됩니다. 요청 n이 오면 요청 1은 아직 데이터베이스에 제출되지 않았으므로 요청 n이 실행될 때 무작위로 물리적 상품을 반환할 수 있습니다. 🎜> , 10분이 지났으므로 요청 n은 여전히 ​​실제 개체를 얻을 수 있습니다. 따라서 동일한 사용자가 두 개의 실제 개체를 얻을 수 있습니다.

滿天的星座
滿天的星座

모든 응답(1)
洪涛

1. 디자인에 따라 redis를 사용하여 시간을 영구 설정하는 것이 어떨까요? 요청 A가 제출될 때까지 기다린 후 정상적인 논리적 판단을 따릅니다.
2. Redis 없이 데이터베이스를 사용하여 다중 동시성 제어를 달성하려면 먼저 상금 풀 테이블이 있어야 합니다. 각각의 당첨자를 나타내는 필드가 있습니다. 사용자가 상품에 당첨되면 상품 풀 테이블이 업데이트되어 당첨자를 설정하며, SQL 업데이트 시 실제 상품 수량 제어 조건을 추가하게 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿