Пример #1
0
 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.Coder(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;
             }
         }
     }
 }
Пример #2
0
        public ResponseData DoInOne(RequestType type, string content)
        {
            var cmd = RedisCoder.Coder(type, type.ToString(), content);

            Request(cmd);
            return(RedisCoder.Decoder());
        }
Пример #3
0
        /// <summary>
        /// 用于不会迁移的命令
        /// </summary>
        /// <param name="type"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public ResponseData <string> DoWithOne(RequestType type, string content)
        {
            content.KeyCheck();
            ResponseData <string> result = new ResponseData <string>()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                lock (SyncRoot)
                {
                    using (var cts = new CancellationTokenSource(_actionTimeout))
                    {
                        RedisCoder.Request(type, content);
                        return(RedisCoder.Decoder <string>(type, cts.Token));
                    }
                }
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Пример #4
0
        public void DoSub(string[] channels, Action <string, string> onMsg)
        {
            lock (_syncLocker)
            {
                RedisCoder.Request(RequestType.SUBSCRIBE, channels);
                RedisCoder.IsSubed = true;

                TaskHelper.Run(() =>
                {
                    while (RedisCoder.IsSubed)
                    {
                        var result = RedisCoder.Decoder(RequestType.SUBSCRIBE);
                        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;
                        }
                    }
                });
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 用于不会迁移的命令
        /// </summary>
        /// <param name="type"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public ResponseData DoWithOne(RequestType type, string content)
        {
            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        content.KeyCheck();
                        RedisCoder.Request(type, content);
                        return(RedisCoder.Decoder(type, token));
                    }
                }, _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);
        }
Пример #7
0
        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);
                }
            }
        }
Пример #8
0
        public void DoSub(string[] channels, Action <string, string> onMsg)
        {
            RedisCoder.Request(RequestType.SUBSCRIBE, channels);

            RedisCoder.IsSubed = true;

            TaskHelper.Run(() =>
            {
                lock (SyncRoot)
                {
                    while (RedisCoder.IsSubed)
                    {
                        var result = RedisCoder.Decoder(RequestType.SUBSCRIBE, System.Threading.CancellationToken.None);
                        if (result != null && result.Type == ResponseType.Sub)
                        {
                            var arr = result.Data.ToArray(false, Environment.NewLine);
                            onMsg.Invoke(arr[0], arr[1]);
                        }
                        else if (result != null && result.Type == ResponseType.UnSub)
                        {
                            break;
                        }
                    }
                }
            });
        }
Пример #9
0
        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));
        }
Пример #10
0
 public ResponseData DoInOne(RequestType type, string content)
 {
     lock (_syncLocker)
     {
         RedisCoder.Coder(type, type.ToString(), content);
         return(RedisCoder.Decoder());
     }
 }
Пример #11
0
        public ResponseData <string> DoMutiCmd(RequestType type, params object[] @params)
        {
            ResponseData <string> result = new ResponseData <string>()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                lock (SyncRoot)
                {
                    using (var cts = new CancellationTokenSource(_actionTimeout))
                    {
                        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.RequestOnlyParams(list.ToArray());

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

                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData <string>)OnRedirect.Invoke(sresult.Data, OperationType.DoCluster, type, @params));
                        }
                        else if (sresult.Type == ResponseType.Error)
                        {
                            throw new Exception(sresult.Data);
                        }
                        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);
        }
