public ResponseData DoMutiCmd(RequestType type, params object[] @params) { lock (_syncLocker) { List <string> list = new List <string>(); var arr = type.ToString().Split("_"); list.AddRange(arr); if (@params != null) { foreach (var item in @params) { list.Add(item.ToString()); } } RedisCoder.CoderByParams(type, list.ToArray()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoCluster, type, @params)); } else if (result.Type == ResponseType.Error) { throw new Exception(result.Data); } else { return(result); } } }
public ResponseData DoClusterSetSlot(RequestType type, string action, int slot, string nodeID) { lock (_syncLocker) { List <string> list = new List <string>(); var arr = type.ToString().Split("_"); list.AddRange(arr); list.Add(slot.ToString()); list.Add(action); list.Add(nodeID); RedisCoder.CoderByParams(type, list.ToArray()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoClusterSetSlot, type, action, slot, nodeID)); } else if (result.Type == ResponseType.Error) { throw new Exception(result.Data); } else { return(result); } } }
public async Task <ResponseData> DoBatchWithIDKeysAsync(TimeSpan timeSpan, RequestType type, string id, params string[] keys) { return(await TaskHelper.Run(() => { lock (_syncLocker) { id.KeyCheck(); keys.KeyCheck(); List <string> list = new List <string>(); list.Add(type.ToString()); list.Add(id); list.AddRange(keys); RedisCoder.CoderByParams(type, list.ToArray()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDKeys, type, id, keys); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }
public void DoSub(string[] channels, Action <string, string> onMsg) { lock (_syncLocker) { List <string> list = new List <string>(); list.Add(RequestType.SUBSCRIBE.ToString()); list.AddRange(channels); var cmd = RedisCoder.CoderByParams(RequestType.SUBSCRIBE, list.ToArray()); Request(cmd); RedisCoder.IsSubed = true; while (RedisCoder.IsSubed) { var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Sub) { var arr = result.Data.ToArray(false, Environment.NewLine); onMsg.Invoke(arr[0], arr[1]); } if (result.Type == ResponseType.UnSub) { break; } } } }
/// <summary> /// 发送, /// 命令行模式 /// </summary> /// <param name="cmd"></param> /// <param name="timeSpan"></param> /// <returns></returns> internal async Task <ResponseData> RequestWithConsoleAsync(string cmd, TimeSpan timeSpan) { return(await TaskHelper.Run(() => { lock (_syncLocker) { ResponseData result = new ResponseData() { Type = ResponseType.Empty, Data = "未知的命令" }; try { if (!string.IsNullOrWhiteSpace(cmd)) { var @params = cmd.Split(" ", StringSplitOptions.RemoveEmptyEntries); if (@params != null && @params.Length > 0) { var redisCmd = @params[0].ToUpper(); if (EnumHelper.GetEnum(redisCmd, out RequestType requestType1)) { RedisCoder.CoderByParams(requestType1, @params); result = RedisCoder.Decoder(); } else { redisCmd = $"{@params[0]}_{@params[1]}".ToUpper(); if (EnumHelper.GetEnum(redisCmd, out RequestType requestType2)) { RedisCoder.CoderByParams(requestType2, @params); result = RedisCoder.Decoder(); } else { result.Type = ResponseType.Error; result.Data = "未知的命令 cmd:" + cmd; } } } } } catch (Exception ex) { result.Type = ResponseType.Error; result.Data = ex.Message; } return result; } }).WithCancellationTimeout(timeSpan)); }
/// <summary> /// 发送命令 /// </summary> /// <param name="cmd"></param> public ResponseData Do(RequestType type) { lock (_syncLocker) { RedisCoder.CoderByParams(type, type.ToString()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.Do, null)); } else { return(result); } } }
/// <summary> /// 发送命令 /// </summary> /// <param name="type"></param> /// <param name="timeSpan"></param> /// <returns></returns> public async Task <ResponseData> DoAsync(RequestType type, TimeSpan timeSpan) { return(await TaskHelper.Run(() => { lock (_syncLocker) { RedisCoder.CoderByParams(type, type.ToString()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.Do, null); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }
/// <summary> /// 发送, /// 命令行模式 /// </summary> /// <param name="cmd"></param> /// <returns></returns> internal ResponseData RequestWithConsole(string cmd) { lock (_syncLocker) { ResponseData result = new ResponseData() { Type = ResponseType.Empty, Data = "未知的命令" }; try { if (!string.IsNullOrWhiteSpace(cmd)) { var @params = cmd.Split(" ", StringSplitOptions.RemoveEmptyEntries); if (@params != null && @params.Length > 0) { var redisCmd = @params[0].ToUpper(); if (EnumHelper.GetEnum(redisCmd, out RequestType requestType)) { RedisCoder.CoderByParams(requestType, @params); result = RedisCoder.Decoder(); } else { result.Type = ResponseType.Error; result.Data = "未知的命令 cmd:" + cmd; } } } } catch (Exception ex) { result.Type = ResponseType.Error; result.Data = ex.Message; } return(result); } }
public ResponseData DoBatchWithIDKeys(RequestType type, string id, params string[] keys) { lock (_syncLocker) { id.KeyCheck(); keys.KeyCheck(); List <string> list = new List <string>(); list.Add(type.ToString()); list.Add(id); list.AddRange(keys); RedisCoder.CoderByParams(type, list.ToArray()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDKeys, type, id, keys)); } else { return(result); } } }
public async Task <ResponseData> DoClusterSetSlotAsync(RequestType type, string action, int slot, string nodeID, TimeSpan timeSpan) { return(await TaskHelper.Run(() => { lock (_syncLocker) { List <string> list = new List <string>(); var arr = type.ToString().Split("_"); list.AddRange(arr); list.Add(slot.ToString()); list.Add(action); list.Add(nodeID); RedisCoder.CoderByParams(type, list.ToArray()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoClusterSetSlot, type, action, slot, nodeID); } else if (result.Type == ResponseType.Error) { throw new Exception(result.Data); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }
public async Task <ResponseData> DoMutiCmdAsync(TimeSpan timeSpan, RequestType type, params object[] @params) { return(await TaskHelper.Run(() => { lock (_syncLocker) { List <string> list = new List <string>(); var arr = type.ToString().Split("_"); list.AddRange(arr); if (@params != null) { foreach (var item in @params) { list.Add(item.ToString()); } } RedisCoder.CoderByParams(type, list.ToArray()); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoCluster, type, @params); } else if (result.Type == ResponseType.Error) { throw new Exception(result.Data); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }