c#與redis-window下redis集羣安裝

第一步:在Redis下載,因爲redis(官網 https://redis.io/)是在linux上開發出來的,官網上沒有下載windows版本的地址,不過github上有,請按照如圖所示進行下載。node

登陸redis官網https://redis.io/導航到download頁面,並找到下面這段話:linux

Windows

The Redis project does not officially support Windows. However, the Microsoft Open Tech group develops and maintains this Windows port targeting Win64. Learn moregit

大概意思就是redis項目官方並沒支持windows的版本,不過「微軟開源技術團隊」有維護windows版本,而且只支持64位。點擊上方地址進入windows版本的開源。(官方只支持64位版本,若是要32需本身下載源碼編譯)。github

 releases 地址: https://github.com/MSOpenTech/redis/releases              redis

我下的是壓縮文件,解壓後文件以下:json

 

此時能夠進行單機測試,打開redis-server.exe(默認端口爲6379),而後打開redis-cli.exe(客戶端),此時在能夠客戶端上進行get,set操做:c#

第二步,redis Cluster集羣環境安裝(本文的集羣方案採用redis3.0官方自帶的cluster方式部署,3.0以前官方不支持集羣):windows

一、先在上述下載的redis程序集根目錄下建立6個文件夾:7000 7001 7002 7003 7004 7005ruby

二、修改redis.conf文件,分別放到上述文件夾中,且每一個conf的端口號要記的修改(7000~7005),conf內容:服務器

port 7000

cluster-enabled yes

cluster-config-file nodes-7000.conf

cluster-node-timeout 5000

appendonly yes

 

三、啓動上述動6個服務端,爲方便啓動這些 Redis 實例,新建以下 bat 文件:

@echo off
cd c:\Redis
start Redis-Server ./7000/redis.conf
start Redis-Server ./7001/redis.conf
start Redis-Server ./7002/redis.conf
start Redis-Server ./7003/redis.conf
start Redis-Server ./7004/redis.conf
start Redis-Server ./7005/redis.conf

 

4,下載 RubyInstaller
http://rubyinstaller.org/downloads/


安裝時,勾選
Install Td/Tk Support
Add Ruby executables to your PATH
Associate .rb and .rbw files with this Ruby installation

 

5,下載 redis-trib.rb , 放到 c:\redis 目錄下備用
https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb

6,安裝 GEM,Redis 的 ruby 支持環境

點擊 setup.rb 安裝。
 
因爲 GFW的問題, GEM 的源在國內不可用,因此使用鏡像:
 打開cmd依次敲入以下命令:
添加:
gem sources -a  http://gems.ruby-china.org
 
查看已存在的源:
gem sources -l
 
刪除被牆的源:
gem sources -r  https://rubygems.org/
 
安裝 Redis 支持環境:
gem install redis
 
七、開始配置cluster集羣:

打開 cmd , 執行如下命令:
cd c:\redis    (第一步中下載的redis目錄)
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

--replicas 1 即自動分配 Slave , 若是想手動指定 Slave  , 將該值變爲 0 便可, 地址列表中,只須要 3個實例便可。

 

因爲使用的是 6個實例,自動分配 Slave ,因此前3個爲 master , 後3 個爲 slave, 並肯定3個主節點的 slots 範圍。

若是確認沒有問題, 輸入 yes
若是羣集建立成功, 會輸出 OK XXXXX
若是出現:
err slot xxx is already busy, 請刪除 appendonly.aof 及 nodes-xxx.conf (cluster-config-file 所指的文件) 文件

 

八、測試集羣:(注意-c 表示進入的是集羣環境)

redis-cli.exe -c -p 7000

第三步,如今開始使用c# 客戶端訪問集羣

流行的.net客戶端有ServiceStack.Redis 和 StackExchange.Redis,其中 StackExchange.Redis 最新版已經商業化了,爲了不踩坑,本文 StackExchange.Redis+擴展工具StackExchange.Redis.Extensions.Core。

一、建立測試工程。

二、nuget 安裝StackExchange.Redis 和StackExchange.Redis.Extensions.Core.

 StackExchange.Redis.Extensions.Core 支持多種序列化方式:

  • BinarySerialization (Requires SerializableAttribute on top of the class to store into Redis)
  • NewtonSoft (Uses JSon.Net to serialize a class without SerializableAttribute)
  • Jil (Use super fast json serializer)
  • MessagePack CLI (serialization/deserialization for CLI)

本示例使用NewtonSoft,因此繼續nuget: StackExchange.Redis.Extensions.Newtonsoft

 

配置文件設置 cachePort能夠設置爲任意節點的端口號:

<configuration>
  <configSections>
    <section name="redisCacheClient"
           type="StackExchange.Redis.Extensions.Core.Configuration.RedisCachingSectionHandler, StackExchange.Redis.Extensions.Core" />
  </configSections>
  <redisCacheClient allowAdmin="true" ssl="false" connectTimeout="5000" database="0" password="">
    <hosts>
      <add host="127.0.0.1" cachePort="7000"/>
    </hosts>
  </redisCacheClient>
    ..................
</configuration>

開始測試代碼:

  //使用Newtonsoft序列化
            var serializer = new NewtonsoftSerializer();
            var redis = new StackExchangeRedisCacheClient(serializer);
            //獲取服務器信息
            var info = redis.GetInfo();
            foreach (var item in info)
            {
                Console.WriteLine(string.Format("{0}:{1}",item.Key,item.Value));
            }
            redis.Add<User>("UserInfoKey",new User { Name="uucode",Age=30});
            var user= redis.Get<User>("UserInfoKey");

            var userCollection = new List<User>() {
                new User { Name="user1",Age=1},
                new User { Name="user2",Age=2}
            };
            redis.Add<List<User>>("userColl",userCollection);
            var userColl= redis.Get < List<User>>("userColl");
          
            redis.Add("c2", "fdsafdas");
            redis.Add("c3", "fdsafdas");
            redis.Add("c4", "fdsafdas");
            redis.Add("c5", "fdsafdas");
            Console.Read();

 以上全部的文件及源碼點擊此處下載

相關文章
相關標籤/搜索