`
JavaCrazyer
  • 浏览: 3008736 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

XMemcached使用示例

阅读更多

Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是它的一个java客户端实现。

 

XMemcached使用示例(本示例基于xmemcached-1.3.8.jar),总结一个,如下:

package com.wujintao.memcached;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import net.rubyeye.xmemcached.Counter;
import net.rubyeye.xmemcached.GetsResponse;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.auth.AuthInfo;
import net.rubyeye.xmemcached.command.BinaryCommandFactory;
import net.rubyeye.xmemcached.exception.MemcachedException;
import net.rubyeye.xmemcached.transcoders.StringTranscoder;
import net.rubyeye.xmemcached.utils.AddrUtil;

import org.junit.Test;

import com.wujintao.redis.util.MD5Util;

public class TestCase {
	@Test
	public void test1() throws IOException {
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11211"));
		// AddrUtil.getAddresses("server1:11211 server2:11211")
               // 宕机报警  
               builder.setFailureMode(true);  
              // 使用二进制文件  
               builder.setCommandFactory(new BinaryCommandFactory());
            /** 
             * 设置连接池大小,即客户端个数 
             * In a high concurrent enviroment,you may want to pool memcached clients. 
             * But a xmemcached client has to start a reactor thread and some thread pools, 
             * if you create too many clients,the cost is very large.  
             * Xmemcached supports connection pool instreadof client pool. 
             * you can create more connections to one or more memcached servers, 
             * and these connections share the same reactor and thread pools, 
             * it will reduce the cost of system. 
             *  默认的pool size是1。设置这一数值不一定能提高性能,请依据你的项目的测试结果为准。初步的测试表明只有在大并发下才有提升。 
             *  设置连接池的一个不良后果就是,同一个memcached的连接之间的数据更新并非同步的 
             *  因此你的应用需要自己保证数据更新的原子性(采用CAS或者数据之间毫无关联)。 
             */  
                builder.setConnectionPoolSize(10);  
		MemcachedClient client = builder.build();
		try {
			/**
			 * 第一个是存储的key名称,
			 * 第二个是expire时间(单位秒),超过这个时间,memcached将这个数据替换出去,0表示永久存储(默认是一个月)
			 * 第三个参数就是实际存储的数据
			 */
			client.set("hello", 0, "Hello,xmemcached");
			String value = client.get("hello");
			System.out.println("hello=" + value);
			client.delete("hello");
			value = client.get("hello");
			System.out.println("hello=" + value);

			// value=client.get(“hello”,3000);

			/**
			 * Memcached是通过cas协议实现原子更新,所谓原子更新就是compare and set,
			 * 原理类似乐观锁,每次请求存储某个数据同时要附带一个cas值, memcached比对这个cas值与当前存储数据的cas值是否相等,
			 * 如果相等就让新的数据覆盖老的数据,如果不相等就认为更新失败, 这在并发环境下特别有用
			 */
			GetsResponse<Integer> result = client.gets("a");
			long cas = result.getCas();
			// 尝试将a的值更新为2
			if (!client.cas("a", 0, 2, cas)) {
				System.err.println("cas error");
			}
		} catch (MemcachedException e) {
			System.err.println("MemcachedClient operation fail");
			e.printStackTrace();
		} catch (TimeoutException e) {
			System.err.println("MemcachedClient operation timeout");
			e.printStackTrace();
		} catch (InterruptedException e) {
			// ignore
		}
		try {
			// close memcached client
			client.shutdown();
		} catch (IOException e) {
			System.err.println("Shutdown MemcachedClient fail");
			e.printStackTrace();
		}

	}

	@Test
	public void test2() throws TimeoutException, InterruptedException,
			MemcachedException, IOException {
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11211"));
		MemcachedClient client = builder.build();
		client.flushAll();
		if (!client.set("hello", 0, "world")) {
			System.err.println("set error");
		}
		if (client.add("hello", 0, "dennis")) {
			System.err.println("Add error,key is existed");
		}
		if (!client.replace("hello", 0, "dennis")) {
			System.err.println("replace error");
		}
		client.append("hello", " good");
		client.prepend("hello", "hello ");
		String name = client.get("hello", new StringTranscoder());
		System.out.println(name);

		/**
		 * 而删除数据则是通过deleteWithNoReply方法,这个方法删除数据并且告诉memcached
		 * 不用返回应答,因此这个方法不会等待应答直接返回,特别适合于批量处理
		 */
		client.deleteWithNoReply("hello");
	}

	@Test
	public void incrDecr() throws IOException, TimeoutException,
			InterruptedException, MemcachedException {
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11211"));
		MemcachedClient client = builder.build();
		/**
		 * 第一个参数指定递增的key名称, 第二个参数指定递增的幅度大小, 第三个参数指定当key不存在的情况下的初始值。
		 * 两个参数的重载方法省略了第三个参数,默认指定为0。
		 */
		assert (1 == client.incr("a", 5, 1));
		assert (6 == client.incr("a", 5));
		assert (10 == client.incr("a", 4));
		assert (9 == client.decr("a", 1));
		assert (7 == client.decr("a", 2));
	}

	@Test
	public void counter() throws Exception {
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11211"));
		MemcachedClient client = builder.build();
		Counter counter = client.getCounter("counter", 0);
		counter.incrementAndGet();
		counter.decrementAndGet();
		counter.addAndGet(-10);
	}

	public void auth() throws Exception {
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11211"));
		builder.addAuthInfo(AddrUtil.getOneAddress("localhost:11211"),
				AuthInfo.typical("cacheuser", "123456"));
		// Must use binary protocol
		builder.setCommandFactory(new BinaryCommandFactory());
		MemcachedClient client = builder.build();
	}

	public void nioPool() throws Exception {
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11211"));
		builder.setConnectionPoolSize(5);
	}

	
	/**
     *这里应该安装kestrel消息服务器,才能使用如下API生效
	 * @throws IOException
	 * @throws MemcachedException 
	 * @throws InterruptedException 
	 * @throws TimeoutException 
	 */
	@Test
	public void testGet() throws IOException, TimeoutException, InterruptedException, MemcachedException{
		MemcachedClientBuilder builder = new XMemcachedClientBuilder(
				AddrUtil.getAddresses("localhost:11212"));
		MemcachedClient client = builder.build();
		String value = client.get("1");
		System.out.println("hello=" + value);
	}
	
	
	@Test
    public void testGet2() throws IOException, TimeoutException, InterruptedException, MemcachedException{
        MemcachedClientBuilder builder = new XMemcachedClientBuilder(
                AddrUtil.getAddresses("localhost:11212"));
        MemcachedClient client = builder.build();
        String value = client.get("srp_"+MD5Util.MD5("3rdsearch_周杰伦"));
        System.out.println(value);
    }
}

 

 

分享到:
评论

相关推荐

    xmemcached 中文开发手册

    以下是一段简单的XMemcached使用示例,展示如何建立连接、读写数据以及释放资源: ```java import com.google.code.yanf4j.core.Session; import com.google.code.yanf4j.util.IOUtils; import ...

    Xmemcached官方中文手册

    手册中的开发实例部分,通过具体的代码示例展示了如何使用Xmemcached进行缓存操作,如添加、删除、更新和获取缓存项,以及如何设置和检查过期时间。这些实例有助于初学者快速上手。 **6. 配置详解** 手册详细阐述了...

    Xmemcached用户指南

    为了帮助读者更好地理解XMemcached的基本使用方法,下面提供了一个简单的示例代码: ```java // 创建Memcached客户端 MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(...

    memcached和java关联的一些网上例子

    **XMemcached使用示例** 1. 添加依赖:在项目中引入XMemcached的Maven依赖。 ```xml &lt;groupId&gt;net.rubyeye.xmemcached&lt;/groupId&gt; &lt;artifactId&gt;xmemcached &lt;version&gt;2.3.0 ``` 2. 创建连接:配置memcached...

    xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务

    xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务,使用RMI调用JMX服务的详细过程,完整的eclipse工程,直接导入即可用。还用一些运行截图,很有用。 自己写的例子,类名是BaseExample 和RMITest.

    xmemcached 2.4.5 2.3.2

    尽管"新建文件夹"没有提供具体的文件信息,但通常在升级过程中,开发者会提供包含源码、文档、示例等的jar文件,以供用户下载和研究。通过对比这些文件,可以更深入地理解两个版本的差异。 总结来说,xmemcached ...

    征服 Kestrel + XMemcached

    Kestrel是一个高性能、异步的分布式消息队列,而XMemcached则是一个广泛使用的Java客户端,用于连接到Memcached缓存服务器。在这里,我们将会探讨这两个技术的基本概念、它们在IT领域的应用以及如何将它们结合使用。...

    Xmemcached一个java实现的分布式缓存

    下面将详细讨论Xmemcached的关键特性和使用方法。 1. **Memcached简介** Memcached是一种轻量级的分布式内存对象缓存系统,用于提高Web应用程序的速度。它通过在内存中存储常用数据,减少对数据库的访问,从而提高...

    Xmemcached memcached 实例

    类包括Xmemcached客户端实现和builder实现以及memcached client for java实现,对初学者有借鉴作用,特别是在开发简单例子时出现的超时情况的可以看看是否是同本事例相同。 xmemcached time out 5000 1000

    Xmemcached用户指南.pdf

    开始使用XMemcached,首先需要构建MemcachedClient实例,如以下示例所示: ```java MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("host:11211")); MemcachedClient ...

    Xmemcached/jedis springdemo

    【Xmemcached/jedis Spring Demo】是一个整合了Xmemcached和jedis的Spring示例项目,旨在帮助开发者理解和学习如何在Spring框架中集成并使用这两种流行的NoSQL客户端库。Xmemcached是Java编写的高效、易用的...

    Ehcache+xmemcached+redis 整合spring注解demo

    5. **整合示例**: 在"memcached_test"这个测试文件中,可能包含了整合Ehcache、xmemcached和Redis的代码示例。这个测试可能涵盖了如何配置Spring的缓存抽象,如何定义缓存命名空间,如何使用注解驱动缓存操作,以及...

    mule ce xmemcached

    10. **压缩包子文件"memtest"**: 这可能是包含了一个演示如何集成XMemcached到Mule CE的示例项目或者测试代码,可能包括了配置文件、Java类和Mule流程定义等。 通过这个案例,开发者可以学习如何在有限的资源下,...

    java memcache使用例子

    本篇文章将围绕"Java Memcache使用例子"这一主题,详细介绍如何在Java中使用Memcached。 首先,确保您已经在本地正确安装了Memcached。通常,Memcached可以在Linux、macOS和Windows等操作系统上运行。你可以通过...

    memcache-demo

    标题"memcache-demo"指的是一个关于Memcache的示例项目,其中可能包含如何在Java环境中,特别是在使用XMemcached这个客户端库时,集成和使用Memcache的代码实例。XMemcached是一个高效、稳定的Java Memcached客户端...

    JAVA-memcached简单例子

    在这个例子中,我们将使用spymemcached,因为它相对轻量级且易于使用。 3. **集成spymemcached** - 添加spymemcached依赖到你的项目。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    memcached for java client 例子

    "memcached for java client 例子" 指的是一个使用Java语言编写的客户端库,用于与memcached缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提升Web应用的响应速度。 **...

    memcache所需要的jar包

    6. **使用示例** - 假设我们使用spymemcached,首先引入依赖: ```xml &lt;groupId&gt;net.spy&lt;/groupId&gt; &lt;artifactId&gt;spymemcached 版本号 ``` - 然后创建客户端并进行操作: ```java MemcachedClient ...

    memcached客户端(三种客户端)

    3. **XMemcached 示例**(未提供) 在实际开发中,选择哪个客户端取决于项目需求,包括性能、稳定性、可扩展性、文档支持等因素。在决定之前,可以进行基准测试来比较它们在特定环境下的性能表现。

    demo_memcache_ieda

    描述提到"memcached的入门小例子,使用两种不同的jar访问客户端",这表明我们将探讨如何通过Java编程接口(API)来连接和操作分布式内存缓存系统Memcached,同时会涉及两个不同的客户端库。 **Memcached基础知识** ...

Global site tag (gtag.js) - Google Analytics