ビッグデータ公式京淘6


ビッグデータ公式京淘6
Redisベースコマンド
set key value【修正値】incr key【自己増加】decr key【自減】incrby key数字【ステップ別成長】decrby key数字【ステップごとに減退】append key value【追加データ】mset key 1 value 1 key 2 value 3【一括設定】--スライスとクラスタ計算ができず、初期のRedisレガシー機能mget key 1 key 2 key 3【バッチ取得】--スライスとクラスタ計算ができず、初期のRedisレガシー機能ttl key【key-valueの表示】生存時間
-1は、永続的なを表します.
-2は、期限切れのを表します.

expire key時間(秒)【key-valueの生存時間の設定】
カウントダウン
pexpire key時間(ミリ秒)【key-valueの生存時間の設定】
秒殺
Redisのデータ構造
key-valueの形式


Hash構造
heset
hset key_all key1 value1
hset key_all key2 value2
hset key_all key3 value3
hset key_all key4 value4
...

hget
hget key_all key1
hget key_all key2
hget key_all key3
hget key_all key4
...

hexist
hdel
hkeys
hvals
List【双方向リスト:左上右下】
lpush
rpush
lrange key start end
rrange key start end
linsert key before key1
linsert key after key1
lset key index value【負数の場合逆数】lrem key index【0の場合はすべて削除】ltrim key start stop【startからstopまで】lpop key【リストの1番目を削除して戻る】rpoplpush key 1 key 2【ヘッド交換位置】lindex key index【index位置を返す値】

データの分散ストレージ
データのスライスストレージを完了するには、少なくとも複数のredisインスタンスが必要です.
2番目と3番目のredisサーバを起動する(異なるプロファイル--コピー)注意ポートの変更
の図面をかく


指定したポートへのログイン
デフォルトredis-cli-p 6379 redis-cli-pエンドスローガン
redis-cli -p 6380
redis-cli -p 6381



データの格納と読み込み方法--コード操作
jedisによりredisを制御するコマンド機能
//          
@Test
public void jedis() {
    //     
    Jedis jedis = new Jedis("117.50.2.181", 6379);
    jedis.set("name", "kungfupeng");
}   

キャッシュロジック
keyによるキャッシュの取得
取得キャッシュがあるなし:データベースのデータを取得し、キャッシュに追加します.

//     
@Test
public void jedis() {
    //     
    Jedis jedis = new Jedis("117.50.2.181", 6379);
    String temp = jedis.get("name");
    if (StringUtils.isNotEmpty(temp)) {//     ,    
        jedis.set("name", "kungfupeng");
    } else {
        System.out.println(temp);//    ,         
    }
}
スライスロジック
Redisのポートをループする【遅すぎる】
弊害:拡張する時比較的に面倒な例
//     
    @Test
    public void jedis() {
        // Jedis  
        Jedis jedis = null;
        //     
        List keys = new ArrayList();
        keys.add("key1");
        keys.add("key2");
        keys.add("key3");
        keys.add("key4");
        //     【1-2-3】【6379-6380-6381】
        int index = 1;
        //       
        for (String temp : keys) {
            if (index == 1) {
                jedis = new Jedis("192.168.12.23", 6379);
            } else if (index == 2) {
                jedis = new Jedis("192.168.12.23", 6380);
            } else if (index == 3) {
                jedis = new Jedis("192.168.12.23", 6381);
                index = 0;
            }
            index++;
            System.out.println(jedis.get(temp));
        }
    }

hashCode取余【まあまあ】
利点:1つのモジュール共通hashのハッシュ特性例
@Test
public void jedis() {
    // Jedis    
    List list_jedis = new ArrayList();
    list_jedis.add(new Jedis("12.12.23.44", 6379));
    list_jedis.add(new Jedis("12.12.23.44", 6380));
    list_jedis.add(new Jedis("12.12.23.44", 6381));
    //     
    List keys = new ArrayList();
    keys.add("key1");
    keys.add("key2");
    keys.add("key3");
    keys.add("key4");
    //       
    for (String temp : keys) {
        int num = temp.hashCode() % list_jedis.size();
        for (int i = 0; i < list_jedis.size(); i++) {
            if (i == num) {
                System.out.println(list_jedis.get(i).get("key"));
            }
        }
    }
}

ノード情報【好適】
List infoList=new ArrayList();//    
infoList.add(new JedisSharedInfo("104.43.23.4",6380));
...
ShardedJedis jedis=new  ShardedJedis(infoList);//    
@Test
public void jedis() {
    List jlist = new ArrayList();
    //       
    JedisShardInfo jsi1 = new JedisShardInfo("123.12.13.31", 6379);
    JedisShardInfo jsi2 = new JedisShardInfo("123.12.13.31", 6380);
    JedisShardInfo jsi3 = new JedisShardInfo("123.12.13.31", 6381);
    //       
    jlist.add(jsi1);
    jlist.add(jsi2);
    jlist.add(jsi3);
    //          
    ShardedJedis sj = new ShardedJedis(jlist);
    //     
    sj.set("key", "value");//     ,     Jedis
}

Jedisプール
作成と閉じる回数を減らす例
@Test
public void jedis() {
    List jlist = new ArrayList();
    //       
    JedisShardInfo jsi1 = new JedisShardInfo("12.123.44.66", 6379);
    JedisShardInfo jsi2 = new JedisShardInfo("12.123.44.66", 6380);
    JedisShardInfo jsi3 = new JedisShardInfo("12.123.44.66", 6381);
    //       
    jlist.add(jsi1);
    jlist.add(jsi2);
    jlist.add(jsi3);
    //       
    JedisPoolConfig config = new JedisPoolConfig();
    //          
    config.setMaxTotal(100);
    //        
    ShardedJedisPool sjp = new ShardedJedisPool(config, jlist);
    //   ShardedJedis  
    ShardedJedis resource = sjp.getResource();
    //     
    resource.set("naem", "kungfupeng");
    //     
    sjp.returnResource(resource);
}

hash整合性とhash残高
いずれもハッシュアルゴリズムに属する
hash取余
大規模なデータチルトが発生しやすい【ハッシュは必ずチルト】redisサーバが増加または減少すると、nの値が変化し、データのヒットの変化が非常に大きくなり、データ移行の量も増加する.

hash整合性
データの傾きをある程度解決し、主にデータ移行を解決した.
【ip+ポート】-->ハッシュハッシュ-->整数値======対応====43億整数リングの点【key】-->ハッシュハッシュ-->整数値======対応====43億整数リングの点保存:keyは時計回りにノード(IP+ポート)------密集するほど移動が少なくなる図解

帰属する
ノードI
key3

ノードII
key1

ノードIII
key2
key4



データのバランスを深く解決し続ける
仮想ノードの導入
図解


帰属する
ノードI
【key3】
仮想ノードI_1
【key2】

仮想ノードI_2
【key1】


ノードII
仮想ノードII_1
仮想ノードII_2

ノードIII
仮想ノードIII_1
仮想ノードIII_2
【key4】



結論仮想ノードが多ければ多いほど、バランスが良い

京淘中のキャッシュ
商品分類木【可】商品リスト【可:注意ページングパラメータ】商品新規【可能】商品修正【可】商品削除【不要】商品詳細【可】