redis 是單程序,但執行緒io復用,基於事件,類似於netty。因為是單執行緒,所以浪費了,多核,如果開啟集群效果會更好nosql的最大優勢就是儲存的記憶體中
redis支援持久化到硬碟,支援資料機構更多,且支援分布式,沒有主節點之分,當集群中任意兩個節點宕機,不會導致資料的不可用。
redis和memcached整體對比效能對比:由於redis只使用單核,而memcached可以使用多核,所以平均每乙個核上redis在儲存小資料時比memcached效能更高。而在100k以上的資料中,memcached效能要高於redis,雖然redis最近也在儲存大資料的效能上進行優化,但是比起memcached,還是稍有遜色。redis的作者salvatore sanfilippo曾經對這兩種基於記憶體的資料儲存系統進行過比較,總體來看還是比較客觀的,現總結如下:
記憶體使用效率對比:使用簡單的key-value儲存的話,memcached的記憶體利用率更高,而如果redis採用hash結構來做key-value儲存,由於其組合式的壓縮,其記憶體利用率會高於memcached。
redis支援伺服器端的資料操作:redis相比memcached來說,擁有更多的資料結構和並支援更豐富的資料操作,通常在memcached裡,你需要將資料拿到客戶端來進行類似的修改再set回去。這大大增加了網路io的次數和資料體積。在redis中,這些複雜的操作通常和一般的get/set一樣高效。所以,如果需要快取能夠支援更複雜的結構和操作,那麼redis會是不錯的選擇。
什麼是雜湊槽,就是根據key計算hash,根據hash到內建的雜湊槽中尋找,這些雜湊槽會適當的大致均勻的放在結群中每個節點中
為什麼
當你往redis cluster中加入乙個key時,會根據crc16(key) mod 16384計算這個key應該分布到哪個hash slot中,乙個hash slot中會有很多key和value。你可以理解成表的分割槽,使用單節點時的redis時只有乙個表,所有的key都放在這個表裡;改用redis cluster以後會自動為你生成16384個分割槽表,你insert資料時會根據上面的簡單演算法來決定你的key應該存在哪個分割槽,每個分割槽裡有很多key。
redis 集群中內建了 16384 個雜湊槽,當需要在 redis 集群中放置乙個 key-value 時,redis 先對 key 使用 crc16 演算法算出乙個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應乙個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點。
使用雜湊槽的好處就在於可以方便的新增或移除節點。
當需要增加節點時,只需要把其他節點的某些雜湊槽挪到新節點就可以了;
當需要移除節點時,只需要把移除節點上的雜湊槽挪到其他節點就行了;
內部機制,與我何干,對於我們來說,在新增或移除節點的時候不要讓我們先停掉所有的 redis 服務我就謝天謝地了,這點它做到了。
下面我們就開始動手搭建乙個 redis 集群來體驗一下。
Docker安裝Redis 詳細配置
1.拉取 docker pull redisredis後不加標籤,表示拉取最新映象 2.如果直接建立容器,在掛載時會把redis.conf當成是乙個目錄,所以先建乙個空的redis.conf檔案 mkdir p mydata redis conftouch redis.conf3.執行 4.編輯re...
Django配置redis詳細過程
1 在 virtualbox 裡面新增 redis 的預設埠6379 2 配置settings檔案 caches verification 3 ubuntu中 pip install django redis 4 view中進行匯入from django redis import get redis...
詳細Redis集群的配置搭建
redis集群中至少應該有三個節點。要保證集群的高可用,需要每個節點有乙個備份機。redis集群至少需要6臺伺服器。搭建偽分布式。可以使用一台虛擬機器執行6個redis例項。需要修改redis的埠號7001 7006 1 使用ruby指令碼搭建集群。需要ruby的執行環境。1 安裝ruby yum ...