public ResponseData DoHash(RequestType type, string id, string key, string value) { id.KeyCheck(); key.KeyCheck(); var cmd = RedisCoder.Coder(type, type.ToString(), id, key, value); Request(cmd); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoHash, type, id, key, value)); } else { return(result); } }
/// <summary> /// 用于可以迁移的命令 /// </summary> /// <param name="type"></param> /// <param name="key"></param> /// <returns></returns> public ResponseData DoWithKey(RequestType type, string key) { lock (_syncLocker) { key.KeyCheck(); RedisCoder.Coder(type, type.ToString(), key); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoWithKey, type, key)); } else { return(result); } } }
public Task DoExpireInsertAsync(RequestType type, string key, string value, int seconds) { return(TaskHelper.Run(() => { lock (_syncLocker) { key.KeyCheck(); RedisCoder.Coder(type, type.ToString(), key, value); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { OnRedirect.Invoke(result.Data, OperationType.DoExpireInsert, key, value, seconds); return; } RedisCoder.Coder(RequestType.EXPIRE, string.Format("{0} {1} {2}", type.ToString(), key, seconds)); RedisCoder.Decoder(); } })); }
/// <summary> /// 发送命令 /// </summary> /// <param name="cmd"></param> public ResponseData Do(RequestType type) { var cmd = RedisCoder.Coder(type, type.ToString()); Request(cmd); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.Do, null)); } else if (result.Type == ResponseType.Error) { throw new Exception(result.Data); } else { return(result); } }
public async Task <ResponseData> DoRangAsync(RequestType type, string key, double begin, double end, TimeSpan timeSpan) { return(await TaskHelper.Run(() => { lock (_syncLocker) { key.KeyCheck(); RedisCoder.Coder(type, type.ToString(), key, begin.ToString(), end.ToString(), "WITHSCORES"); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoRang, type, key, begin, end); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }
public async Task <ResponseData> DoWithMutiParamsAsync(RequestType type, TimeSpan timeSpan, params string[] keys) { return(await TaskHelper.Run(() => { lock (_syncLocker) { keys.KeyCheck(); RedisCoder.Coder(type, type.ToString(), keys); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithParams, type, keys); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }
public async Task <ResponseData> DoWithKeyValueAsync(RequestType type, string key, string value, TimeSpan timeSpan) { return(await TaskHelper.Run(() => { lock (_syncLocker) { key.KeyCheck(); RedisCoder.Coder(type, type.ToString(), key, value); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoWithKeyValue, type, key, value); } else { return result; } } }).WithCancellationTimeout(timeSpan)); }
public void DoExpire(RequestType type, string key, string value, int seconds) { lock (_syncLocker) { var cmd = _redisCoder.Coder(type, type.ToString(), key, value); _cnn.Send(cmd); var result = _redisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { _cnn = OnRedirect.Invoke(result.Data); _redisCoder = _cnn.RedisCoder; cmd = _redisCoder.Coder(type, type.ToString(), key, value); _cnn.Send(cmd); _redisCoder.Decoder(); } cmd = _redisCoder.Coder(RequestType.EXPIRE, string.Format("{0} {1} {2}", type.ToString(), key, seconds)); _cnn.Send(cmd); _redisCoder.Decoder(); } }
public ResponseData DoBatchWithIDKeys(RequestType type, string id, params string[] keys) { List <string> list = new List <string>(); list.Add(type.ToString()); list.Add(id); list.AddRange(keys); var cmd = RedisCoder.Coder(type, list.ToArray()); Request(cmd); var result = RedisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDKeys, type, id, keys)); } else { return(result); } }
/// <summary> /// 发送, /// 命令行模式 /// </summary> /// <param name="cmd"></param> /// <returns></returns> internal ResponseData RequestWithConsole(string cmd) { 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)) { var sendData = RedisCoder.Coder(requestType, @params); Request(sendData); 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); }
/// <summary> /// 用于不会迁移的命令 /// </summary> /// <param name="type"></param> /// <param name="content"></param> /// <returns></returns> public ResponseData DoWithOne(RequestType type, string content) { content.KeyCheck(); RedisCoder.Coder(type, type.ToString(), content); return(RedisCoder.Decoder()); }
public ResponseData Do(RequestType type) { lock (_syncLocker) { var cmd = _redisCoder.Coder(type, string.Format("{0}", type.ToString())); _cnn.Send(cmd); var result = _redisCoder.Decoder(); if (result.Type == ResponseType.Redirect) { _cnn = OnRedirect.Invoke(result.Data); _redisCoder = _cnn.RedisCoder; return(Do(type)); } else if (result.Type == ResponseType.Error) { throw new Exception(result.Data); } else { return(result); } } }
public ResponseData Do(RequestType type) { lock (_syncLocker) { var cmd = _redisCoder.Coder(type, string.Format("{0}", type.ToString())); _cnn.Send(cmd); return(_redisCoder.Decoder()); } }