Пример #12
0
        /// <summary>
        /// Others Scan
        /// </summary>
        /// <param name="type"></param>
        /// <param name="key"></param>
        /// <param name="offset"></param>
        /// <param name="pattern"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public ScanResponse DoScanKey(RequestType type, string key, int offset = 0, string pattern = "*", int count = -1)
        {
            key.KeyCheck();

            return(TaskHelper.Run((token) =>
            {
                lock (SyncRoot)
                {
                    if (offset < 0)
                    {
                        offset = 0;
                    }

                    if (!string.IsNullOrEmpty(pattern))
                    {
                        if (count > -1)
                        {
                            RedisCoder.Request(type, key, offset.ToString(), RedisConst.MATCH, pattern, RedisConst.COUNT, count.ToString());
                        }
                        else
                        {
                            RedisCoder.Request(type, key, offset.ToString(), RedisConst.MATCH, pattern);
                        }
                    }
                    else
                    {
                        if (count > -1)
                        {
                            RedisCoder.Request(type, key, offset.ToString(), RedisConst.COUNT, count.ToString());
                        }
                        else
                        {
                            RedisCoder.Request(type, key, offset.ToString());
                        }
                    }

                    var result = RedisCoder.Decoder(type, token);

                    if (result == null)
                    {
                        return null;
                    }

                    if (result.Type == ResponseType.Redirect)
                    {
                        return (ScanResponse)OnRedirect.Invoke(result.Data, OperationType.DoScanKey, type, key, offset, pattern, count);
                    }
                    else
                    {
                        if (result.Type == ResponseType.Lines)
                        {
                            return result.ToScanResponse();
                        }
                        return null;
                    }
                }
            }, _actionTimeout).Result);
        }
Пример #13
0
        /// <summary>
        /// Others Scan
        /// </summary>
        /// <param name="type"></param>
        /// <param name="key"></param>
        /// <param name="offset"></param>
        /// <param name="pattern"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public ScanResponse DoScanKey(RequestType type, string key, int offset = 0, string pattern = "*", int count = -1)
        {
            key.KeyCheck();
            lock (SyncRoot)
            {
                using (var cts = new CancellationTokenSource(_actionTimeout))
                {
                    if (offset < 0)
                    {
                        offset = 0;
                    }

                    if (!string.IsNullOrEmpty(pattern))
                    {
                        if (count > -1)
                        {
                            RedisCoder.Request(type, key, offset.ToString(), RedisConst.MATCH, pattern, RedisConst.COUNT, count.ToString());
                        }
                        else
                        {
                            RedisCoder.Request(type, key, offset.ToString(), RedisConst.MATCH, pattern);
                        }
                    }
                    else
                    {
                        if (count > -1)
                        {
                            RedisCoder.Request(type, key, offset.ToString(), RedisConst.COUNT, count.ToString());
                        }
                        else
                        {
                            RedisCoder.Request(type, key, offset.ToString());
                        }
                    }

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

                    if (result == null)
                    {
                        return(null);
                    }

                    if (result.Type == ResponseType.Redirect)
                    {
                        return((ScanResponse)OnRedirect.Invoke(result.Data, OperationType.DoScanKey, type, key, offset, pattern, count));
                    }
                    else
                    {
                        if (result.Type == ResponseType.Lines)
                        {
                            return(result.ToScanResponse());
                        }
                        return(null);
                    }
                }
            }
        }
Пример #14
0
 /// <summary>
 /// 用于不会迁移的命令
 /// </summary>
 /// <param name="type"></param>
 /// <param name="content"></param>
 /// <returns></returns>
 public ResponseData DoWithOne(RequestType type, string content)
 {
     lock (_syncLocker)
     {
         content.KeyCheck();
         RedisCoder.Request(type, content);
         return(RedisCoder.Decoder(type));
     }
 }
Пример #15
0
        public ResponseData DoClusterSetSlot(RequestType type, string action, int slot, string nodeID)
        {
            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        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.RequestOnlyParams(list.ToArray());

                        var sresult = RedisCoder.Decoder(type, token);

                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(sresult.Data, OperationType.DoClusterSetSlot, type, action, slot, nodeID));
                        }
                        else if (sresult != null && sresult.Type == ResponseType.Error)
                        {
                            throw new Exception(sresult.Data);
                        }
                        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);
        }
Пример #16
0
 /// <summary>
 /// 用于不会迁移的命令
 /// </summary>
 /// <param name="type"></param>
 /// <param name="content"></param>
 /// <param name="timeSpan"></param>
 /// <returns></returns>
 public async Task <ResponseData> DoWithOneAsync(RequestType type, string content, TimeSpan timeSpan)
 {
     return(await TaskHelper.Run(() =>
     {
         lock (_syncLocker)
         {
             content.KeyCheck();
             RedisCoder.Coder(type, type.ToString(), content);
             return RedisCoder.Decoder();
         }
     }).WithCancellationTimeout(timeSpan));
 }
Пример #17
0
        /// <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));
        }
Пример #18
0
        public void DoExpire(string key, int seconds)
        {
            var cmd = RedisCoder.Coder(RequestType.EXPIRE, RequestType.EXPIRE.ToString(), key, seconds.ToString());

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

            if (result.Type == ResponseType.Redirect)
            {
                OnRedirect.Invoke(result.Data, OperationType.DoExpire, key, seconds);
                return;
            }
        }
Пример #19
0
        public async Task <ScanResponse> DoScanKeyAsync(TimeSpan timeSpan, RequestType type, string key, int offset = 0, string pattern = "*", int count = -1)
        {
            return(await TaskHelper.Run(() =>
            {
                lock (_syncLocker)
                {
                    key.KeyCheck();

                    if (offset < 0)
                    {
                        offset = 0;
                    }

                    if (!string.IsNullOrEmpty(pattern))
                    {
                        if (count > -1)
                        {
                            RedisCoder.Coder(type, type.ToString(), key, offset.ToString(), RedisConst.MATCH, pattern, RedisConst.COUNT, count.ToString());
                        }
                        else
                        {
                            RedisCoder.Coder(type, type.ToString(), key, offset.ToString(), RedisConst.MATCH, pattern);
                        }
                    }
                    else
                    {
                        if (count > -1)
                        {
                            RedisCoder.Coder(type, type.ToString(), key, offset.ToString(), RedisConst.COUNT, count.ToString());
                        }
                        else
                        {
                            RedisCoder.Coder(type, type.ToString(), key, offset.ToString());
                        }
                    }
                    var result = RedisCoder.Decoder();
                    if (result.Type == ResponseType.Redirect)
                    {
                        return (ScanResponse)OnRedirect.Invoke(result.Data, OperationType.DoScanKey, type, key, offset, pattern, count);
                    }
                    else
                    {
                        if (result.Type == ResponseType.Lines)
                        {
                            return result.ToScanResponse();
                        }
                        return null;
                    }
                }
            }).WithCancellationTimeout(timeSpan));
        }
Пример #20
0
 public void DoExpire(string key, int seconds)
 {
     lock (_syncLocker)
     {
         key.KeyCheck();
         RedisCoder.Request(RequestType.EXPIRE, key, seconds.ToString());
         var result = RedisCoder.Decoder(RequestType.EXPIRE);
         if (result.Type == ResponseType.Redirect)
         {
             OnRedirect.Invoke(result.Data, OperationType.DoExpire, key, seconds);
             return;
         }
     }
 }
Пример #21
0
 public void DoExpireAt(string key, int timestamp)
 {
     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;
         }
     }
 }
