>  기사  >  백엔드 개발  >  PHP는 높은 동시성으로 고유 식별 코드를 생성합니다.

PHP는 높은 동시성으로 고유 식별 코드를 생성합니다.

WBOY
WBOY원래의
2016-08-08 09:06:351385검색

언급한 대로 먼저 응답해주신 모든 전문가에게 감사드립니다.
문제 설명:

<code>学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。</code>

이제 질문은 다음과 같습니다.

<code>PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。</code>

답글 내용:

언급한 대로 먼저 응답해주신 모든 전문가에게 감사드립니다.
문제 설명:

<code>学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。</code>

이제 질문은 다음과 같습니다.

<code>PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。</code>

식별자 전처리 방법을 제안하고 싶습니다

  1. 미리 알고리즘을 통해 완전히 고유한 식별자를 생성합니다. 이 과정에서 직접 테스트할 수 있으며, 전처리되기 때문에 시간과 알고리즘의 복잡성을 고려할 필요가 없습니다.

  2. 생성된 고유 식별자를 데이터베이스에 기록합니다.

  3. 동시성이 높은 시나리오에서만 읽기 작업을 사용하세요

위의 내용은 주로 높은 동시성에서 빠른 응답 문제를 해결하는데, 고유성을 어떻게 보장할 수 있을까요?
두 가지 아이디어가 있습니다.

  1. redis의 팝 작업을 사용하는 것과 같이 고유한 큐를 통해 모든 읽기가 완료되도록 읽기용 큐를 사용하세요

  2. 이때 또 다른 필드 userid가 필요합니다: update TABLE set userid = $userid where userid = 0 limit 1;. 그런 다음 userid를 사용하여 해당 식별자를 쿼리합니다.

마지막으로 제가 강조하는 점은 처음부터 코드를 최대한 안전하게 설계하라는 것입니다. 보안 문제는 최우선적으로 고려되어야 한다는 점을 기억하세요.
실제 시나리오에서 '고동시성' 시나리오는 무엇인가요? 나는 다만 뭔가 잘못되면 프로그래머가 책임을 져야 한다는 점을 말하고 싶습니다.

요구사항이 절대 반복적이지 않다면 두 가지 아이디어가 있다고 생각합니다
1. 지속성을 위해 매번 새로운 ID 데이터를 무작위로 생성하고, 무작위로 생성된 데이터가 생성될 때마다 과거 데이터가 반복되는지 확인합니다. (그러나 이것은 매번 데이터가 필요합니다 지속성은 확실히 더 많은 성능을 소모합니다)
2. 규칙(예: 날짜 및 시간 스탬프 발라발라)에 따라 누적하여 생성된 것이 반복되지 않도록 하지만 어떻게 해야 하는지 고려해야 합니다. 높은 동시성에서 중복을 피하십시오.

질문드리고 싶습니다. 동시 상태에서 동일한 식별 코드가 생성되는 것이 더 걱정됩니까, 아니면 과거 중복 식별 코드가 생성되는 것이 더 걱정입니까?

동시성이 걱정된다면 언급한 마이크로초 수준의 문자에 일정량의 난수를 추가하는 것을 고려해 보세요(각 난수는 48~122 사이의 ASCII에 따른 문자로 변환 가능). 이론적으로 절대적인 비반복은 없지만 확률은 여전히 ​​매우 낮습니다

역사의 반복을 생각해보면 제가 생각한 두 가지는 서두에 언급한 두 가지입니다

잠금 장치를 사용해 보세요. .

1 파일을 쓸 때마다 +1
2 시스템을 홍보하는 것이므로 사용자 ID를 가져오는 한 이 고유 코드는 고유할 것입니다
3 이런 높은 동시성 문제를 볼 때 , 나는 자유롭다고 느낍니다. 젠장, 높은 동시성을 처리하려는 회사는 전체 인터넷에서 실제로 많지 않기 때문에 높은 동시성을 사용합니다. 이제 프레임워크, 시스템, 높은 동시성 및 캐싱이 프로그래머의 주문이 된 것 같습니다.

항목을 생성하고, 데이터베이스에 삽입하고, 고유 색인을 생성하고, 데이터베이스에서 중복 항목을 제거하도록 할 수 있습니다.

데이터베이스의 고유 ID를 기반으로 해당 62자리 문자열을 생성합니다.
많은 기사가 짧은 URL의 규칙을 분석하여 16진수를 생성합니다. 이론적으로는 ID가 반복되지 않고 문자열도 반복적으로 생성되지 않지만 길이는 변경됩니다. 그것이 허용되는지 확인하십시오.
동시성이 높은 것은 그리 많지 않기 때문에 사용도가 높은 사용자 ID를 요구하는 것도 하나의 방법입니다.

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