Memcache的详细讲解(6)

看到这个命令的输出量很大,所有信息都很有作用。举个例子吧,比如第一个slab中使用的chunks很少,第二个slab中使用的chunks很多,这时就可以考虑适当增大MemCache的增长因子了,让一部分数据落到第一个slab中去,适当平衡两个slab中的内存,避免空间浪费。

 

MemCache的Java实现实例

讲了这么多,作为一个Java程序员,怎么能不写写MemCache的客户端的实现呢?MemCache的客户端有很多第三方jar包提供了实现,其中比较好的当属XMemCached了,XMemCached具有效率高、IO非阻塞、资源耗费少、支持完整的协议、允许设置节点权重、允许动态增删节点、支持JMX、支持与Spring框架集成、使用连接池、可扩展性好等诸多优点,因而被广泛使用。这里利用XMemCache写一个简单的MemCache客户单实例,也没有验证过,纯属抛砖引玉:

public class MemCacheManager
{
    private static MemCacheManager instance = new MemCacheManager();
   
    /** XMemCache允许开发者通过设置节点权重来调节MemCache的负载,设置的权重越高,该MemCache节点存储的数据越多,负载越大 */
    private static MemcachedClientBuilder mcb =
            new XMemcachedClientBuilder(AddrUtil.getAddresses("127.0.0.1:11211 127.0.0.2:11211 127.0.0.3:11211"), new int[]{1, 3, 5});
    private static MemcachedClient mc = null;
   
    /** 初始化加载客户端MemCache信息 */
    static
    {
        mcb.setCommandFactory(new BinaryCommandFactory()); // 使用二进制文件
        mcb.setConnectionPoolSize(10); // 连接池个数,即客户端个数
        try
        {
            mc = mcb.build();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
       
    }
   
    private MemCacheManager()
    {
       
    }
   
    public MemCacheManager getInstance()
    {
        return instance;
    }
   
    /** 向MemCache服务器设置数据 */
    public void set(String key, int expiry, Object obj) throws Exception
    {
        mc.set(key, expiry, obj);
    }
   
    /** 从MemCache服务器获取数据 */
    public Object get(String key) throws Exception
    {
        return mc.get(key);
    }
   
    /**
    * MemCache通过compare and set即cas协议实现原子更新,类似乐观锁,每次请求存储某个数据都要附带一个cas值,MemCache
    * 比对这个cas值与当前存储数据的cas值是否相等,如果相等就覆盖老数据,如果不相等就认为更新失败,这在并发环境下特别有用
    */
    public boolean update(String key, Integer i) throws Exception
    {
        GetsResponse<Integer> result = mc.gets(key);
        long cas = result.getCas();
        // 尝试更新key对应的value
        if (!mc.cas(key, 0, i, cas))
        {
            return false;
        }
        return true;
    }
}

CentOS 6.6下Memcached 源码安装配置 

Memcached 安装及启动脚本

PHP中使用Memcached的性能问题

Ubuntu下安装Memcached及命令解释

Memcached的安装和应用

使用Nginx+Memcached的小图片存储方案

Memcached使用入门  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/daf47a0d5b46c2802c25b0d4aab29e90.html