Пример #22
0
        /// <summary>
        /// Others Scan
        /// </summary>
        /// <param name="type"></param>
        /// <param name="key"></param>
        /// <param name="offset"></param>
        /// <param name="pattern"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public ScanResponse DoScanKey(RequestType type, string key, int offset = 0, string pattern = "*", int count = -1)
        {
            lock (_syncLocker)
            {
                key.KeyCheck();

                var cmd = "";

                if (offset < 0)
                {
                    offset = 0;
                }

                if (!string.IsNullOrEmpty(pattern))
                {
                    if (count > -1)
                    {
                        RedisCoder.Coder(type, type.ToString(), key, offset.ToString(), RedisConst.MATCH, pattern, RedisConst.COUNT, count.ToString());
                    }
                    else
                    {
                        RedisCoder.Coder(type, type.ToString(), key, offset.ToString(), RedisConst.MATCH, pattern);
                    }
                }
                else
                {
                    if (count > -1)
                    {
                        RedisCoder.Coder(type, type.ToString(), key, offset.ToString(), RedisConst.COUNT, count.ToString());
                    }
                    else
                    {
                        RedisCoder.Coder(type, type.ToString(), key, offset.ToString());
                    }
                }
                var result = RedisCoder.Decoder();
                if (result.Type == ResponseType.Redirect)
                {
                    return((ScanResponse)OnRedirect.Invoke(result.Data, OperationType.DoScanKey, type, key, offset, pattern, count));
                }
                else
                {
                    if (result.Type == ResponseType.Lines)
                    {
                        return(result.ToScanResponse());
                    }
                    return(null);
                }
            }
        }
Пример #23
0
        /// <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 requestType1))
                            {
                                RedisCoder.RequestOnlyParams(@params);
                                result = RedisCoder.Decoder(requestType1);
                            }
                            else
                            {
                                redisCmd = $"{@params[0]}_{@params[1]}".ToUpper();

                                if (EnumHelper.GetEnum(redisCmd, out RequestType requestType2))
                                {
                                    RedisCoder.RequestOnlyParams(@params);
                                    result = RedisCoder.Decoder(requestType2);
                                }
                                else
                                {
                                    result.Type = ResponseType.Error;
                                    result.Data = "未知的命令 cmd:" + cmd;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    result.Type = ResponseType.Error;
                    result.Data = ex.Message;
                }
                return(result);
            }
        }
Пример #24
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)
        {
            var cmd = "";

            if (offset < 0)
            {
                offset = 0;
            }

            if (!string.IsNullOrEmpty(pattern))
            {
                if (count > -1)
                {
                    cmd = RedisCoder.Coder(type, type.ToString(), offset.ToString(), RedisConst.MATCH, pattern, RedisConst.COUNT, count.ToString());
                }
                else
                {
                    cmd = RedisCoder.Coder(type, type.ToString(), offset.ToString(), RedisConst.MATCH, pattern);
                }
            }
            else
            {
                if (count > -1)
                {
                    cmd = RedisCoder.Coder(type, type.ToString(), offset.ToString(), RedisConst.COUNT, count.ToString());
                }
                else
                {
                    cmd = RedisCoder.Coder(type, type.ToString(), offset.ToString());
                }
            }
            Request(cmd);
            var result = RedisCoder.Decoder();

            if (result.Type == ResponseType.Redirect)
            {
                return((ScanResponse)OnRedirect.Invoke(result.Data, OperationType.DoScan, type, offset, pattern, count));
            }
            else
            {
                var scanResponse = new ScanResponse();

                if (result.Type == ResponseType.Lines)
                {
                    return(result.ToScanResponse());
                }
                return(null);
            }
        }
Пример #25
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
            {
                return(result);
            }
        }
Пример #26
0
 public ResponseData DoBatchWithDic(RequestType type, Dictionary <string, string> dic)
 {
     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);
         }
     }
 }
Пример #27
0
 public ResponseData DoBatchWithList(RequestType type, string id, List <string> list)
 {
     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);
         }
     }
 }
Пример #28
0
 public void DoExpireInsert(RequestType type, string key, string value, int seconds)
 {
     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();
     }
 }
Пример #29
0
 /// <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);
         }
     }
 }
Пример #30
0
        public ResponseData DoBatchWithIDDic(RequestType type, string id, Dictionary <double, string> dic)
        {
            var cmd = RedisCoder.CoderForDicWidthID(type, id, dic);

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

            if (result.Type == ResponseType.Redirect)
            {
                return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDDic, type, id, dic));
            }
            else
            {
                return(result);
            }
        }