All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.whalin.MemCached.MemCachedClient Maven / Gradle / Ivy

The newest version!
/**
 * MemCached Java Client Logger
 * Copyright (c) 2007 Greg Whalin
 * All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the BSD license
 *
 * This library is distributed in the hope that it will be
 * useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE.
 *
 * You should have received a copy of the BSD License along with this
 * library.
 *
 * @author Greg Whalin  
 * @version 2.0
 */

/*******************************************************************************
 * Copyright (c) 2009 Schooner Information Technology, Inc.
 * All rights reserved.
 * 
 * http://www.schoonerinfotech.com/
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ******************************************************************************/
package com.whalin.MemCached;

import java.util.Date;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.schooner.MemCached.AscIIClient;
import com.schooner.MemCached.AscIIUDPClient;
import com.schooner.MemCached.BinaryClient;
import com.schooner.MemCached.MemcachedItem;
import com.schooner.MemCached.TransCoder;

/**
 * Schooner light-weight memcached client. It is of higher performance than
 * other java memcached clients. The main modification is done by Xingen Wang.
*
* Instead of the InputStream and OutputStream, we choose the SocketChannel and * java.nio package to increase the performance.
* Here is an example to use schooner memcached client.
*
* Firstly, we should initialize the SockIOPool, which is a connection pool.
* *

An example of initializing using defaults:

* *
 * static {
 * 	String[] serverlist = { "server1.com:port", "server2.com:port" };
 * 
 * 	SockIOPool pool = SockIOPool.getInstance();
 * 	pool.setServers(serverlist);
 * 	pool.initialize();
 * }
 * 
* *
* Then we can create the client object.
* *

To create cache client object:

* *
 * MemCachedClient mc = new MemCachedClient();
 * 
* *

To store an object:

* *
 * MemCachedClient mc = new MemCachedClient();
 * String key = "cacheKey1";
 * Object value = SomeClass.getObject();
 * mc.set(key, value);
 * 
* *

To delete a cache entry:

* *
 * MemCachedClient mc = new MemCachedClient();
 * String key = "cacheKey1";
 * mc.delete(key);
 * 
* *

To retrieve an object from the cache:

* *
 * MemCachedClient mc = new MemCachedClient();
 * String key = "key";
 * Object value = mc.get(key);
 * 
* *

To retrieve an multiple objects from the cache

* *
 * MemCachedClient mc = new MemCachedClient();
 * String[] keys = { "key", "key1", "key2" };
 * Map<Object> values = mc.getMulti(keys);
 * 
* *

To flush all items in server(s)

* *
 * MemCachedClient mc = new MemCachedClient();
 * mc.flushAll();
 * 
* */ public class MemCachedClient { MemCachedClient client; // optional passed in classloader protected ClassLoader classLoader; // optional error handler protected ErrorHandler errorHandler; // logger public static Logger log = LoggerFactory.getLogger(MemCachedClient.class); // return codes /* * start of value line from server */ public static final String VALUE = "VALUE"; /* * start of stats line from server */ public static final String STATS = "STAT"; /* * start of item line from server */ public static final String ITEM = "ITEM"; /* * successful deletion */ public static final String DELETED = "DELETED\r\n"; /* * successful synced. */ public static final String SYNCED = "SYNCED\r\n"; /* * record not found for delete or incr/decr */ public static final String NOTFOUND = "NOT_FOUND\r\n"; /* * successful store of data */ public static final String STORED = "STORED\r\n"; /* * success */ public static final String OK = "OK\r\n"; /* * end of data from server */ public static final String END = "END\r\n"; /* * invalid command name from client */ public static final String ERROR = "ERROR\r\n"; /* * client error in input line - invalid protocol */ public static final String CLIENT_ERROR = "CLIENT_ERROR\r\n"; // default compression threshold public static final int COMPRESS_THRESH = 30720; /* * server error */ public static final String SERVER_ERROR = "SERVER_ERROR\r\n"; public static final byte[] B_RETURN = "\r\n".getBytes(); public static final byte[] B_END = "END\r\n".getBytes(); public static final byte[] B_NOTFOUND = "NOT_FOUND\r\n".getBytes(); public static final byte[] B_DELETED = "DELETED\r\r".getBytes(); public static final byte[] B_STORED = "STORED\r\r".getBytes(); /** * The following static constants are used for the binary protocol. */ public static final byte MAGIC_REQ = (byte) 0x80; public static final byte MAGIC_RESP = (byte) 0x81; public static final int F_COMPRESSED = 2; public static final int F_SERIALIZED = 8; public static final int STAT_NO_ERROR = 0x0000; public static final int STAT_KEY_NOT_FOUND = 0x0001; public static final int STAT_KEY_EXISTS = 0x0002; public static final int STAT_VALUE_TOO_BIG = 0x0003; public static final int STAT_INVALID_ARGUMENTS = 0x0004; public static final int STAT_ITEM_NOT_STORED = 0x0005; public static final int STAT_UNKNOWN_COMMAND = 0x0081; public static final int STAT_OUT_OF_MEMORY = 0x0082; public static final byte OPCODE_GET = (byte) 0x00; public static final byte OPCODE_SET = (byte) 0x01; public static final byte OPCODE_ADD = (byte) 0x02; public static final byte OPCODE_REPLACE = (byte) 0x03; public static final byte OPCODE_DELETE = (byte) 0x04; public static final byte OPCODE_INCREMENT = (byte) 0x05; public static final byte OPCODE_DECREMENT = (byte) 0x06; public static final byte OPCODE_QUIT = (byte) 0x07; public static final byte OPCODE_FLUSH = (byte) 0x08; public static final byte OPCODE_GETQ = (byte) 0x09; public static final byte OPCODE_NOOP = (byte) 0x0A; public static final byte OPCODE_VERSION = (byte) 0x0B; public static final byte OPCODE_GETK = (byte) 0x0C; public static final byte OPCODE_GETKQ = (byte) 0x0D; public static final byte OPCODE_APPEND = (byte) 0x0E; public static final byte OPCODE_PREPEND = (byte) 0x0F; public static final byte OPCODE_STAT = (byte) 0x10; public static final byte OPCODE_AUTH_LIST = (byte) 0x20; public static final byte OPCODE_START_AUTH = (byte) 0x21; public static final byte OPCODE_AUTH_STEPS = (byte) 0x22; public static final byte AUTH_FAILED = 0x20; public static final byte FURTHER_AUTH = 0x21; /** * This is used for set command only.
* The reason for use this that we have to put the size of the object bytes * into the command line. While as a matter of fact, we can't get the real * size before we completed the serialization.
* In order to solve this problem, we add this blank area to the size * position in the command line. When we complete the full serialization and * get the bytes size, we will replace this blank are with real bytes size.
* This definitely help us decrease the GC of JVM. */ public final byte[] BLAND_DATA_SIZE = " ".getBytes(); /** * values for cache flags */ public static final int MARKER_BYTE = 1; public static final int MARKER_BOOLEAN = 8192; public static final int MARKER_INTEGER = 4; public static final int MARKER_LONG = 16384; public static final int MARKER_CHARACTER = 16; public static final int MARKER_STRING = 32; public static final int MARKER_STRINGBUFFER = 64; public static final int MARKER_FLOAT = 128; public static final int MARKER_SHORT = 256; public static final int MARKER_DOUBLE = 512; public static final int MARKER_DATE = 1024; public static final int MARKER_STRINGBUILDER = 2048; public static final int MARKER_BYTEARR = 4096; public static final int MARKER_OTHERS = 0x00; public boolean isUseBinaryProtocol() { return client.isUseBinaryProtocol(); } /** * used when you want to create a ASCIIClient/BinaryClient/UDPASCIIClient * instance */ protected MemCachedClient(MemCachedClient client) { this.client = client; } /** * Creates a new instance of MemCachedClient. */ public MemCachedClient() { this(null, true, false); } /** * Creates a new instance of MemCachedClient.
* Use binary protocol with TCP. * * @param binaryProtocal * whether use binary protocol. */ public MemCachedClient(boolean binaryProtocal) { this(null, true, binaryProtocal); } /** * Creates a new instance of MemCachedClient accepting a passed in pool * name. * * @param poolName * name of SockIOPool */ public MemCachedClient(String poolName) { this(poolName, true, false); } /** * Creates a new instance of MemCachedClient accepting a passed in pool * name. * * @param poolName * name of SockIOPool * @param binaryProtocal * whether use binary protocol. */ public MemCachedClient(String poolName, boolean binaryProtocal) { this(poolName, true, binaryProtocal); } /** * Create default memcached client. * * @param isTCP * true - use tcp protocol
* false - use udp protocol * @param binaryProtocal * use binary protocol. */ public MemCachedClient(boolean isTCP, boolean binaryProtocal) { this(null, isTCP, binaryProtocal); } /** * Create memcached client. * * @param poolName * name of SockIOPool * @param isTCP * use tcp protocol * @param binaryProtocal * use binary protocol. */ public MemCachedClient(String poolName, boolean isTcp, boolean binaryProtocal) { if (binaryProtocal) client = new BinaryClient(poolName); else client = isTcp ? new AscIIClient(poolName) : new AscIIUDPClient(poolName); } /** * create memcached client. * * @param poolName * pool name * @param isTcp * is tcp protocol? * @param binaryProtocol * is binary protocol? * @param cl * classloader. * @param eh * errorhandler. * @deprecated will be removed in next release.
* Please use customized transcoder * {@link com.schooner.MemCached.AbstractTransCoder} to achieve * the same objective. */ public MemCachedClient(String poolName, boolean isTcp, boolean binaryProtocol, ClassLoader cl, ErrorHandler eh) { if (binaryProtocol) client = new BinaryClient(poolName, cl, eh); else client = isTcp ? new AscIIClient(poolName, cl, eh) : new AscIIUDPClient(poolName, cl, eh); } /** * Creates a new instance of MemCacheClient but acceptes a passed in * ClassLoader. * * @param classLoader * ClassLoader object. * @deprecated will be removed in next release.
* Please use customized transcoder * {@link com.schooner.MemCached.AbstractTransCoder} to achieve * the same objective. */ public MemCachedClient(ClassLoader classLoader) { this(); client.setClassLoader(classLoader); } /** * Creates a new instance of MemCacheClient but acceptes a passed in * ClassLoader and a passed in ErrorHandler. * * @param classLoader * ClassLoader object. * @param errorHandler * ErrorHandler object. * @deprecated will be removed in next release.
* Please use customized transcoder * {@link com.schooner.MemCached.AbstractTransCoder} to achieve * the same objective. */ public MemCachedClient(ClassLoader classLoader, ErrorHandler errorHandler) { this(null, true, false, classLoader, errorHandler); } /** * Creates a new instance of MemCacheClient but acceptes a passed in * ClassLoader, ErrorHandler, and SockIOPool name. * * @param classLoader * ClassLoader object. * @param errorHandler * ErrorHandler object. * @param poolName * SockIOPool name * @deprecated will be removed in next release.
* Please use customized transcoder * {@link com.schooner.MemCached.AbstractTransCoder} to achieve * the same objective. */ public MemCachedClient(ClassLoader classLoader, ErrorHandler errorHandler, String poolName) { this(poolName, true, false, classLoader, errorHandler); } /** * Sets an optional ClassLoader to be used for serialization. * * @param classLoader * @deprecated will be removed in next release.
* Please use customized transcoder * {@link com.schooner.MemCached.AbstractTransCoder} to achieve * the same objective. */ public void setClassLoader(ClassLoader classLoader) { throw new UnsupportedOperationException(); } /** * Sets an optional ErrorHandler. * * @param errorHandler * @deprecated will be removed in next release. The purpose of adding this * support was to make it compatible with previous releases. */ public void setErrorHandler(ErrorHandler errorHandler) { throw new UnsupportedOperationException(); } /** * Enable storing compressed data, provided it meets the threshold * requirements. * * If enabled, data will be stored in compressed form if it is
* longer than the threshold length set with setCompressThreshold(int)
*
* The default is that compression is enabled.
*
* Even if compression is disabled, compressed data will be automatically
* decompressed. * * @param compressEnable * true to enable compression, false to * disable compression * @deprecated will be removed in next release. */ public void setCompressEnable(boolean compressEnable) { throw new UnsupportedOperationException(); } /** * Sets the required length for data to be considered for compression. * * If the length of the data to be stored is not equal or larger than this * value, it will not be compressed. * * This defaults to 15 KB. * * @param compressThreshold * required length of data to consider compression * @deprecated will be removed in next release. */ public void setCompressThreshold(long compressThreshold) { throw new UnsupportedOperationException(); } /** * Sets default String encoding when storing primitives as Strings. Default * is UTF-8. * * @param defaultEncoding */ public void setDefaultEncoding(String defaultEncoding) { client.setDefaultEncoding(defaultEncoding); } /** * Enables storing primitive types as their String values. * * @param primitiveAsString * if true, then store all primitives as their string value. */ public void setPrimitiveAsString(boolean primitiveAsString) { client.setPrimitiveAsString(primitiveAsString); } /** * Enables/disables sanitizing keys by URLEncoding. * * @param sanitizeKeys * if true, then URLEncode all keys */ public void setSanitizeKeys(boolean sanitizeKeys) { client.setSanitizeKeys(sanitizeKeys); } /** * Checks to see if key exists in cache. * * @param key * the key to look for * @return true if key found in cache, false if not (or if cache is down) */ public boolean keyExists(String key) { return client.keyExists(key); } /** * Deletes an object from cache given cache key. * * @param key * the key to be removed * @return true, if the data was deleted successfully */ public boolean delete(String key) { return client.delete(key); } /** * Deletes an object from cache given cache key and expiration date. * * @deprecated not supported in memcached 1.4+ * @param key * the key to be removed * @param expiry * when to expire the record. * @return true, if the data was deleted successfully */ public boolean delete(String key, Date expiry) { return client.delete(key, expiry); } /** * Deletes an object from cache given cache key, a delete time, and an * optional hashcode. * * The item is immediately made non retrievable.
* Keep in mind {@link #add(String, Object) add} and * {@link #replace(String, Object) replace}
* will fail when used with the same key will fail, until the server reaches * the
* specified time. However, {@link #set(String, Object) set} will succeed,
* and the new value will not be deleted. * * @deprecated not supported in memcached 1.4+ * @param key * the key to be removed * @param hashCode * if not null, then the int hashcode to use * @param expiry * when to expire the record. * @return true, if the data was deleted successfully */ public boolean delete(String key, Integer hashCode, Date expiry) { return client.delete(key, hashCode, expiry); } /** * Stores data on the server; only the key and the value are specified. * * @param key * key to store data under * @param value * value to store * @return true, if the data was successfully stored */ public boolean set(String key, Object value) { return client.set(key, value); } /** * Stores data on the server; only the key and the value are specified. * * @param key * key to store data under * @param value * value to store * @param hashCode * if not null, then the int hashcode to use * @return true, if the data was successfully stored */ public boolean set(String key, Object value, Integer hashCode) { return client.set(key, value, hashCode); } /** * Stores data on the server; the key, value, and an expiration time are * specified. * * @param key * key to store data under * @param value * value to store * @param expiry * when to expire the record * @return true, if the data was successfully stored */ public boolean set(String key, Object value, Date expiry) { return client.set(key, value, expiry); } /** * Stores data on the server; the key, value, and an expiration time are * specified. * * @param key * key to store data under * @param value * value to store * @param expiry * when to expire the record * @param hashCode * if not null, then the int hashcode to use * @return true, if the data was successfully stored */ public boolean set(String key, Object value, Date expiry, Integer hashCode) { return client.set(key, value, expiry, hashCode); } /** * Adds data to the server; only the key and the value are specified. * * @param key * key to store data under * @param value * value to store * @return true, if the data was successfully stored */ public boolean add(String key, Object value) { return client.add(key, value); } /** * Adds data to the server; the key, value, and an optional hashcode are * passed in. * * @param key * key to store data under * @param value * value to store * @param hashCode * if not null, then the int hashcode to use * @return true, if the data was successfully stored */ public boolean add(String key, Object value, Integer hashCode) { return client.add(key, value, hashCode); } /** * Adds data to the server; the key, value, and an expiration time are * specified. * * @param key * key to store data under * @param value * value to store * @param expiry * when to expire the record * @return true, if the data was successfully stored */ public boolean add(String key, Object value, Date expiry) { return client.add(key, value, expiry); } /** * Adds data to the server; the key, value, and an expiration time are * specified. * * @param key * key to store data under * @param value * value to store * @param expiry * when to expire the record * @param hashCode * if not null, then the int hashcode to use * @return true, if the data was successfully stored */ public boolean add(String key, Object value, Date expiry, Integer hashCode) { return client.add(key, value, expiry, hashCode); } /** * Updates data on the server; only the key and the value are specified. * * @param key * key to store data under * @param value * value to store * @return true, if the data was successfully stored */ public boolean replace(String key, Object value) { return client.replace(key, value); } /** * Updates data on the server; only the key and the value and an optional * hash are specified. * * @param key * key to store data under * @param value * value to store * @param hashCode * if not null, then the int hashcode to use * @return true, if the data was successfully stored */ public boolean replace(String key, Object value, Integer hashCode) { return client.replace(key, value, hashCode); } /** * Updates data on the server; the key, value, and an expiration time are * specified. * * @param key * key to store data under * @param value * value to store * @param expiry * when to expire the record * @return true, if the data was successfully stored */ public boolean replace(String key, Object value, Date expiry) { return client.replace(key, value, expiry); } /** * Updates data on the server; the key, value, and an expiration time are * specified. * * @param key * key to store data under * @param value * value to store * @param expiry * when to expire the record * @param hashCode * if not null, then the int hashcode to use * @return true, if the data was successfully stored */ public boolean replace(String key, Object value, Date expiry, Integer hashCode) { return client.replace(key, value, expiry, hashCode); } /** * Store a counter to memcached given a key * * @param key * cache key * @param counter * number to store * @return true/false indicating success */ public boolean storeCounter(String key, Long counter) { return storeCounter(key, counter, null, null); } /** * Store a counter to memcached given a key * * @param key * cache key * @param counter * number to store * @param date * when to expire the record * @return true/false indicating success */ public boolean storeCounter(String key, Long counter, Date date) { return storeCounter(key, counter, date, null); } /** * Store a counter to memcached given a key * * @param key * cache key * @param counter * number to store * @param date * when to expire the record * @param hashCode * if not null, then the int hashcode to use * @return true/false indicating success */ public boolean storeCounter(String key, Long counter, Date date, Integer hashCode) { return set(key, counter, date, hashCode); } /** * Store a counter to memcached given a key * * @param key * cache key * @param counter * number to store * @param hashCode * if not null, then the int hashcode to use * @return true/false indicating success */ public boolean storeCounter(String key, Long counter, Integer hashCode) { return storeCounter(key, counter, null, hashCode); } /** * Returns value in counter at given key as long. * * @param key * cache ket * @return counter value or -1 if not found */ public long getCounter(String key) { return getCounter(key, null); } /** * Returns value in counter at given key as long. * * @param key * cache ket * @param hashCode * if not null, then the int hashcode to use * @return counter value or -1 if not found */ public long getCounter(String key, Integer hashCode) { if (key == null) { if (log.isErrorEnabled()) log.error("null key for getCounter()"); return -1; } long counter = -1; try { counter = Long.parseLong((String) get(key, hashCode, true)); } catch (Exception ex) { // if we have an errorHandler, use its hook if (errorHandler != null) errorHandler.handleErrorOnGet(this, ex, key); // not found or error getting out if (log.isDebugEnabled()) log.info(String.format("Failed to parse Long value for key: %s", key)); } return counter; } /** * Thread safe way to initialize and increment a counter. * * @param key * key where the data is stored * @return value of incrementer */ public long addOrIncr(String key) { return client.addOrIncr(key); } /** * Thread safe way to initialize and increment a counter. * * @param key * key where the data is stored * @param inc * value to set or increment by * @return value of incrementer */ public long addOrIncr(String key, long inc) { return client.addOrIncr(key, inc); } /** * Thread safe way to initialize and increment a counter. * * @param key * key where the data is stored * @param inc * value to set or increment by * @param hashCode * if not null, then the int hashcode to use * @return value of incrementer */ public long addOrIncr(String key, long inc, Integer hashCode) { return client.addOrIncr(key, inc, hashCode); } /** * Thread safe way to initialize and decrement a counter. * * @param key * key where the data is stored * @return value of incrementer */ public long addOrDecr(String key) { return client.addOrDecr(key); } /** * Thread safe way to initialize and decrement a counter. * * @param key * key where the data is stored * @param inc * value to set or increment by * @return value of incrementer */ public long addOrDecr(String key, long inc) { return client.addOrDecr(key, inc); } /** * Thread safe way to initialize and decrement a counter. * * @param key * key where the data is stored * @param inc * value to set or increment by * @param hashCode * if not null, then the int hashcode to use * @return value of incrementer */ public long addOrDecr(String key, long inc, Integer hashCode) { return client.addOrDecr(key, inc, hashCode); } /** * Increment the value at the specified key by 1, and then return it.
* Please make sure setPrimitiveAsString=true if the key/value pair is * stored with set command. * * @param key * key where the data is stored * @return -1, if the key is not found, the value after incrementing * otherwise */ public long incr(String key) { return client.incr(key); } /** * Increment the value at the specified key by passed in val.
* Please make sure setPrimitiveAsString=true if the key/value pair is * stored with set command. * * @param key * key where the data is stored * @param inc * how much to increment by * @return -1, if the key is not found, the value after incrementing * otherwise */ public long incr(String key, long inc) { return client.incr(key, inc); } /** * Increment the value at the specified key by the specified increment, and * then return it.
* Please make sure setPrimitiveAsString=true if the key/value pair is * stored with set command. * * @param key * key where the data is stored * @param inc * how much to increment by * @param hashCode * if not null, then the int hashcode to use * @return -1, if the key is not found, the value after incrementing * otherwise */ public long incr(String key, long inc, Integer hashCode) { return client.incr(key, inc, hashCode); } /** * Decrement the value at the specified key by 1, and then return it.
* Please make sure setPrimitiveAsString=true if the key/value pair is * stored with set command. * * @param key * key where the data is stored * @return -1, if the key is not found, the value after incrementing * otherwise */ public long decr(String key) { return client.decr(key); } /** * Decrement the value at the specified key by passed in value, and then * return it.
* Please make sure setPrimitiveAsString=true if the key/value pair is * stored with set command. * * @param key * key where the data is stored * @param inc * how much to increment by * @return -1, if the key is not found, the value after incrementing * otherwise */ public long decr(String key, long inc) { return client.decr(key, inc); } /** * Decrement the value at the specified key by the specified increment, and * then return it.
* Please make sure setPrimitiveAsString=true if the key/value pair is * stored with set command. * * @param key * key where the data is stored * @param inc * how much to increment by * @param hashCode * if not null, then the int hashcode to use * @return -1, if the key is not found, the value after incrementing * otherwise */ public long decr(String key, long inc, Integer hashCode) { return client.decr(key, inc, hashCode); } /** * Retrieve a key from the server, using a specific hash. * * If the data was compressed or serialized when compressed, it will * automatically
* be decompressed or serialized, as appropriate. (Inclusive or)
*
* Non-serialized data will be returned as a string, so explicit conversion * to
* numeric types will be necessary, if desired
* * @param key * key where data is stored * @return the object that was previously stored, or null if it was not * previously stored */ public Object get(String key) { return client.get(key); } /** * Retrieve a key from the server, using a specific hash. * * If the data was compressed or serialized when compressed, it will * automatically
* be decompressed or serialized, as appropriate. (Inclusive or)
*
* Non-serialized data will be returned as a string, so explicit conversion * to
* numeric types will be necessary, if desired
* * @param key * key where data is stored * @param hashCode * if not null, then the int hashcode to use * @return the object that was previously stored, or null if it was not * previously stored */ public Object get(String key, Integer hashCode) { return client.get(key, hashCode); } public MemcachedItem gets(String key) { return client.gets(key); } public MemcachedItem gets(String key, Integer hashCode) { return client.gets(key, hashCode); } public void setTransCoder(TransCoder transCoder) { client.setTransCoder(transCoder); } /** * Retrieve a key from the server, using a specific hash. * * If the data was compressed or serialized when compressed, it will * automatically
* be decompressed or serialized, as appropriate. (Inclusive or)
*
* Non-serialized data will be returned as a string, so explicit conversion * to
* numeric types will be necessary, if desired
* * @param key * key where data is stored * @param hashCode * if not null, then the int hashcode to use * @param asString * if true, then return string val * @return the object that was previously stored, or null if it was not * previously stored */ public Object get(String key, Integer hashCode, boolean asString) { return client.get(key, hashCode, asString); } /** * Retrieve multiple objects from the memcache. * * This is recommended over repeated calls to {@link #get(String) get()}, * since it
* is more efficient.
* * @param keys * String array of keys to retrieve * @return Object array ordered in same order as key array containing * results */ public Object[] getMultiArray(String[] keys) { return client.getMultiArray(keys); } /** * Retrieve multiple objects from the memcache. * * This is recommended over repeated calls to {@link #get(String) get()}, * since it
* is more efficient.
* * @param keys * String array of keys to retrieve * @param hashCodes * if not null, then the Integer array of hashCodes * @return Object array ordered in same order as key array containing * results */ public Object[] getMultiArray(String[] keys, Integer[] hashCodes) { return client.getMultiArray(keys, hashCodes); } /** * Retrieve multiple objects from the memcache. * * This is recommended over repeated calls to {@link #get(String) get()}, * since it
* is more efficient.
* * @param keys * String array of keys to retrieve * @param hashCodes * if not null, then the Integer array of hashCodes * @param asString * if true, retrieve string vals * @return Object array ordered in same order as key array containing * results */ public Object[] getMultiArray(String[] keys, Integer[] hashCodes, boolean asString) { return client.getMultiArray(keys, hashCodes, asString); } /** * Retrieve multiple objects from the memcache. * * This is recommended over repeated calls to {@link #get(String) get()}, * since it
* is more efficient.
* * @param keys * String array of keys to retrieve * @return a hashmap with entries for each key is found by the server, keys * that are not found are not entered into the hashmap, but * attempting to retrieve them from the hashmap gives you null. */ public Map getMulti(String[] keys) { return getMulti(keys, null); } /** * Retrieve multiple keys from the memcache. * * This is recommended over repeated calls to {@link #get(String) get()}, * since it
* is more efficient.
* * @param keys * keys to retrieve * @param hashCodes * if not null, then the Integer array of hashCodes * @return a hashmap with entries for each key is found by the server, keys * that are not found are not entered into the hashmap, but * attempting to retrieve them from the hashmap gives you null. */ public Map getMulti(String[] keys, Integer[] hashCodes) { return client.getMulti(keys, hashCodes); } /** * Retrieve multiple keys from the memcache. * * This is recommended over repeated calls to {@link #get(String) get()}, * since it
* is more efficient.
* * @param keys * keys to retrieve * @param hashCodes * if not null, then the Integer array of hashCodes * @param asString * if true then retrieve using String val * @return a hashmap with entries for each key is found by the server, keys * that are not found are not entered into the hashmap, but * attempting to retrieve them from the hashmap gives you null. */ public Map getMulti(String[] keys, Integer[] hashCodes, boolean asString) { return client.getMulti(keys, hashCodes, asString); } /** * Invalidates the entire cache. * * Will return true only if succeeds in clearing all servers. * * @return success true/false */ public boolean flushAll() { return client.flushAll(); } /** * Invalidates the entire cache. * * Will return true only if succeeds in clearing all servers. If pass in * null, then will try to flush all servers. * * @param servers * optional array of host(s) to flush (host:port) * @return success true/false */ public boolean flushAll(String[] servers) { return client.flushAll(servers); } /** * Retrieves stats for all servers. * * Returns a map keyed on the servername. The value is another map which * contains stats with stat name as key and value as value. * * @return Stats map */ public Map> stats() { return client.stats(); } /** * Retrieves stats for passed in servers (or all servers). * * Returns a map keyed on the servername. The value is another map which * contains stats with stat name as key and value as value. * * @param servers * string array of servers to retrieve stats from, or all if this * is null * @return Stats map */ public Map> stats(String[] servers) { return client.stats(servers); } /** * Retrieves stats items for all servers. * * Returns a map keyed on the servername. The value is another map which * contains item stats with itemname:number:field as key and value as value. * * @return Stats map */ public Map> statsItems() { return client.statsItems(); } /** * Retrieves stats for passed in servers (or all servers). * * Returns a map keyed on the servername. The value is another map which * contains item stats with itemname:number:field as key and value as value. * * @param servers * string array of servers to retrieve stats from, or all if this * is null * @return Stats map */ public Map> statsItems(String[] servers) { return client.statsItems(servers); } /** * Retrieves stats items for all servers. * * Returns a map keyed on the servername. The value is another map which * contains slabs stats with slabnumber:field as key and value as value. * * @return Stats map */ public Map> statsSlabs() { return client.statsSlabs(); } /** * Retrieves stats for passed in servers (or all servers). * * Returns a map keyed on the servername. The value is another map which * contains slabs stats with slabnumber:field as key and value as value. * * @param servers * string array of servers to retrieve stats from, or all if this * is null * @return Stats map */ public Map> statsSlabs(String[] servers) { return client.statsSlabs(servers); } /** * Retrieves items cachedump for all servers. * * Returns a map keyed on the servername. The value is another map which * contains cachedump stats with the cachekey as key and byte size and unix * timestamp as value. * * @param slabNumber * the item number of the cache dump * @return Stats map */ public Map> statsCacheDump(int slabNumber, int limit) { return client.statsCacheDump(slabNumber, limit); } /** * Retrieves stats for passed in servers (or all servers). * * Returns a map keyed on the servername. The value is another map which * contains cachedump stats with the cachekey as key and byte size and unix * timestamp as value. * * @param servers * string array of servers to retrieve stats from, or all if this * is null * @param slabNumber * the item number of the cache dump * @return Stats map */ public Map> statsCacheDump(String[] servers, int slabNumber, int limit) { return client.statsCacheDump(servers, slabNumber, limit); } public boolean sync(String key, Integer hashCode) { return client.sync(key, hashCode); } public boolean sync(String key) { return client.sync(key); } public boolean syncAll() { return client.syncAll(); } public boolean syncAll(String[] servers) { return client.syncAll(servers); } public boolean append(String key, Object value, Integer hashCode) { return client.append(key, value, hashCode); } public boolean append(String key, Object value) { return client.append(key, value); } public boolean cas(String key, Object value, Integer hashCode, long casUnique) { return client.cas(key, value, hashCode, casUnique); } public boolean cas(String key, Object value, Date expiry, long casUnique) { return client.cas(key, value, expiry, casUnique); } public boolean cas(String key, Object value, Date expiry, Integer hashCode, long casUnique) { return client.cas(key, value, expiry, hashCode, casUnique); } public boolean cas(String key, Object value, long casUnique) { return client.cas(key, value, casUnique); } public boolean prepend(String key, Object value, Integer hashCode) { return client.prepend(key, value, hashCode); } public boolean prepend(String key, Object value) { return client.prepend(key, value); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy