windows快速搭建redis僞集羣(單臺機器)


1.簡述
redis版本需要大於3
集羣6個節點,3個master,3個slave
生產環境的話,建議6個物理機上搭建


2.下載ruby和redis,安裝過程中把複選框都選上


ruby
鏈接: https://pan.baidu.com/s/19JuhBMc9uEai4i3hsdTbsw 密碼: e6je


redis
鏈接: https://pan.baidu.com/s/1d6E56jD11KIwZRloBeVV6Q 密碼: ex4h


redis管理端
鏈接: https://pan.baidu.com/s/18WMQdLiSySDzUEHjDGmpmg 密碼: msrh


3.下載culster目錄,直接放到redis安裝目錄


集羣配置
鏈接: https://pan.baidu.com/s/1Q1lMhINSv13f5LUD16i3xA 密碼: s7ci


4.下載已經寫好的util下的全部bat文件和rb文件,把bat,rb文件全部放在redis目錄下


批處理文件
鏈接: https://pan.baidu.com/s/1OvbM4lOMdgo65CyV6gSbSQ 密碼: c1pm


5.按照順序執行bat文件


install.bat
把6個redis****服務全部啓動
install_module.bat
install_culster.bat
出現   16383 slot  說明分片集羣已經搭建完成


6.集羣客戶端,stackexchange.redis


    public class RedisCulsterHelper
    {
        private ConnectionMultiplexer _connectionMultiplexer;
        private IDatabase _database;


        public RedisCulsterHelper()
        {
            Init();
        }


        private void Init()
        {
            ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1:6379,127.0.0.1:6390,127.0.0.1:6381,connectTimeout=2000");
            _connectionMultiplexer = ConnectionMultiplexer.Connect(configurationOptions);
            _database = _connectionMultiplexer.GetDatabase();
        }


        public bool StringSet(string key, string value)
        {
            return _database.StringSet(key, value);
        }


        public string StringGet(string key)
        {
            RedisValue value = _database.StringGet(key);
            return value.IsNullOrEmpty ? null : value.ToString();
        }


        public bool HashSet(string hashKey,string fieldKey,string fieldValue)
        {
            return _database.HashSet(hashKey, fieldKey, fieldValue);
        }


        public string HashGet(string hashKey, string fieldKey)
        {
            RedisValue value = _database.HashGet(hashKey, fieldKey);
            return value.IsNullOrEmpty ? null : value.ToString();
        }


        public bool StackSet(string listKey, string value)
        {
            return _database.ListRightPush(listKey, value) > 0;
        }


        public string StackGet(string listKey)
        {
            RedisValue value = _database.ListRightPop(listKey);
            return value.IsNullOrEmpty ? null : value.ToString();
        }


        public bool QueueSet(string listKey, string value)
        {
            return _database.ListLeftPush(listKey, value) > 0;
        }


        public string QueueGet(string listKey)
        {
            RedisValue value = _database.ListLeftPop(listKey);
            return value.IsNullOrEmpty ? null : value.ToString();
        }


        public bool SetSet(string setKey,string value)
        {
            return _database.SetAdd(setKey, value);
        }


        public string SetGet(string setKey)
        {
            RedisValue value = _database.SetPop(setKey);
            return value.IsNullOrEmpty ? null : value.ToString();
        }


        public bool SortedSetSet(string setKey, string value,double score = 0)
        {
            return _database.SortedSetAdd(setKey, value, score);
        }


        public string[] SortedSetGet(string setKey,long start,long stop)
        {
            RedisValue[] value = _database.SortedSetRangeByRank(setKey,start,stop,Order.Ascending);
            return value.ToStringArray();
        }
    }


7.非集羣客戶端也可以選擇下面的,servicestack.redis


public class RedisHelper
    {
        private IRedisClient _redisClient;
        private IRedisClient _readonlyRedisClient;


        /// <summary>
        /// redis
        /// </summary>
        /// <param name="readWriteHosts">redis://clientid:password@localhost:6380?ssl=true&db=1</param>
        /// <param name="readOnlyHosts">redis://clientid:password@localhost:6380?ssl=true&db=1</param>
        public RedisHelper(string[] readWriteHosts, string[] readOnlyHosts = null)
        {
            if (readOnlyHosts == null)
            {
                readOnlyHosts = readWriteHosts;
            }
            InitConfig(readWriteHosts, readOnlyHosts);
        }


        private void InitConfig(string[] readWriteHosts,string[] readOnlyHosts)
        {
            RedisClientManagerConfig config = new RedisClientManagerConfig()
            {
                MaxWritePoolSize = 1000,
                MaxReadPoolSize = 1000,
                AutoStart = true,
                DefaultDb = 0
            };
            PooledRedisClientManager pooledRedisClientManager =new PooledRedisClientManager(readWriteHosts, readOnlyHosts, config)
            {
                SocketSendTimeout = 3 * 1000,
                SocketReceiveTimeout = 3 * 1000
            };
            _redisClient = pooledRedisClientManager.GetClient();
            _readonlyRedisClient = pooledRedisClientManager.GetClient();
        }


        public bool SetString(string key,string value,DateTime dateTime)
        {
            return _redisClient.Set(key, value, dateTime);
        }


        public T GetString<T>(string key)
        {
            return _readonlyRedisClient.Get<T>(key);
        }


        public void DeleteString(string key)
        {
            _redisClient.Delete(key);
        }


        public bool SetHash(string hashId,string key,string value)
        {
            return _redisClient.SetEntryInHash(hashId, key, value);
        }


        public Dictionary<string,string> GetHash(string hashId)
        {
            return _readonlyRedisClient.GetAllEntriesFromHash(hashId);
        }


        public void SetStack(string stackId,string value)
        {
            _redisClient.PushItemToList(stackId,value);
        }


        public string GetStack(string stackId)
        {
            return _readonlyRedisClient.PopItemFromList(stackId);
        }


        public void SetQueue(string queueId, string value)
        {
            _redisClient.EnqueueItemOnList(queueId, value);
        }


        public string GetQueue(string queueId)
        {
            return _readonlyRedisClient.DequeueItemFromList(queueId);
        }


        public void SetSet(string setId, string value)
        {
            _redisClient.AddItemToSet(setId, value);
        }


        public HashSet<string> GetSet(string setId)
        {
            return _readonlyRedisClient.GetAllItemsFromSet(setId);
        }


        public bool SetSortedSet(string sortedSetId, string value,double score = 0)
        {
            return _redisClient.AddItemToSortedSet(sortedSetId, value, score);
        }


        public List<string> GetSortedSet(string sortedSetId)
        {
            return _readonlyRedisClient.GetAllItemsFromSortedSet(sortedSetId);
        }


        /// <summary>
        /// 執行鎖操作
        /// </summary>
        /// <param name="command"></param>
        /// <param name="lockKey"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public bool ExecuteLock(Func<IRedisClient, bool> command,string lockKey,int timeout = 3)
        {
            using (_redisClient.AcquireLock(lockKey, new TimeSpan(0,0,0,timeout)))
            {
                command(_redisClient);
            }
            return true;
        }


        /// <summary>
        /// 執行事務
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>    
        public bool ExecuteTransaction(Func<IRedisClient,bool> command)
        {
            using (IRedisTransaction transaction = _redisClient.CreateTransaction())
            {
                transaction.QueueCommand(command);
                transaction.Commit();
            }
            return true;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章