Exemple #1
0
 public Task DoExpireAtAsync(string key, int timestamp)
 {
     return(TaskHelper.Run(() =>
     {
         lock (_syncLocker)
         {
             key.KeyCheck();
             RedisCoder.Coder(RequestType.EXPIREAT, RequestType.EXPIREAT.ToString(), key, timestamp.ToString());
             var result = RedisCoder.Decoder();
             if (result.Type == ResponseType.Redirect)
             {
                 OnRedirect.Invoke(result.Data, OperationType.DoExpireAt, key, timestamp);
                 return;
             }
         }
     }));
 }
Exemple #2
0
        public ResponseData DoBatchWithParams(RequestType type, params string[] keys)
        {
            keys.KeyCheck();
            var cmd = RedisCoder.Coder(type, type.ToString(), keys);

            Request(cmd);
            var result = RedisCoder.Decoder();

            if (result.Type == ResponseType.Redirect)
            {
                return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithParams, type, keys));
            }
            else
            {
                return(result);
            }
        }
Exemple #3
0
 public ResponseData DoBatchWithIDDic(RequestType type, string id, Dictionary <string, string> dic)
 {
     lock (_syncLocker)
     {
         id.KeyCheck();
         RedisCoder.CoderForDicWidthID(type, id, dic);
         var result = RedisCoder.Decoder();
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDDic, type, id, dic));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #4
0
 public ResponseData DoRang(RequestType type, string key, double begin = 0, double end = -1)
 {
     lock (_syncLocker)
     {
         key.KeyCheck();
         RedisCoder.Request(type, key, begin.ToString(), end.ToString(), "WITHSCORES");
         var result = RedisCoder.Decoder(type);
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoRang, type, key, begin, end));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #5
0
        public ResponseData DoWithKeyValue(RequestType type, string key, string value)
        {
            key.KeyCheck();
            var cmd = RedisCoder.Coder(type, type.ToString(), key, value);

            Request(cmd);
            var result = RedisCoder.Decoder();

            if (result.Type == ResponseType.Redirect)
            {
                return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoWithKeyValue, type, key, value));
            }
            else
            {
                return(result);
            }
        }
Exemple #6
0
        /// <summary>
        /// SCAN
        /// </summary>
        /// <param name="type"></param>
        /// <param name="offset"></param>
        /// <param name="pattern"></param>
        /// <param name="count"></param>
        /// <returns></returns>

        public ScanResponse DoScan(RequestType type, int offset = 0, string pattern = "*", int count = -1)
        {
            lock (_syncLocker)
            {
                if (offset < 0)
                {
                    offset = 0;
                }

                if (!string.IsNullOrEmpty(pattern))
                {
                    if (count > -1)
                    {
                        RedisCoder.Request(type, offset.ToString(), RedisConst.MATCH, pattern, RedisConst.COUNT, count.ToString());
                    }
                    else
                    {
                        RedisCoder.Request(type, offset.ToString(), RedisConst.MATCH, pattern);
                    }
                }
                else
                {
                    if (count > -1)
                    {
                        RedisCoder.Request(type, offset.ToString(), RedisConst.COUNT, count.ToString());
                    }
                    else
                    {
                        RedisCoder.Request(type, offset.ToString());
                    }
                }
                var result = RedisCoder.Decoder(type);
                if (result.Type == ResponseType.Redirect)
                {
                    return((ScanResponse)OnRedirect.Invoke(result.Data, OperationType.DoScan, type, offset, pattern, count));
                }
                else
                {
                    if (result.Type == ResponseType.Lines)
                    {
                        return(result.ToScanResponse());
                    }
                    return(null);
                }
            }
        }
Exemple #7
0
 public ResponseData DoWithMutiParams(RequestType type, params string[] keys)
 {
     lock (_syncLocker)
     {
         keys.KeyCheck();
         RedisCoder.Request(type, keys);
         var result = RedisCoder.Decoder(type);
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithParams, type, keys));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #8
0
 public ResponseData DoHash(RequestType type, string id, string key, string value)
 {
     lock (_syncLocker)
     {
         id.KeyCheck();
         key.KeyCheck(); RedisCoder.Coder(type, type.ToString(), id, key, value);
         var result = RedisCoder.Decoder();
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoHash, type, id, key, value));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #9
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.Request(type, key);
         var result = RedisCoder.Decoder(type);
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoWithKey, type, key));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #10
0
 public ResponseData DoRangByScore(RequestType type, string key, double min = double.MinValue, double max = double.MaxValue, RangType rangType = RangType.None, long offset = -1, int count = 20, bool withScore = false)
 {
     lock (_syncLocker)
     {
         key.KeyCheck();
         RedisCoder.CoderForRandByScore(type, key, min, max, rangType, offset, count, withScore);
         var result = RedisCoder.Decoder();
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoRangByScore, type, key, min, max, rangType, offset, count, withScore));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #11
0
        public void DoExpireInsert(RequestType type, string key, string value, int seconds)
        {
            key.KeyCheck();
            var cmd = RedisCoder.Coder(type, type.ToString(), key, value);

            Request(cmd);
            var result = RedisCoder.Decoder();

            if (result.Type == ResponseType.Redirect)
            {
                OnRedirect.Invoke(result.Data, OperationType.DoExpireInsert, key, value, seconds);
                return;
            }
            cmd = RedisCoder.Coder(RequestType.EXPIRE, string.Format("{0} {1} {2}", type.ToString(), key, seconds));
            Request(cmd);
            RedisCoder.Decoder();
        }
Exemple #12
0
        public ResponseData DoRang(RequestType type, string id, double begin = 0, double end = -1)
        {
            id.KeyCheck();
            var cmd = RedisCoder.Coder(type, type.ToString(), id, begin.ToString(), end.ToString(), "WITHSCORES");

            Request(cmd);
            var result = RedisCoder.Decoder();

            if (result.Type == ResponseType.Redirect)
            {
                return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoRang, type, id, begin, end));
            }
            else
            {
                return(result);
            }
        }
Exemple #13
0
        public ResponseData DoBatchWithIDKeys(RequestType type, string id, params string[] keys)
        {
            id.KeyCheck();
            keys.KeyCheck();

            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        List <string> list = new List <string>();
                        list.Add(type.ToString());
                        list.Add(id);
                        list.AddRange(keys);
                        RedisCoder.RequestOnlyParams(list.ToArray());
                        var sresult = RedisCoder.Decoder(type, token);
                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(sresult.Data, OperationType.DoBatchWithIDKeys, type, id, keys));
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemple #14
0
 public async Task <ResponseData> DoBatchWithDicAsync(RequestType type, Dictionary <string, string> dic, TimeSpan timeSpan)
 {
     return(await TaskHelper.Run(() =>
     {
         lock (_syncLocker)
         {
             RedisCoder.CoderForDic(type, dic);
             var result = RedisCoder.Decoder();
             if (result.Type == ResponseType.Redirect)
             {
                 return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithDic, type, dic);
             }
             else
             {
                 return result;
             }
         }
     }).WithCancellationTimeout(timeSpan));
 }
Exemple #15
0
 public ResponseData Do(RequestType type, string id, double begin = 0, double end = -1)
 {
     lock (_syncLocker)
     {
         var cmd = _redisCoder.Coder(type, type.ToString(), id, begin.ToString(), end.ToString(), "WITHSCORES");
         _cnn.Send(cmd);
         var result = _redisCoder.Decoder();
         if (result.Type == ResponseType.Redirect)
         {
             _cnn        = OnRedirect.Invoke(result.Data);
             _redisCoder = _cnn.RedisCoder;
             return(Do(type, id, begin, end));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #16
0
 public async Task <ResponseData> DoBatchWithListAsync(RequestType type, string id, IEnumerable <string> list, TimeSpan timeSpan)
 {
     return(await TaskHelper.Run(() =>
     {
         lock (_syncLocker)
         {
             RedisCoder.CoderForList(type, id, list);
             var result = RedisCoder.Decoder();
             if (result.Type == ResponseType.Redirect)
             {
                 return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithList, type, list);
             }
             else
             {
                 return result;
             }
         }
     }).WithCancellationTimeout(timeSpan));
 }
Exemple #17
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();
         }
     }));
 }
Exemple #18
0
 public ResponseData Do(RequestType type, string key, string value)
 {
     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;
             return(Do(type, key, value));
         }
         else
         {
             return(result);
         }
     }
 }
Exemple #19
0
 /// <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));
 }
Exemple #20
0
        public ResponseData <string> DoBatchWithIDDic(RequestType type, string id, Dictionary <string, string> dic)
        {
            id.KeyCheck();

            ResponseData <string> result = new ResponseData <string>()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                lock (SyncRoot)
                {
                    using (var cts = new CancellationTokenSource(_actionTimeout))
                    {
                        RedisCoder.RequestForDicWidthID(type, id, dic);

                        result = RedisCoder.Decoder <string>(type, cts.Token);

                        if (result != null && result.Type == ResponseType.Redirect)
                        {
                            return((ResponseData <string>)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDDic, type, id, dic));
                        }
                        else
                        {
                            return(result);
                        }
                    }
                }
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemple #21
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);
            }
        }
Exemple #22
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));
 }
Exemple #23
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));
 }
Exemple #24
0
 public async Task <ResponseData> DoRangByScoreAsync(TimeSpan timeSpan, RequestType type, string key, double min = double.MinValue, double max = double.MaxValue, RangType rangType = RangType.None, long offset = -1, int count = 20, bool withScore = false)
 {
     return(await TaskHelper.Run(() =>
     {
         lock (_syncLocker)
         {
             key.KeyCheck();
             RedisCoder.CoderForRandByScore(type, key, min, max, rangType, offset, count, withScore);
             var result = RedisCoder.Decoder();
             if (result.Type == ResponseType.Redirect)
             {
                 return (ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoRangByScore, type, key, min, max, rangType, offset, count, withScore);
             }
             else
             {
                 return result;
             }
         }
     }).WithCancellationTimeout(timeSpan));
 }
Exemple #25
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));
 }
Exemple #26
0
        public ResponseData <string> DoWithID(RequestType type, string id, string key, string value)
        {
            id.KeyCheck();
            key.KeyCheck();

            ResponseData <string> result = new ResponseData <string>()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                lock (SyncRoot)
                {
                    using (var cts = new CancellationTokenSource(_actionTimeout))
                    {
                        RedisCoder.Request(type, id, key, value);
                        var sresult = RedisCoder.Decoder <string>(type, cts.Token);
                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData <string>)OnRedirect.Invoke(sresult.Data, OperationType.DoWithID, type, id, key, value));
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemple #27
0
        public ResponseData DoWithID(RequestType type, string id, string key, string value)
        {
            id.KeyCheck();
            key.KeyCheck();

            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        RedisCoder.Request(type, id, key, value);
                        var sresult = RedisCoder.Decoder(type, token);
                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(sresult.Data, OperationType.DoWithID, type, id, key, value));
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemple #28
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);
            }
        }
Exemple #29
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();
            }
        }
Exemple #30
0
        public ResponseData DoBatchWithIDDic(RequestType type, string id, Dictionary <string, string> dic)
        {
            id.KeyCheck();

            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        RedisCoder.RequestForDicWidthID(type, id, dic);
                        var result = RedisCoder.Decoder(type, token);
                        if (result != null && result.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDDic, type, id, dic));
                        }
                        else
                        {
                            return(result);
                        }
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }