This class contains all the common operations for the RedisClient. The client contains a 1:1 mapping of c# methods to redis operations of the same name. Not threadsafe use a pooled manager
Inheritance: IRedisNativeClient
        public void DisposeClient(RedisNativeClient client)
        {
            lock (clients)
            {
                for (var i = 0; i < clients.Length; i++)
                {
                    var writeClient = clients[i];
                    if (client != writeClient)
                    {
                        continue;
                    }
                    if (client.IsDisposed)
                    {
                        clients[i] = null;
                    }
                    else
                    {
                        client.Active = false;
                    }

                    Monitor.PulseAll(clients);
                    return;
                }
            }
        }
 /// <summary>
 /// Disposes the write client.
 /// </summary>
 /// <param name="client">The client.</param>
 public void DisposeWriteClient(RedisNativeClient client)
 {
     lock (clients)
     {
         client.Active = false;
     }
 }
 /// <summary>
 /// Disposes the write client.
 /// </summary>
 /// <param name="client">The client.</param>
 public void DisposeWriteClient(RedisNativeClient client)
 {
     lock (writeClients)
     {
         client.Deactivate();
         PulseAllWrite();
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Disposes the write client.
 /// </summary>
 /// <param name="client">The client.</param>
 public void DisposeWriteClient(RedisNativeClient client)
 {
     lock (writeClients)
     {
         client.Active = false;
         Monitor.PulseAll(writeClients);
     }
 }
 /// <summary>
 /// Disposes the read only client.
 /// </summary>
 /// <param name="client">The client.</param>
 public void DisposeReadOnlyClient(RedisNativeClient client)
 {
     lock (readClients)
     {
         client.Deactivate();
         PulseAllRead();
     }
 }
Exemplo n.º 6
0
 /// <summary>
 /// Disposes the read only client.
 /// </summary>
 /// <param name="client">The client.</param>
 public void DisposeReadOnlyClient(RedisNativeClient client)
 {
     lock (readClients)
     {
         client.Active = false;
         Monitor.PulseAll(readClients);
     }
 }
Exemplo n.º 7
0
        public void DisposeClient(RedisNativeClient client)
        {
            lock (readClients)
            {
                for (var i = 0; i < readClients.Length; i++)
                {
                    var readClient = readClients[i];
                    if (client != readClient)
                    {
                        continue;
                    }
                    if (client.IsDisposed)
                    {
                        readClients[i] = null;
                    }
                    else
                    {
                        client.TrackThread = null;
                        client.Active      = false;
                    }

                    Monitor.PulseAll(readClients);
                    return;
                }
            }

            lock (writeClients)
            {
                for (var i = 0; i < writeClients.Length; i++)
                {
                    var writeClient = writeClients[i];
                    if (client != writeClient)
                    {
                        continue;
                    }
                    if (client.IsDisposed)
                    {
                        writeClients[i] = null;
                    }
                    else
                    {
                        client.TrackThread = null;
                        client.Active      = false;
                    }

                    Monitor.PulseAll(writeClients);
                    return;
                }
            }

            //Client not found in any pool, pulse both pools.
            lock (readClients)
                Monitor.PulseAll(readClients);
            lock (writeClients)
                Monitor.PulseAll(writeClients);
        }
Exemplo n.º 8
0
 public static void RedisIncrement()
 {
     using (IRedisNativeClient nrc = new RedisNativeClient())
     {
         nrc.Del("Increment");
         for (int i = 0; i < iterations; i++)
         {
             nrc.Incr("Increment");
         }
     }
 }
Exemplo n.º 9
0
 public void DisposeClient(RedisNativeClient client)
 {
     lock (clients)
     {
         for (var i = 0; i < clients.Length; i++)
         {
             var writeClient = clients[i];
             if (client != writeClient)
             {
                 continue;
             }
             client.Active = false;
             return;
         }
     }
 }
Exemplo n.º 10
0
        public void DisposeClient(RedisNativeClient client)
        {
            lock (readClients)
            {
                for (var i = 0; i < readClients.Length; i++)
                {
                    var readClient = readClients[i];
                    if (client != readClient)
                    {
                        continue;
                    }
                    client.Active = false;
                    Monitor.PulseAll(readClients);
                    return;
                }
            }

            lock (writeClients)
            {
                for (var i = 0; i < writeClients.Length; i++)
                {
                    var writeClient = writeClients[i];
                    if (client != writeClient)
                    {
                        continue;
                    }
                    client.Active = false;
                    Monitor.PulseAll(writeClients);
                    return;
                }
            }

            //Console.WriteLine("Couldn't find {0} client with Id: {1}, readclients: {2}, writeclients: {3}",
            //    client.IsDisposed ? "Disposed" : "Undisposed",
            //    client.Id,
            //    string.Join(", ", readClients.ToList().ConvertAll(x => x != null ? x.Id.ToString() : "").ToArray()),
            //    string.Join(", ", writeClients.ToList().ConvertAll(x => x != null ? x.Id.ToString() : "").ToArray()));

            if (client.IsDisposed)
            {
                return;
            }

            throw new NotSupportedException("Cannot add unknown client back to the pool");
        }
		/// <summary>
		/// Disposes the read only client.
		/// </summary>
		/// <param name="client">The client.</param>
		public void DisposeReadOnlyClient( RedisNativeClient client )
		{
			lock( readClients )
			{
				client.Active = false;
				Monitor.PulseAll( readClients );
			}
		}
        public void DisposeClient(RedisNativeClient client)
        {
            lock (readClients)
            {
                for (var i = 0; i < readClients.Length; i++)
                {
                    var readClient = readClients[i];
                    if (client != readClient) continue;
                    client.Active = false;
                    Monitor.PulseAll(readClients);
                    return;
                }
            }

            lock (writeClients)
            {
                for (var i = 0; i < writeClients.Length; i++)
                {
                    var writeClient = writeClients[i];
                    if (client != writeClient) continue;
                    client.Active = false;
                    Monitor.PulseAll(writeClients);
                    return;
                }
            }

            //Client not found in any pool, pulse both pools.
            lock (readClients)
                Monitor.PulseAll(readClients);
            lock (writeClients)
                Monitor.PulseAll(writeClients);
        }
 public ExpectStringCommand(RedisNativeClient client) : base(client)
 {
 }
 public ExpectDoubleCommand(RedisNativeClient client) : base(client)
 {
 }
 public ExpectMultiDataCommand(RedisNativeClient client) : base(client)
 {
 }
 /// <summary>
 /// Disposes the write client.
 /// </summary>
 /// <param name="client">The client.</param>
 public void DisposeWriteClient(RedisNativeClient client)
 {
     lock (clients)
     {
         client.Active = false;
     }
 }
        public void Benchmark_SET_raw_bytes_1k_ServiceStack()
        {
            var redis = new RedisNativeClient();

            Run("ServiceStack.Redis 1K", 1000,
                (i, bytes) => redis.Set("eitan" + i.ToString(), bytes));
        }
Exemplo n.º 18
0
        Task<IRedisNativeClient> ConnectClient()
        {
            _logger.ToDebugLog(string.Format("Connecting to the locking node {0}:{1}...", _node.Host, _node.Port));

            var connection = new RedisNativeClient(_node.Host, (int)_node.Port)
                {
                    ConnectTimeout = (int)_node.ConnectTimeoutMillis,
                    SendTimeout = (int)_node.SyncOperationsTimeoutMillis,
                    ReceiveTimeout = (int)_node.SyncOperationsTimeoutMillis
                };

            _logger.ToDebugLog(string.Format("Connected to the locking node {0}:{1}", _node.Host, _node.Port));

            return connection.FromResult<IRedisNativeClient>();
        }
 public ExpectDoubleCommand(RedisNativeClient client) : base(client)
 {
 }
 public ExpectIntCommand(RedisNativeClient client) : base(client)
 {
 }
 public ExpectSuccessCommand(RedisNativeClient client) : base(client)
 {
 }
 public PipelineCommand(RedisNativeClient client)
 {
     client_ = client;
 }
		/// <summary>
		/// Disposes the write client.
		/// </summary>
		/// <param name="client">The client.</param>
		public void DisposeWriteClient( RedisNativeClient client )
		{
			lock( writeClients )
			{
				client.Active = false;
				Monitor.PulseAll( writeClients );
			}
		}
		public RedisPipelineCommand(RedisNativeClient client)
		{
			this.client = client;
		}
        public void Run(string name, int nBlockSizeBytes, Action<int, byte[]> fn)
        {
            Stopwatch sw;
            long ms1, ms2, interval;
            int nBytesHandled = 0;
            int nMaxIterations = 5;
            byte[] pBuffer = new byte[nBlockSizeBytes];

            // Create Redis Wrapper
            var redis = new RedisNativeClient();

            // Clear DB
            redis.FlushAll();

            sw = Stopwatch.StartNew();
            ms1 = sw.ElapsedMilliseconds;
            for (int i = 0; i < nMaxIterations; i++)
            {
                fn(i, pBuffer);
                nBytesHandled += nBlockSizeBytes;
            }

            ms2 = sw.ElapsedMilliseconds;
            interval = ms2 - ms1;

            // Calculate rate
            double dMBPerSEc = nBytesHandled / 1024.0 / 1024.0 / (interval / 1000.0);
            Console.WriteLine(name + ": Rate {0:N4}, Total: {1}ms", dMBPerSEc, ms2);
        }
 public ExpectStringCommand(RedisNativeClient client) : base(client)
 {
 }
        public void DisposeClient(RedisNativeClient client)
        {
            lock (clients)
            {
                for (var i = 0; i < clients.Length; i++)
                {
                    var writeClient = clients[i];
                    if (client != writeClient) continue;
                    if (client.IsDisposed)
                    {
                        clients[i] = null;
                    }
                    else
                    {
                        client.Active = false;
                    }

                    Monitor.PulseAll(clients);
                    return;
                }
            }
        }
 public ExpectIntCommand(RedisNativeClient client) : base(client)
 {
 }
 public ExpectWordCommand(RedisNativeClient client, string word)
     : base(client)
 {
     word_ = word;
 }
 public ExpectWordCommand(RedisNativeClient client, string word)
     : base(client)
 {
     word_ = word;
 }
 public ExpectMultiDataCommand(RedisNativeClient client) : base(client)
 {
 }
 public PipelineCommand(RedisNativeClient client)
 {
     client_ = client;
 }
		public void DisposeClient(RedisNativeClient client)
		{
			lock (readClients)
			{
				for (var i = 0; i < readClients.Length; i++)
				{
					var readClient = readClients[i];
					if (client != readClient) continue;
					client.Active = false;
					Monitor.PulseAll(readClients);
					return;
				}
			}

			lock (writeClients)
			{
				for (var i = 0; i < writeClients.Length; i++)
				{
					var writeClient = writeClients[i];
					if (client != writeClient) continue;
					client.Active = false;
					Monitor.PulseAll(writeClients);
					return;
				}
			}
			
			//Console.WriteLine("Couldn't find {0} client with Id: {1}, readclients: {2}, writeclients: {3}",
			//    client.IsDisposed ? "Disposed" : "Undisposed",
			//    client.Id,
			//    string.Join(", ", readClients.ToList().ConvertAll(x => x != null ? x.Id.ToString() : "").ToArray()),
			//    string.Join(", ", writeClients.ToList().ConvertAll(x => x != null ? x.Id.ToString() : "").ToArray()));

			if (client.IsDisposed) return;

			throw new NotSupportedException("Cannot add unknown client back to the pool");
		}
 public ExpectSuccessCommand(RedisNativeClient client) : base(client)
 {
 }
Exemplo n.º 35
0
 public RedisPipelineCommand(RedisNativeClient client)
 {
     this.client = client;
 }
        /// <summary>
        /// 从连接池中关闭一个客户端
        /// </summary>
        /// <param name="client"></param>
		public void DisposeClient(RedisNativeClient client)
		{
            bool hit = false;
            lock (writeClients)
            {
                for (var i = 0; i < writeClients.Length; i++)
                {
                    var writeClient = writeClients[i];

                    if (client != writeClient)
                    {
                        if (writeClient != null && writeClient.Active == false &&
                            DateTime.Now - writeClient.InactiveTime > TimeSpan.FromMinutes(1))
                        {
                            if (writeClient.IsDisposed == false)
                            {
                                writeClient.DisposeConnection();
                            }
                            writeClient = null;
                            Monitor.PulseAll(writeClients);
                        }
                        continue;
                    }
                    hit = true;
                    client.Active = false;
                    client.InactiveTime = DateTime.Now;
                    Monitor.PulseAll(writeClients);
                }
            }

            if (hit == true)
                return;
            

			lock (readClients)
			{
				for (var i = 0; i < readClients.Length; i++)
				{
					var readClient = readClients[i];
                    if (client != readClient)
                    {
                        if (readClient != null && readClient.Active == false &&
                            DateTime.Now - readClient.InactiveTime > TimeSpan.FromMinutes(1))
                        {
                            if (readClient.IsDisposed == false)
                            {
                                readClient.DisposeConnection();
                            }
                            readClient = null; 
                            Monitor.PulseAll(writeClients);
                        }
                        continue; 
                    }
                    hit = true;
					client.Active = false;
                    client.InactiveTime = DateTime.Now;
                    //更新锁
					Monitor.PulseAll(readClients);
					return;
				}
			}

			
			
			//Console.WriteLine("Couldn't find {0} client with Id: {1}, readclients: {2}, writeclients: {3}",
			//    client.IsDisposed ? "Disposed" : "Undisposed",
			//    client.Id,
			//    string.Join(", ", readClients.ToList().ConvertAll(x => x != null ? x.Id.ToString() : "").ToArray()),
			//    string.Join(", ", writeClients.ToList().ConvertAll(x => x != null ? x.Id.ToString() : "").ToArray()));

            if (hit || client.IsDisposed) return;

			throw new NotSupportedException("Cannot add unknown client back to the pool");
		}