# xmemcached
**Repository Path**: xingmulee/xmemcached
## Basic Information
- **Project Name**: xmemcached
- **Description**: High performance, easy to use multithreaded memcached client in java.
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-11-04
- **Last Updated**: 2024-08-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
##Introduction
XMemcached is a high performance, easy to use blocking multithreaded memcached client in java.
It's nio based and was carefully turned to get top performance.
* [Homepage](https://github.com/killme2008/xmemcached)
* [Downloads](https://github.com/killme2008/xmemcached/tags)
* [Wiki](http://code.google.com/p/xmemcached/w/list)
* [Javadoc](http://fnil.net/docs/xmemcached/index.html)
##News and downloads
* [Xmemcached 2.0.0 released](https://github.com/killme2008/xmemcached/releases/tag/xmemcached-2.0.0).
Maven dependency:
```
com.googlecode.xmemcached
xmemcached
{version}
```
##Highlights
* Supports all memcached text based protocols and binary protocols(Binary protocol supports since version 1.2.0).
* Supports distributed memcached with standard hash or consistent hash strategy
* Supports for JMX to allow you to monitor and control the behavior of the XMemcachedClient.Change the optimizer's factor or add/remove memcached server dynamically
* Supports weighted server.
* Supports connection pool.You can create more connections to one memcached server with java nio.(since version 1.2.0)
* Supports failure mode and standby nodes.
* Supports integrating to spring framework and hibernate-memcached.
* High performance.
* Supports talking with kestrel(a MQ written in scala) and TokyoTyrant
##FAQ
###How to build project by maven?
Type command "mvn -Dtest -DfailIfNoTests=false assembly:assembly" to build the project.Maven will download the dependencies automacly and build project.
###How to run unit tests?
The test.properties file under the src/test/resources folder is used for setting memcached test server.
Please set test.memcached.servers property,Then run the AllTests class with jvm option "-ea".
###Is Xmemcached compatible with jdk5?
Yes,since 1.2.0-RC1,Xmemcached is compatible with jdk5.
##Example
//New a XMemcachedClient instance
XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
XMemcachedClient client=builder.build();
//If you want to use binary protocol
XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
builder.setCommandFactory(new BinaryCommandFactory());
XMemcachedClient client=builder.build();
//If you want to use xmemcached talking with kestrel
XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
builder.setCommandFactory(new KestrelCommandFactory());
XMemcachedClient client=builder.build();
//If you want to store primitive type as String
client.setPrimitiveAsString(true);
//Add or remove memcached server dynamically
client.addServer("localhost:12001 localhost:12002");
client.removeServer("localhost:12001 localhost:12002");
//get operation
String name =client.get("test");
//set add replace append prepend gets
client.add("hello", 0, "dennis");
client.replace("hello", 0, "dennis");
client.append("hello", 0, " good");
client.prepend("hello", 0, "hello ");
GetsResponse response=client.gets("hello");
long cas=response.getCas();
Obejct value=response.getValue();
//incr decr
client.set("a",0,"1");
client.incr("a",4);
client.decr("a",4);
//cas
client.cas("a", 0, new CASOperation() {
@Override
public int getMaxTries() {
return 1; //max try times
}
@Override
public Object getNewValue(long currentCAS, Object currentValue) {
System.out.println("current value " + currentValue);
return 3; //return new value to update
}
});
//flush_all
client.flushAll();
//stats
Map> result=client.getStats();
// get server versions
Map version=memcached.getVersions();
//bulk get
List keys = new ArrayList();
keys.add("hello");
keys.add("test");
Map map = client.get(keys);
##Enable jmx support
java -Dxmemcached.jmx.enable=true [YourApp]
Access MBean through
service:jmx:rmi:///jndi/rmi://[host]:7077/xmemcachedServer
##Integrate to spring framework
localhost:12000 localhost:12001
##Set server's weight
//set weight to 2
client.addServer("localhost",12000,2);
//or through XMemcachedClientBuilder,pass a weight array to XMemcachedClientBuilder constructor
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:12000 localhost:12001"),new int[]{1,3});
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
MemcachedClient memcachedClient=builder.build();
More information see [wiki pages](http://code.google.com/p/xmemcached/w/list) please.
## Contributors
* [cnscud](https://code.google.com/u/cnscud/)
* [wolfg1969](https://code.google.com/u/wolfg1969/)
* [vadimp](https://github.com/vadimp)
* [ilkinulas](https://github.com/ilkinulas)
* [aravind](https://github.com/aravind)
* [bmahe](https://github.com/bmahe)
* [jovanchohan](https://github.com/jovanchohan)
* [profondometer](https://github.com/profondometer)
* [machao9email](https://code.google.com/u/100914576372416966057)
* [spudone](https://github.com/spudone)
* [MikeBily](https://github.com/MikeBily)
##License
[Apache License Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)