redis入門與集羣部署

redis入門

    redis入門級教程很是多,如http://www.runoob.com/redis/redis-backup.html,做爲入門其實已經十分詳細了,主要學習內容有以下幾個方面吧html

    1.理解redis做用: redis是一種內存數據庫,並非傳統的存儲數據庫,因此它的核心數據存儲都是放在內存的,而內存的空間通常是很是有限的,通常也就是100G之內,因此redis會很快把內存用盡,這時redis會交換磁盤數據,勢必會形成redis性能降低,因此這時候怎麼去作redis數據落地,redis緩存策略就須要細細考量了。 git

    2.redis數據結構:redis核心的數據結構無非就是key-value,固然也支持一些常見的list,set等,其中redis的Dict類型實現中的rehash算法能夠學習學習github

    3.redis相關命令:redsi-cli提供了和redis-server交互的客戶端工具,固然也提供一些經常使用的命令去和server交互。redis

    4.redis配置問題:redis在作數據備份時會啓動一個子進程去生成「快照」,熟悉「fork()」函數的都知道子進程會擁有和父進程同樣的內存空間,然而通常的操做都會採用「寫拷貝」技術去實現內存共享,只有數據發生改變時纔會發生拷貝事件,然而即便這樣,咱們也不該該把所有的內存空間給到redis,由於一旦在redis拷貝過程當中發生的拷貝事件過多,就會把內存「撐爆」,redis會崩掉,,那麼咱們數據的下場也就可想而知了,因此這時候去配置redis內存時仍是要考慮考慮的算法

    5.redis集羣相關,如redis-sentinel,一些開源庫,如StackExchange.RedisTwemproxy等,都是作的很是優秀的開源項目,值得學習學習數據庫

redis-sentinel集羣部署

    Redis-sentinel是Redis實例的監控管理、通知和實例失效備援服務,是Redis集羣的管理工具。在通常的分佈式中心節點數據庫中,Redis-sentinel的做用是中心節點的工做,監控各個其餘節點的工做狀況而且進行故障恢復,來提升集羣的高可用性。可是redis-sentinel在redis3.2版本中還屬於bate階段,並不適合生產環境,可是倒騰倒騰仍是能夠的。緩存

     這裏推薦一個系列文章(http://diaocow.iteye.com/blog/1938032),博主還有幾篇文章沒有完善,不過其中的rehash和主從複製寫的都蠻不錯的。其實reids-sentinel就至關於一個或多個redis實例管理器(或者說監控器),而多個redis實例中有一個master,其餘都是slave,redis-sentinel就監控着master,並從master中得到其餘slave的信息,一旦發現master掛掉,那麼redis-sentinel就會從新選取一個master,這樣即便master掛了,也不會影響咱們的數據啦。那麼其中的master和slave怎麼作數據同步,主從切換和配置的在上面的文章中有相關介紹。下面主要記錄一下我在配置redis-sentinel的過程。數據結構

1.首先須要配置一個master分佈式

2.配置兩個或者多個slave函數

3.先啓動master,在啓動slave

4.啓動redis-sentinel,,配置至此完成啦!!!

先看一下master配置,master幾乎不須要什麼特殊配置,咱們只須要更改一下監聽的端口就行了:

76GFVF}331KNQFWX])UWE3R

而後再配置一下兩個或多個slave,slave須要配置一下隸屬的master 的 ip和port,配置項如: slaveof <masterip> <masterport>,示例以下圖:

image

固然還須要配置一下redis-sentinel,只要更改它的:seninel monitor <master-name> <master-ip> <master-port> <quorum> ,其中master-name,隨便寫一個就能夠啦,可是須要和先後配置的master-name一致,quorum是最小合法投票數,也就是說當一個master掛掉時,最少有多少個redis-sentinel認爲它掛才能說明該master真正掛掉了,從而進入failover過程,這裏沒有部署多個redis-sentinel,故數量配置爲1就行了:

image

至此,reids-sentinel集羣簡單配置就結束了,使用相似:redis-server <config-path> & 就能夠啓動redis實例了,下面是個人啓動過程:

1. 啓動master: ../src/redis-server redis_mater.conf &

2. 啓動slave1:../src/redis-server redis_slave_1.conf &

3. 啓動slave1:../src/redis-server redis_slave_2.conf &

4. 啓動sentinel: ../src/redis-sentinel ../sentinel.conf &

可使用redis-cli –h ip –p port info 去查看各個server的信息,會發現6665端口運行的是master,6666和6667分別運行slave,而master爲127.0.0.1:6665,,26279端口運行着sentinel。

imageimageimage

 

至此說明集羣配置、運行正常啦,下面手動強制kill master:kill –9 masterID,查看sentinel和6667端口的slave信息:

imageimage

到這裏利用redis-sentinel配置集羣的demo介紹結束啦

 

StackExchange.Redis 作redis集羣

    StackExchange.Redis是StackFlow本身作redis的集羣項目,如今開元出來啦,使用很是簡單,看看介紹Basic Use就能把demo作出來,不過最好先用VS2015打開,由於我用VS2013打開後各類報錯,汗……,先用VS2015打開後,再用VS2013打開就正常,不知爲啥子……這裏就不過多介紹了,直接貼上幾行測試代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace RedisDistribute
{
    
    class Program
    {
        static void Main(string[] args)
        {
            string connStr = "ip:prot,ip:pro";
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(connStr);
            IDatabase db = redis.GetDatabase();
            db.StringSet("hello", "world!!!");


            string val = db.StringGet("hello");
            Console.WriteLine("Redis Hello Val : " + val);


            Console.ReadKey();
        }
    }
}
相關文章
相關標籤/搜索