安裝
下載地址:https://github.com/MSOpenTech/redis/releases。
Redis 支持 32 位和 64 位。這個需要根據你系統平台的實際情況選擇,這里我們下載 Redis-x64-xxx.zip壓縮包到 C 盤,解壓后,將文件夾重新命名為 redis。
解壓后文件:
redis-benchmark.exe 基准測試
redis-check-aof.exe aof
redischeck-dump.exe dump
redis-cli.exe 客戶端
redis-server.exe 服務器
redis.windows.conf 配置文件
注意:《Redis-x64-3.2.100.msi》同樣是redis服務端,可以代替redis-server.exe,安裝后以服務形式啟動,然后用自帶客戶端工具檢測。
1、服務端:
打開一個 cmd 窗口 使用cd命令切換目錄到 C:\redis 運行 redis-server.exe redis.windows.conf 。
如果想方便的話,可以把 redis 的路徑加到系統的環境變量里,這樣就省得再輸路徑了,后面的那個 redis.windows.conf 可以省略,如果省略,會啟用默認的。輸入之后,會顯示如下界面:
默認端口為6379,出現這個界面說明啟動成功。
如果要以服務形式啟動,則
redis-server --service-install redis.windows.conf --loglevel verbose --service-name 服務名稱
卸載服務命令:redis-server.exe --service-uninstall
2、客戶端:
用自帶客戶端redis-cli.exe檢測。雙擊,連接成功。
運行 redis-cli.exe -h 127.0.0.1 -p 6379 。
設置鍵值對 set myKey abc
取出鍵值對 get myKey
3、redis服務密碼:
設置redis的密碼:找到# requirepass foobared 改為 requirepass 我的密碼 ,本機測試可不設置。
默認情況下 requirepass 參數是空的,這就意味着你無需通過密碼驗證就可以連接到 redis 服務。
設置密碼后,客戶端連接 redis 服務就需要密碼驗證,否則無法執行命令。
127.0.0.1:6379>auth xxx
Redis可視化工具
RedisDesktopManager一款好用的Redis桌面管理工具,支持命令控制台操作,以及常用,查詢key,rename,delete等操作。
下載軟件,請點擊下面鏈接,進入下載頁,選擇對應版本:https://redisdesktop.com/download
操作使用如下圖:
一、新建連接
輸入redis主機host,端口號port,再起個生動形象,簡明達意的別名。
二、該工具支持根據篩選條件查詢key,add new key,reload等。
三、支持常用redis操作
針對目標key執行rename,delete,addrow,reload value操作。
四、命令控制台操作
該工具提供命令控制台:
Redis的主從復制
Redis跟MySQL一樣,擁有非常強大的主從復制功能,而且還支持一個master可以擁有多個slave,而一個slave又可以擁有多個slave,從而形成強大的多級服務器集群架構。
redis的主從復制是異步進行的,它不會影響master的運行,所以不會降低redis的處理性能。主從架構中,可以考慮關閉Master的數據持久化功能,只讓Slave進行持久化,這樣可以提高主服務器的處理性能。同時Slave為只讀模式,這樣可以避免Slave緩存的數據被誤修改。
1、配置
實際生產中,主從架構是在幾個不同服務器上安裝相應的Redis服務。為了測試方便,我這邊的主從備份的配置,都是在我Windows 本機上測試。
在本機window下安裝三個redis實例,其中主服務端口6379,從服務slave1為6380,從服務slave2為6381.
1.當前已安裝並啟動了主服務器,復制兩份主服務的解壓目錄分別命名為Redis-salve1和Redis-salve2.如下圖:
2.配置從服務器
分別配置兩個配置文件(兩個文件需要配置的內容相同,以redis.windows.conf為例):
改端口port為 6380和6381
在Slave 實例 ,# slaveof <masterip> <masterport> 修改為:slaveof 127.0.0.1 6379 配置。
3、分別啟動主從服務 redis-server.exe redis.windows.conf
【這里指演示 一個從服務器6380】
注意,如果設置了密碼的話,從服務器中需要在requirepass xxxx 后加一行: masterauth xxxx
masterauth 是主從認證密碼,否則主從不能同步
4、安轉為服務啟動:
切換到各自目錄下,輸入命令:redis-server --service-install redis.windows.conf --loglevel verbose --service-name 服務名稱
5、打開服務,啟動兩個從服務並設置為自動啟動
2、測試
在主服務下,用server-cli輸入設置值,
redis-cli.exe -h 127.0.0.1 -p 6379
在從服務下,獲取。
redis-cli.exe -h 127.0.0.1 -p 6380
3、C#中調用
主從架構的Redis的讀寫其實和單台Redis 的讀寫差不多,只是部分配置和讀取區分了主從。
需要注意的是:ServiceStack.Redis 中GetClient()方法,只能拿到Master redis中獲取連接,而拿不到slave 的readonly連接。這樣 slave起到了冗余備份的作用,讀的功能沒有發揮出來,如果並發請求太多的話,則Redis的性能會有影響。
所以,我們需要的寫入和讀取的時候做一個區分,寫入的時候,調用client.GetClient() 來獲取writeHosts的Master的redis 鏈接。讀取,則調用client.GetReadOnlyClient()來獲取的readonlyHost的 Slave的redis鏈接。
或者可以直接使用client.GetCacheClient() 來獲取一個連接,他會在寫的時候調用GetClient獲取連接,讀的時候調用GetReadOnlyClient獲取連接,這樣可以做到讀寫分離,從而利用redis的主從復制功能。
遇到的問題
1、Redis 服務無法啟動,錯誤 1067 進程意外終止
可以看下服務屬性,如果是網絡服務,修改為本地系統服務即可啟動!
【有可能的情況是 其他應用安裝了此服務導致,eg,docker】
2、**System.TimeoutException:** 'Redis Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use.
翻譯:Redis超時已過期。 從池中獲取連接之前已經過超時時間, 這可能是因為所有池化連接都在使用中。
可能的原因:
連接沒有及時釋放。
eg:var r = pool.GetClient(); 改為
using (var r = pool.GetClient())
{
}