使用组件
memcached 1.2.6
.net 类库 memcacheddotnet_clientlib-1.1.5
1.增加memcacheddotnet_clientlib-1.1.5代码
下载好组件后,用vs打开.net类库memcacheddotnet_clientlib-1.1.5,打开MemCachedClient.cs,增加如下方法:
复制代码 代码如下:
public Hashtable Stats(ArrayList servers, string command)
        {
            // get SockIOPool instance
            SockIOPool pool = SockIOPool.GetInstance(_poolName);
            // return false if unable to get SockIO obj
            if (pool == null)
            {
                //if(log.IsErrorEnabled)
                //{
                //    log.Error(GetLocalizedString("unable to get socket pool"));
                //}
                return null;
            }
            // get all servers and iterate over them
            if (servers == null)
                servers = pool.Servers;
            // if no servers, then return early
            if (servers == null || servers.Count <= 0)
            {
                //if(log.IsErrorEnabled)
                //{
                //    log.Error(GetLocalizedString("stats no servers"));
                //}
                return null;
            }
            // array of stats Hashtables
            Hashtable statsMaps = new Hashtable();
            for (int i = 0; i < servers.Count; i++)
            {
                SockIO sock = pool.GetConnection((string)servers[i]);
                if (sock == null)
                {
                    //if(log.IsErrorEnabled)
                    //{
                    //    log.Error(GetLocalizedString("unable to connect").Replace("$$Server$$", servers[i].ToString()));
                    //}
                    continue;
                }
                // build command
                if (command == null || command.Length == 0)
                {
                    command = "stats\r\n";
                }
                else
                {
                    command = command + "\r\n";
                }
                try
                {
                    sock.Write(UTF8Encoding.UTF8.GetBytes(command));
                    sock.Flush();
                    // map to hold key value pairs
                    Hashtable stats = new Hashtable();
                    // loop over results
                    while (true)
                    {
                        string line = sock.ReadLine();
                        //if(log.IsDebugEnabled)
                        //{
                        //    log.Debug(GetLocalizedString("stats line").Replace("$$Line$$", line));
                        //}
                        if (line.StartsWith(STATS))
                        {
                            string[] info = line.Split(' ');
                            string key = info[1];
                            string val = info[2];
                            //if(log.IsDebugEnabled)
                            //{
                            //    log.Debug(GetLocalizedString("stats success").Replace("$$Key$$", key).Replace("$$Value$$", val));
                            //}
                            stats[key] = val;
                        }
                        else if (line.StartsWith("ITEM"))
                        {
                            string[] info = line.Split('[');
                            string key = info[0].Split(' ')[1];
                            string val = "[" + info[1];
                            stats[key] = val;
                        }
                        else if (END == line)
                        {
                            // finish when we get end from server
                            //if(log.IsDebugEnabled)
                            //{
                            //    log.Debug(GetLocalizedString("stats finished"));
                            //}
                            break;
                        }
                        statsMaps[servers[i]] = stats;
                    }
                }
                catch//(IOException e) 
                {
                    //if(log.IsErrorEnabled)
                    //{
                    //    log.Error(GetLocalizedString("stats IOException"), e);
                    //}
                    try
                    {
                        sock.TrueClose();
                    }
                    catch//(IOException) 
                    {
                        //if(log.IsErrorEnabled)
                        //{
                        //    log.Error(GetLocalizedString("failed to close some socket").Replace("$$Socket$$", sock.ToString()));
                        //}
                    }
                    sock = null;
                }
                if (sock != null)
                    sock.Close();
            }
            return statsMaps;
        }
2 文章中有GetStats方法,将它修改如下:
复制代码 代码如下:
