redis入門與集群部署


redis入門

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

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

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

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

    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();
        }
    }
}


免責聲明!

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



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