디자인과 생각 짧은 체인 플랫폼

며칠 전 문제의 번호가 짧은 체인 애플리케이션 플랫폼에 저주 프로젝트 (시나 짧은 체인 t.cn) 타사이며, 모든 플랫폼은시나가 짧은 체인 세척이 떨어져 옷을 탈출하는 데 실패 사용합니다. 그 다음 문제는 물론, 우리에게 상기시켜 것, 빠른 타사 서비스,

또한 비교적 양호하지만, 이러한 예기치 않은 문제도 우리가 무료 서비스를 알릴 수와 github에 전에 상황의 유지 보수 또는 폐쇄 소스를 중지 프로젝트의 수가 있었다, 영구적 인 해결책이 될 수 없습니다. 그래서 타사 서비스에 대한 시스템 재해 복구 대책은 피해를 최소화하기 위해 좋은해야합니다.

타사 플랫폼의 장점

짧은 체인 서비스가되지 않습니다 제공 짧은 체인 중복 주소 , 짧은 체인 리디렉션 실패 손실을 최소화 할 수있는 플랫폼을 가지고 바인딩 및 기타 문제를, 그래서 안정적인 짧은 체인 플랫폼 효율적인 알고리즘을 구축

 

 

 

이 응용 프로그램은 짧은 체인 준비를 구축하기 위해 자신의 서버 플랫폼 : 짧은 도메인 이름은, 많은 방송국 서버, 짧은 체인 생성 알고리즘의 집합을 사용할 수 있습니다

문자열 뒤에 찾을 수 있습니다 사람들의 중고 짧은 체인, 짧은 체인 계산은 주로 웹 사이트의 왼쪽에서 문자열 http://t.cn/Rc37zpz의 문자열 뒤에 t.cn 알고는 --- 아마도 0 범위 Z, 우리는이 함께 시작할 수 있도록 순서대로 짧은 체인 고유성을 보장하기 위해, 우리는 내부의 제어 범위의 고유 한 값을 생성하기 위해 우리는 타임 스탬프 + 임의의 숫자를 기대할 수있는이 시간이 필요, 타임 스탬프는 고유하지만, 타임 스탬프는 그들이 고유하게 식별하는 디지털 짧은 문자열로 변환 할 수있는 방법을 숫자의 문자열입니다?

아래의 대답 ⤵️

진수 변환

나는 우리의 목표는 Z 0의 임의의 값의 캐릭터 라인 --- 0 --- Z (62) 사이의 길이, 10 진수 타임 스탬프 우리는 62로 변환 10 대역을 사용할 수있다 인을 생성하기 때문에, 변환 금지를 생각 변환에 대한 시스템 접근하고 그래서 가능합니까?

...하려고합니다  ~ 무서워하지 않는, 62 진수를 여기에 내가 직접 10 진수 코드 62 진수, 같은 턴 16 진수 코드를 부착 차례

 

 / ** 
     * 62 진 데이터가 초기화되며, 인덱스 값 A (10)를 나타내고, 예를 들어 캐릭터의 위치를 나타내는, Z (61)를 대신하여 추천 
     * / 
    개인  정적 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"문자열 문자의 = ;
     개인  정적  INT의 배율 = 62 ; 

    / ** 
     * 디지털 62 진수로 전환 
     * @param NUM 긴 디지털 
     * @param의 변환 길이 후 문자열 길이, 왼쪽 보완 이하 0 
     * @return 62 16 진수 문자열
      * / 
    공공  정적 문자열 인코딩 (  NUM, INT의 길이) { 
        모두 StringBuilder SB = 새로운 새모두 StringBuilder ();
         INT의 REMAINDER, 

        그동안 (. NUM> 스케일 - 1 ) {
             / ** 
             나머지 부분을 평가하기 * 규모, 다음 나머지는 처음부터 마지막 비트를 추가하기 때문에, 따라서 마지막으로 역전 할 필요가, SB 추가됩니다 (역 ) 문자열 
             * / 
            REMAINDER = Long.valueOf (NUM의 %의 스케일) .intValue (); 
            sb.append (chars.charAt (REMAINDER)); 

            NUM = NUM / 스케일링하게하고; 
        } 
        sb.append (chars.charAt (Long.valueOf (NUM) .intValue ())); 
        문자열 값 = sb.reverse의 toString () ();
         돌아가 , 길이 org.apache.commons.lang.StringUtils.leftPad (값이 '0' ); 
    }

여기서 우리는 십진수 16 진수 62은 수신로서 0, 1, 채우기로 변환 길이 7 다음의 결과를 생성 할 수 있으면 충분하지 않은 소정의 길이를 필요

 

 

진실은 비트 0가 예전보다 덜입니다

여러 요청이 밀리 초 같은 시간에 같은 주소를 생성하지 않습니다가있는 경우 그래서, 대답은 '예'입니다!

그래서 우리는 어떻게해야합니까?

###은 3--4 자리 플러스 짧은 체인의 동시 발생을 제어하기위한 임의의 타임 스탬프를 제공 할 수 있습니다, 그것은 그래서 매우, 매우 낮은 충돌 비율을 입증 ~

이론 다음 코드는 ~ 친구를 볼 수

 

/ ** 
     * 생성 비트 수 길이 
     *의 파라미터 : 길이 
     * @return 
     * / 
    공용  정적   genRandomNumber ( INT의 길이) { 
        모두 StringBuilder SB = 새로운 새 모두 StringBuilder ();
         // 그것으로 생성되는 경우 임의의 완전 랜덤 여기되도록하여 내가 도울 수 
        랜덤 랜덤 = 새로운 새로운 랜덤 ();
         그동안을 (> 0 길이 {) 
            sb.append합니다 (Math.abs (random.nextInt () 내지 10 % )) 
            에서 System.out.println ( "최초"+ (세로 -1) + "비트가"+ sb.toString ()); 
            길이 . - 1 =; 
        } 

        리턴 Long.valueOf (sb.toString ()); 
    }

 

그리고 디지털의 두 가지 새로운 임의의 숫자는 임의의 숫자와 합과 같다 타임 스탬프하지만, 문자열이 동일한 두 개로 분할 할 수는없는 것이기 때문에이 두 숫자의 형태로 추가 할 수없는 기억이 될 수있다 그래서 문자열 연결을 사용하십시오 ]

 

 작동 이상 도구, 클래스의 나머지는 도구를 호출 할 수 있습니다

 

테스트 :

테스트 주소

클라우드 주소 코드 : 코드 구름 주소

 원본 : https://choviwu.top/archives/1568464484147   당신이 다시 인쇄해야하는 경우, 소스를 표시하시기 바랍니다

추천

출처www.cnblogs.com/ChoviWu/p/11521354.html