zoukankan      html  css  js  c++  java
  • Memcached客户端评测报告20100125

    缘起:

    原先用的https://sourceforge.net/projects/memcacheddotnet/一个客户端,在使用Increment这个方法时出现一些莫名的问题,于是请命对这个块做一个评测。

    定位:

    首先用熟悉的python来定位排除一下,是不是别的问题引起的,我找了良久http://www.tummy.com/Community/software/python-memcached/,用的是这个主流的库

    主要的当心是在windows下能不能好使,事实上我的担心是多余的,

    #! /usr/bin/env python

    #coding=utf-8

    #brief memcached increment test

    import memcache

    mc = memcache.Client(['192.168.0.74:11211'], debug=0)

    #mc.set("key","2")

    #mc.incr("key")

    #print mc.get("key")

    ##print mc.get("key")

    #import sys

    #sys.exit()

     

     

    mc.set("key", "0")

    #mc.incr("key")

    #print type(mc.get("key"))

     

    for i in xrange(1,10000):

    mc.incr("key")

    if mc.get("key")<>str(i):

    print u"错误出现在%d".encode("gbk",'ignore')%i

    break

    print "done!"

     

    之后

    我给https://sourceforge.net/projects/memcacheddotnet/的类库做了一个简单的测试,来定位它的increment是否真有问题,结果表明真的是有的

    using System;
    				

    using System.Collections.Generic;
    				

    using System.Text;
    				

    using Memcached.ClientLibrary;
    				

     

    namespace IsolateMemcachedTest
    

    {
    				

    
    				class Program
    

    
    				{
    				

    
    				private
    				static MemcachedClient mc =
    				new MemcachedClient();
    				

    
    				static
    				void Main(string[] args)
    				

    
    				{
    				

                mc.EnableCompression =
    				false;
    				

                SockIOPool pool = SockIOPool.GetInstance();
    				

                pool.SetServers(new
    				string[]{"192.168.0.74:11211"});
    				

                pool.InitConnections =
    				3;//初始化链接数
    				

                pool.MinConnections =
    				3;//最少链接数
    				

                pool.MaxConnections =
    				3;//最大连接数
    				

                pool.SocketConnectTimeout =
    				5000;//Socket链接超时时间
    				

                pool.SocketTimeout =
    				5000;// Socket超时时间
    				

                pool.MaintenanceSleep =
    				5;//维护线程休息时间
    				

                pool.Failover =
    				false;
    				//失效转移(一种备份操作模式)
    				

    
    				//pool.Nagle = Nagle;//���否用nagle算法启动socket
    				

                pool.HashingAlgorithm = HashingAlgorithm.NewCompatibleHash;
    				

                pool.Initialize();
    				

     

                mc.Set("haha",
    				"1");
    				

                Console.WriteLine(mc.Get("haha").ToString()
    				==
    				"1");
    				

                Console.WriteLine(mc.Increment("haha"));
    				

                Console.WriteLine(mc.Get("haha"));
    				

     

    最后,我们要找一个替补的方案,它最后更新在2009-2

    http://code.google.com/p/beitmemcached/

    也写了一段测试代码

    using System;
    				

    using System.Collections.Generic;
    				

    using System.Text;
    				

    using BeIT.MemCached;
    				

     

    namespace IsolateMemcachedTest
    

    {
    				

    
    				class Program2
    

    
    				{
    				

    
    				static
    				void Main(string[] args)
    				

    
    				{
    				

                MemcachedClient.Setup("MyCache",
    				new
    				string[]
    				{
    				"192.168.0.74:11211"
    				});
    				

                MemcachedClient cache = MemcachedClient.GetInstance("MyCache");
    				

                cache.SendReceiveTimeout =
    				5000;
    				

                cache.MinPoolSize =
    				1;
    				

                cache.MaxPoolSize =
    				5;
    				

     

                cache.Set("hh",
    				"0");
    				

    
    				//Console.WriteLine(cache.Increment("hh", 1));
    				

    
    				//Console.WriteLine(cache.Get("hh"));
    				

     

    
    				for
    				(int i =
    				1; i <=
    				10000; i++)
    				

    
    				{
    				

                    cache.Increment("hh",
    				1);
    				

    
    				if
    				(Convert.ToString(cache.Get("hh"))
    				!= i.ToString())
    				

    
    				{
    				

                        Console.WriteLine("在{0}处出现错误", i);
    				

    
    				break;
    				

    
    				}
    				

     

    
    				}
    				

                Console.WriteLine("done!");
    				

                Console.WriteLine(cache.Get("hh"));
    				

    
    				}
    				

    
    				}
    				

    }
    

    另外还有一个:
    				

    http://www.codeplex.com/EnyimMemcached/,它最后更新在2008-11

    虽然它更新的速度不行,但是它的文字是这么写的,所以还是有些吸引力

    Main features

    • written for .NET, not ported from a different architecture (so uses the framework's features better)
    • configuration is stored in app/web.config (sample configuration file is included) or can be done from code
    • uses minimal locking to increase the throughput
    • supports consistent hashing for keys: a specific item goes to a specific server every time. (based on libketama, http://lists.danga.com/pipermail/memcached/2007-April/003834.html)
    • operations are factored into separate classes, so they are more separated from the main client class, easier manageability and thread safety
    • primitive types (currently some numeric types, bool, DateTime, byte[] and strings, but can be extended) are stored in an optimized form; only Objects are serialized
    • excessive extensibility: define your own configuration, serialization format or "consistent hashing" algorithm (see Cannot resolve release macro, invalid id.)
    • based on our non-disclosed specially handcrafted in-house performance test we're the fastest C# client ever, using negative amount of system resources, be it memory or CPU time
    • we follow memcached's protocol specification as strictly as no one else: even the memcached guys ask us if they don't understand something

    不过看了它的工程代码还是比较全面的,但是太复杂,不符合我的开发哲学

    所以它就被我排除了,所以我们还是聚焦到上面googlecode上的那个BiTMemcached的项目上了。

    BeITMemcached项目评测

    它的代码很是简洁,不过相比而言就没有什么单元测试什么的了,不过也不错

     

    Reference:

    http://www.cnblogs.com/sig556/archive/2009/12/30/1635722.html

    今天就到这里

    2010-02-04
    另诉一下心中的苦闷,在测memcached的过期功能,结果linux server的日期时间不对,郁闷了我半天,小记于此以慰后来人

    另外,找了一个同步windows server 2003下时间的工具

    automachron

    时间同步服务配置

  • 相关阅读:
    MVC4学习-View(0)
    javascript与常用正则表达式
    uhfreader&rfid标签测试
    WebClient文件上传很方便哈
    NAudio的简单用法
    与wmi交互,调非托管代码,单元测试遇到的一些问题
    我在这里骑美团单车被交警罚了50元,这个地方不能骑共享单车大家留意了
    发邮件,美化table格式
    学习jwt的简单使用
    学习redis的基本使用
  • 原文地址:https://www.cnblogs.com/lexus/p/1655898.html
Copyright © 2011-2022 走看看