1. 程式人生 > >java CRC16演算法,分解一個大Key例項。和各種hash演算法程式碼

java CRC16演算法,分解一個大Key例項。和各種hash演算法程式碼

  1. package org.rui.hi;  
  2. /** 
  3.  * 測試: 解決場景:把1億的使用者 儲存在一個佇列裡,過大。用sharding 摸擬redis 叢集 sharding Redis 
  4.  * 叢集使用資料分片(sharding)而非一致性雜湊(consistency hashing)來實現: 一個 Redis 叢集包含 16384 
  5.  * 個雜湊槽(hash slot), 資料庫中的每個鍵都屬於這 16384 個雜湊槽的其中一個, 叢集使用公式 CRC16(key) % 16384 來計算鍵 
  6.  * key 屬於哪個槽, 其中 CRC16(key) 語句用於計算鍵 key 的 CRC16 校驗和 。
     
  7.  *  
  8.  * @author ruiliang 
  9.  * 
  10.  */
  11. publicclass HashDist {  
  12.     publicfinalstaticint maxInt = 1000;// 00000;//1億
  13.     publicfinalstaticint USER_KEY_SLOT_COUNT = 20// 定議分配儲存使用者的Slot位
  14.                                                         // ,如果儲存有壓力,可調大槽位
  15.     publicstaticvoid main(String[] args) {  
  16.         // int 不用crc16
  17.         for (int i = 1; i < maxInt; i++) {  
  18.             // 根據玩家id 分佈指定到Slot位
  19.             int ranint = i % USER_KEY_SLOT_COUNT;  
  20.             String key = "key:" + ranint;  
  21.             System.out.println("key:" + key);  
  22.             // redisList.lpush(randomKey, String.valueOf(playerId));
  23.         }  
  24.         /** 
  25.          * crc16 redis 叢集也是用這種方式分配key 
  26.          */
  27.         String a = "a,b,c,d,e,f,g,g,g";  
  28.         for (String j : a.split(",")) {  
  29.             int solt = CRCJava.crc16(j.getBytes()) % USER_KEY_SLOT_COUNT;  
  30.             String key = "key:" + solt;  
  31.             System.out.println("crc%solt=key:" + key);  
  32.         }  
  33.         // redisList.lpush(randomKey, String.valueOf(playerId));
  34.     }  
  35. }  
  36. /** 
  37.  * output: ... 
  38.  *  
  39.  * key:key:0 key:key:1 key:key:2 key:key:3 key:key:4 key:key:5 key:key:6 
  40.  * key:key:7 key:key:8 key:key:9 key:key:10 key:key:11 key:key:12 key:key:13 
  41.  * key:key:14 key:key:15 key:key:16 key:key:17 key:key:18 key:key:19 key:key:0 
  42.  * key:key:1 key:key:2 key:key:3 key:key:4 key:key:5 key:key:6 key:key:7 
  43.  * key:key:8 key:key:9 key:key:10 key:key:11 key:key:12 key:key:13 key:key:14 
  44.  * key:key:15 key:key:16 key:key:17 key:key:18 key:key:19 key:key:0 key:key:1 
  45.  * key:key:2 key:key:3 key:key:4 key:key:5 key:key:6 key:key:7 key:key:8 
  46.  * key:key:9 key:key:10 key:key:11 key:key:12 key:key:13 key:key:14 key:key:15 
  47.  * key:key:16 key:key:17 key:key:18 key:key:19 key:key:0 key:key:1 key:key:2 
  48.  * key:key:3 key:key:4 key:key:5 key:key:6 key:key:7 key:key:8 key:key:9 
  49.  * key:key:10 key:key:11 key:key:12 key:key:13 key:key:14 key:key:15 key:key:16 
  50.  * key:key:17 key:key:18 key:key:19 key:key:0 key:key:1 key:key:2 key:key:3 
  51.  * key:key:4 key:key:5 key:key:6 key:key:7 key:key:8 key:key:9 key:key:10 
  52.  * key:key:11 key:key:12 key:key:13 key:key:14 key:key:15 key:key:16 key:key:17 
  53.  * key:key:18 key:key:19 key:key:0 key:key:1 key:key:2 key:key:3 key:key:4 
  54.  * key:key:5 key:key:6 key:key:7 key:key:8 key:key:9 key:key:10 key:key:11 
  55.  * key:key:12 key:key:13 key:key:14 key:key:15 key:key:16 key:key:17 key:key:18 
  56.  * key:key:19 crc%solt=key:key:11 crc%solt=key:key:8 crc%solt=key:key:17 
  57.  * crc%solt=key:key:10 crc%solt=key:key:19 crc%solt=key:key:16 
  58.  * crc%solt=key:key:5 crc%solt=key:key:5 crc%solt=key:key:5 
  59.  */
  1. package org.rui.hi;  
  2. publicclass CRCJava {  
  3.     publicstaticvoid main(String[] args) {  
  4.         String a = "a,b,c,d,e,f,g";  
  5.         for (String i : a.split(",")) {  
  6.             System.out.println(crc16(i.getBytes()));  
  7.         }  
  8.         System.out.println("----------------------------------");  
  9.         for (String i : a.split(",")) {  
  10.             System.out.println(crc162(i.getBytes()));  
  11.         }  
  12.     }  
  13.     /****************************************************************************** 
  14.      * Compilation: javac CRC16CCITT.java Execution: java CRC16CCITT s 
  15.      * Dependencies: 
  16.      *  
  17.      * Reads in a sequence of bytes and prints out its 16 bit Cylcic Redundancy 
  18.      * Check (CRC-CCIIT 0xFFFF). 
  19.      * 
  20.      * 1 + x + x^5 + x^12 + x^16 is irreducible polynomial. 
  21.      * 
  22.      * % java CRC16-CCITT 123456789 CRC16-CCITT = 29b1 
  23.      * 
  24.      ******************************************************************************/
  25.     publicstaticint crc16(finalbyte[] buffer) {  
  26.         int crc = 0xFFFF// initial value 65535
  27.         int polynomial = 0x1021// 0001 0000 0010 0001 (0, 5, 12)
  28.         // byte[] testBytes = "123456789".getBytes("ASCII");
  29.         for (byte b : buffer) {  
  30.             for (int i = 0; i < 8; i++) {  
  31.                 boolean bit = ((b >> (7 - i) & 1) == 1);  
  32.                 boolean c15 = ((crc >> 15 & 1) == 1);  
  33.                 crc <<= 1;  
  34.                 if (c15 ^ bit)  
  35.                     crc ^= polynomial;  
  36.             }  
  37.         }  
  38.         return crc &= 0xffff;  
  39.     }  
  40.     /** 
  41.      *  
  42.      * @param buffer 
  43.      * @return 
  44.      */
  45.     staticint crc162(finalbyte[] buffer) {  
  46. 相關推薦

    java CRC16演算法分解一個Key例項各種hash演算法程式碼

    package org.rui.hi;   /**   * 測試: 解決場景:把1億的使用者 儲存在一個佇列裡,過大。用sharding 摸擬redis 叢集 sharding Redis   * 叢集使用資料分片(sharding)而非一致性雜湊(consistency hashi

    Java JUC之Atomic系列12例項講解原理分解

    在java6以後我們不但接觸到了Lock相關的鎖,也接觸到了很多更加樂觀的原子修改操作,也就是在修改時我們只需要保證它的那個瞬間是安全的即可,經過相應的包裝後可以再處理物件的併發修改,以及併發中的ABA問題,本文講述Atomic系列的類的實現以及使用方法,其中包含: 基本類

    Java 8之前一個Object的Collection排序要寫多少行程式碼?

    在Java 8之前對一個Object的集合排序需要寫多少行程式碼呢?在Java 8之後又需要多少呢? 在Java 8之後,你可以只用一行程式碼搞定它。 我們看一下如下的Employee類: public class Employee {

    Java面試】實現一個演算法確定一個字串的所有字元是否全都不同

    //method to figure out if there's no duplicate char in a ASCII string import java.lang.String boolean isUniquedChars(String myString

    分解演算法一個數字分解成最合適的陣列內數字相加

    class Program { static int[] numbers = { 1, 2, 5, 10, 30, 35, 45, 50, 70, 90, 100, 105, 300, 350, 500, 1000, 1050, 3000, 350

    北京java程式設計師分享一個比努力更能決定人生的公式

      之前在羅振宇在公號上分享過一個“人生演算法”,他的公式是這樣的: 成就=核心演算法*大量重複動作的平方 這就是我要分享的比努力更能決定人生的公式。   如果說人生就是一條單向列車,想要更好更快的到達目的地,需要兩個因素。 核心演算法:即一條相對而

    設計一個演算法一個十進位制的數轉化為二進位制

    #include<iostream.h> const int StackSize=10; class SeqStack {     public:        SeqStack(){

    Java軟體開發者如何學習資料?

    正常來講學習大資料之前都要做到以下幾點 1.學習基礎的程式語言(java,python) 2.掌握入門程式設計基礎(linux操作,資料庫操作、git操作) 3.學習大資料裡面的各種框架(hadoop、hive、hbase、spark) 這是正常學習大資料必須要做

    Java程式設計師想嘗試資料資料探勘該怎麼規劃學習?

      一.大資料方向工作介紹 二.大資料工程師的技能要求 三.大資料學習路徑 四.學習資源推薦(書籍、部落格、網站)   一.大資料方向工作介紹 大資料方向的工作目前分為三個主要方向: 01.大資料工程師 02.資料分析師 03.大資料科學家 04.其他(資料探勘本

    分治法:關於選擇演算法找最找最小同時找最最小找第二大

    找最大或者最小,蠻力演算法為最優的演算法,需要比較n-1次 # 這個已經是最優的演算法了,比較n-1次 def findMax(arr): max_pivot = arr[0] for i in range(1,len(arr)): if arr

    演算法優化:最m個子段問題規模從1個子段擴充套件到m個動態規劃

    最大m個子段和,問題規模從1個子段和擴充套件到m個,動態規劃 問題規模由2個決定,一是子段數m,二是元素個數n,準確的說是最後一個子段終止的標號 b(i,j)定義為:前j個元素中有i個子段,且第i個子段包含j,i個子段和為b(i,j) 那麼原問題的最優解為max{b(m,j)},m&

    python的強大果然是名副其實製作一個資料搜尋引擎跟玩一樣!

      搜尋是大資料領域裡常見的需求。Splunk和ELK分別是該領域在非開源和開源領域裡的領導者。本文利用很少的Python程式碼實現了一個基本的資料搜尋功能,試圖讓大家理解大資料搜尋的基本原理。 學習Python中有不明白推薦加入交流群    

    Java 高併發什麼方式解決?高併發流量解決方案

    本文轉載而來:https://gitbook.cn/books/5b625e94daf78a4dc2deacce/index.html 對於我們所研發的網站,若網站的訪問量非常大,那麼我們必須考慮相關的併發訪問問題,而併發問題是絕大部分的程式設計師頭疼的問題。本 Chat 帶你領略一下相關概念和

    C++primer第五版 編寫一個函式令其接收兩個引數一個是int型的數一個是int指標函式比較int的值指標所指的值返回較的那個

    該題目主要是為了熟悉函式引數的幾種傳遞方式。定義函式形參時,可以定義成傳值(本身)、傳指標(*)、傳引用(&)。如果只是訪問引數值,不對其進行修改,那麼這三種方式都是可以的。例如該題目,就僅僅是比較兩個引數的大小,並沒有對引數本身進行修改,因此傳值和傳指標都是可行的。

    演算法一個從1到正無窮的無限大數字陣列每個數字佔1位求第n位是幾

    陣列是1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,2,0,........ 求第n位是幾。 我是用java實現的,解題過程中還研究了一下char轉int,Integer.parseInt(String,

    設計一個演算法判斷一個二叉樹是否為完全二叉樹

    思想:根據完全二叉樹的定義,對完全二叉樹按照從上到下、從左到右的層次遍歷,應該滿足一下兩條要求: ●某節點沒有左孩子,則一定無右孩子 ●若某節點缺左或右孩子,則其所有後繼一定無孩子 若不滿足上述任何一

    請設計一個演算法一個字串進行二進位制編碼使得編碼後字串的長度最短(哈弗曼編碼)

    美團點評2016研發工程師程式設計題(二) 請設計一個演算法,給一個字串進行二進位制編碼,使得編碼後字串的長度最短。 輸入描述: 每組資料一行,為待編碼的字串。保證字串長度小於等於1000。 輸出描述: 一行輸出最短的編碼後長度。 輸入例子: MT-TECH-TEA

    Android關於context上下文定義全域性的轉載一個神的

    大家好,今天給大家分享一下Android裡的Context的一些用法,以前經常有人在群裡問我比如我在一個工具類裡的某個方法,或者View裡需要呼叫Context.但是工具類還有View裡沒有這個上下文怎麼辦?為了解決大家的疑問,為了解決大家的疑問,我今天寫一個簡單的Dem

    Java記憶體對映上G檔案輕鬆處理

    記憶體對映檔案(Memory-mapped File),指的是將一段虛擬記憶體逐位元組對映於一個檔案,使得應用程式處理檔案如同訪問主記憶體(但在真正使用到這些資料前卻不會消耗實體記憶體,也不會有讀寫磁碟的操作),這要比直接檔案讀寫快幾個數量級。 稍微解釋一下虛擬記憶體(很明顯,不是實體記憶體),它是計算機系

    學會這幾個技巧讓Rediskey問題遠離你

    Redis大key的一些場景及問題 大key場景 Redis使用者應該都遇到過大key相關的場景,比如: 1、熱門話題下評論、答案排序場景。 2、大V的粉絲列表。 3、使用不恰當,或者對業務預估不準確、不及時進行處理垃圾資料等。 大key問題 由於Redis主執行緒為單執行緒模型,大key也會帶來一些問題,