三、redis的幾種常見客戶端及Sharding機制


1、redis的幾種常見客戶端:
    Jedis:是Redis的Java實現客戶端,提供了比較全面的Redis命令的支持;
    Redisson:實現了分布式和可擴展的Java數據結構。
 Lettuce:高級Redis客戶端,用於線程安全同步,異步和響應使用,支持集群,Sentinel,管道和編碼器。
    1)優點:
  Jedis:比較全面的提供了Redis的操作特性
  Redisson:促使使用者對Redis的關注分離,提供很多分布式相關操作服務,例如,分布式鎖,分布式集合,可通過Redis支持延遲隊列
  Lettuce:主要在一些分布式緩存框架上使用比較多
    2)可伸縮:
    Jedis:使用阻塞的I/O,且其方法調用都是同步的,程序流需要等到sockets處理完I/O才能執行,不支持異步。Jedis客戶端實例不是線程安全的,所以需要通過連接池來使用Jedis。
    Redisson:基於Netty框架的事件驅動的通信層,其方法調用是異步的。Redisson的API是線程安全的,所以可以操作單個Redisson連接來完成各種操作
    Lettuce:基於Netty框架的事件驅動的通信層,其方法調用是異步的。Lettuce的API是線程安全的,所以可以操作單個Lettuce連接來完成各種操作
2、redis的Sharding機制與技術:
    1) Sharding機制:即通常所說的“分片”,允許數據存放在不同的物理機器上,以適應數據量過大的場景,克服單台機器內存或者磁盤空間的限制。
    而這種“離散式”地存放,對客戶端來說是透明的,對客戶端來講,完全看不到這種差別。
    2) Redis的分片(Sharding或者Partitioning)技術:是指將數據分散到多個Redis實例中的方法,分片之后,每個redis擁有一部分原數據集的子集。
    在數據量非常大時,這種技術能夠將數據量分散到若干主機的redis實例上,進而減輕單台redis實例的壓力。分片技術能夠以更易擴展的方式使用多台計算機的存儲能力(這里主要指內存的存儲能力)
    和計算能力:
    a.從存儲能力的角度,分片技術通過使用多台計算機的內存來承擔更大量的數據,如果沒有分片技術,那么redis的存儲能力將受限於單台主機的內存大小。
    b.從計算能力的角度,分片技術通過將計算任務分散到多核或者多台主機中,能夠充分利用多核、多台主機的計算能力。

3、redis 中的分布式緩存-ShardedJedis
 ShardedJedis是通過一致性哈希來實現分布式緩存的,通過一定的策略把不同的key分配到不同的redis server上,達到橫向擴展的目的。ShardedJedis的使用方法除了配置時有點區別,其他和Jedis基本類似,有一點要注意的是 ShardedJedis不支持多命令操作,像mget、mset、brpop等可以在redis命令后一次性操作多個key的命令,具體包括哪些,可以查看Jedis下的 MultiKeyCommands 這個類,這里面就包含了所有的多命令操作。值得注意的是Redis作者已經把這些命令從ShardedJedis過濾掉了,使用時也調用不了這些方法。
 思考:ShardedJedis去查一個key的整個思路是什么?
   1)當我們使用ShardedJedis去查一個key時,首先它會把這個key進行一個hash算法
   2)根據這個hash值然后去TreeMap<Long, S> nodes中(其將每台服務器節點采用hash算法划分為160個虛擬節點(可以配置划分權重)),查出這個key落在哪個實例中,並返回redis實例對應的具體信息
   3)根據這個redis的實例信息,得到一個保存jedis鏈接和實例信息對應關系的 Map<ShardInfo<R>, R> resources = new LinkedHashMap<ShardInfo<R>, R>(); 中找到這個jedis連接
   4)通過3)中返回的jedis連接,執行對象的命令操作(到這步后實際上和單機操作一樣了)
  備注:在存入數據時 對Key or KeyTag 采用同樣的hash算法,然后從TreeMap獲取大於等於鍵hash值得節點,取最鄰近節點存儲;當key的hash值大於虛擬節點hash值得最大值時,存入第一個虛擬節點。sharded采用的hash算法:MD5 和 MurmurHash兩種;默認采用64位的MurmurHash算法;
4、緩存客戶端與服務器:
    redis是開源的緩存軟件,jedis是java連接redis的客戶端jar包
    zedis是sn在redis 2.8版本上進行修改定制的緩存服務器軟件
    sedis是sn在jedis版本上定制的緩存客戶端軟件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM