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;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.