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.Redis、Twemproxy等,都是做的非常優秀的開源項目,值得學習學習
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幾乎不需要什么特殊配置,我們只需要更改一下監聽的端口就好了:
然后再配置一下兩個或多個slave,slave需要配置一下隸屬的master 的 ip和port,配置項如: slaveof <masterip> <masterport>,示例如下圖:
當然還需要配置一下redis-sentinel,只要更改它的:seninel monitor <master-name> <master-ip> <master-port> <quorum> ,其中master-name,隨便寫一個就可以啦,但是需要和前后配置的master-name一致,quorum是最小合法投票數,也就是說當一個master掛掉時,最少有多少個redis-sentinel認為它掛才能說明該master真正掛掉了,從而進入failover過程,這里沒有部署多個redis-sentinel,故數量配置為1就好了:
至此,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。
至此說明集群配置、運行正常啦,下面手動強制kill master:kill –9 masterID,查看sentinel和6667端口的slave信息:
到這里利用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(); } } }