Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        /// <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);
                }
            }
        }
Beispiel #3
0
 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();
         }
     }));
 }
Beispiel #4
0
        /// <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);
            }
        }
Beispiel #5
0
 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));
 }
Beispiel #6
0
 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));
 }
Beispiel #7
0
 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));
 }
Beispiel #8
0
        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();
            }
        }
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
 /// <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());
 }
Beispiel #12
0
 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);
         }
     }
 }
Beispiel #13
0
 public ResponseData Do(RequestType type)
 {
     lock (_syncLocker)
     {
         var cmd = _redisCoder.Coder(type, string.Format("{0}", type.ToString()));
         _cnn.Send(cmd);
         return(_redisCoder.Decoder());
     }
 }