com.alisoft.xplatform.asf.cache.memcached.client
类 SockIOPool

java.lang.Object
  继承者 com.alisoft.xplatform.asf.cache.memcached.client.SockIOPool

public class SockIOPool
extends java.lang.Object

This class is a connection pool for maintaning a pool of persistent connections
to memcached servers. The pool must be initialized prior to use. This should typically be early on
in the lifecycle of the JVM instance.

An example of initializing using defaults:

 static
 {
        String[] serverlist = { "cache0.server.com:12345",
                        "cache1.server.com:12345" };
 
        SockIOPool pool = SockIOPool.getInstance();
        pool.setServers(serverlist);
        pool.initialize();
 }
 

An example of initializing using defaults and providing weights for servers:

 static
 {
        String[] serverlist = { "cache0.server.com:12345",
                        "cache1.server.com:12345" };
        Integer[] weights = { new Integer(5), new Integer(2) };
 
        SockIOPool pool = SockIOPool.getInstance();
        pool.setServers(serverlist);
        pool.setWeights(weights);
        pool.initialize();
 }
 

An example of initializing overriding defaults:

 static
 {
        String[] serverlist = { "cache0.server.com:12345",
                        "cache1.server.com:12345" };
        Integer[] weights = { new Integer(5), new Integer(2) };
        int initialConnections = 10;
        int minSpareConnections = 5;
        int maxSpareConnections = 50;
        long maxIdleTime = 1000 * 60 * 30; // 30 minutes
        long maxBusyTime = 1000 * 60 * 5; // 5 minutes
        long maintThreadSleep = 1000 * 5; // 5 seconds
        int socketTimeOut = 1000 * 3; // 3 seconds to block on reads
        int socketConnectTO = 1000 * 3; // 3 seconds to block on initial connections.  If 0, then will use blocking connect (default)
        boolean failover = false; // turn off auto-failover in event of server down     
        boolean nagleAlg = false; // turn off Nagle's algorithm on all sockets in pool  
        boolean aliveCheck = false; // disable health check of socket on checkout
 
        SockIOPool pool = SockIOPool.getInstance();
        pool.setServers(serverlist);
        pool.setWeights(weights);
        pool.setInitConn(initialConnections);
        pool.setMinConn(minSpareConnections);
        pool.setMaxConn(maxSpareConnections);
        pool.setMaxIdle(maxIdleTime);
        pool.setMaxBusyTime(maxBusyTime);
        pool.setMaintSleep(maintThreadSleep);
        pool.setSocketTO(socketTimeOut);
        pool.setNagle(nagleAlg);
        pool.setHashingAlg(SockIOPool.NEW_COMPAT_HASH);
        pool.setAliveCheck(true);
        pool.initialize();
 }
 
The easiest manner in which to initialize the pool is to set the servers and rely on defaults as in the first example.
After pool is initialized, a client will request a SockIO object by calling getSock with the cache key
The client must always close the SockIO object when finished, which will return the connection back to the pool.

An example of retrieving a SockIO object:

        SockIOPool.SockIO sock = SockIOPool.getInstance().getSock( key );
        try {
                sock.write( "version\r\n" );  
                sock.flush();   
                System.out.println( "Version: " + sock.readLine() );  
        }
        catch (IOException ioe) { System.out.println( "io exception thrown" ) };      
 
        sock.close();   
 
优化过的Socket资源池,解决并发低效问题

作者:
wenchu.cenwc

嵌套类摘要
protected static class SockIOPool.MaintThread
          Class which extends thread and handles maintenance of the pool.
static class SockIOPool.SockIO
          MemCached Java client, utility class for Socket IO.
 
字段摘要
static int CONSISTENT_HASH
           
static long MAX_RETRY_DELAY
           
static int NATIVE_HASH
           
static int NEW_COMPAT_HASH
           
static int OLD_COMPAT_HASH
           
static java.util.Random random
           
 
构造方法摘要
protected SockIOPool()
           
 
方法摘要
protected
<T> boolean
addSocketToPool(java.util.concurrent.ConcurrentMap<java.lang.String,java.util.concurrent.ConcurrentMap<SockIOPool.SockIO,T>> pool, java.lang.String host, SockIOPool.SockIO socket, T oldValue, T newValue, boolean needReplace)
          Adds a socket and value to a given pool for the given host.
protected  void clearHostFromPool(java.lang.String host)
          Closes and removes all sockets from specified pool for host.
protected  void closeSocketPool()
          Closes all sockets in the passed in pool.
protected  SockIOPool.SockIO createSocket(java.lang.String host)
          Creates a new SockIO obj for the given server.
 boolean getAliveCheck()
          Returns the current status of the aliveCheck flag.
 SockIOPool.SockIO getConnection(java.lang.String host)
          Returns a SockIO object from the pool for the passed in host.
 boolean getFailback()
          Returns current state of failover flag.
 boolean getFailover()
          Returns current state of failover flag.
 int getHashingAlg()
          Returns current status of customHash flag
 java.lang.String getHost(java.lang.String key)
           
 java.lang.String getHost(java.lang.String key, java.lang.Integer hashcode)
          Gets the host that a particular key / hashcode resides on.
 int getInitConn()
          Returns the current setting for the initial number of connections per server in the available pool.
static SockIOPool getInstance()
          Single argument version of factory used for back compat.
static SockIOPool getInstance(java.lang.String poolName)
          Factory to create/retrieve new pools given a unique poolName.
 long getMaintSleep()
          Returns the current maint thread sleep time.
 long getMaxBusy()
          Returns the current max busy setting.
 int getMaxConn()
          Returns the maximum number of spare connections allowed in available pool.
 long getMaxIdle()
          Returns the current max idle setting.
 int getMinConn()
          Returns the minimum number of spare connections in available pool.
 boolean getNagle()
          Returns current status of nagle flag
static SockIOPool getNewInstance(java.lang.String poolName)
          get new Instance form pool
static java.lang.String getPoolUsage(java.lang.String poolName)
           
 java.lang.String[] getServers()
          Returns the current list of all cache servers.
 SockIOPool.SockIO getSock(java.lang.String key)
          Returns appropriate SockIO object given string cache key.
 SockIOPool.SockIO getSock(java.lang.String key, java.lang.Integer hashCode)
          Returns appropriate SockIO object given string cache key and optional hashcode.
 int getSocketConnectTO()
          Returns the socket timeout for connect.
 int getSocketTO()
          Returns the socket timeout for reads.
 java.lang.Integer[] getWeights()
          Returns the current list of weights.
 void initialize()
          Initializes the pool.
 boolean isInitialized()
          Returns state of pool.
static void removeInstance(java.lang.String poolName)
           
protected  void selfMaint()
          Runs self maintenance on all internal pools.
 void setAliveCheck(boolean aliveCheck)
          Sets the aliveCheck flag for the pool.
 void setFailback(boolean failback)
          Sets the failback flag for the pool.
 void setFailover(boolean failover)
          Sets the failover flag for the pool.
 void setHashingAlg(int alg)
          Sets the hashing algorithm we will use.
 void setInitConn(int initConn)
          Sets the initial number of connections per server in the available pool.
 void setMaintSleep(long maintSleep)
          Set the sleep time between runs of the pool maintenance thread.
 void setMaxBusyTime(long maxBusyTime)
          Sets the max busy time for threads in the busy pool.
 void setMaxConn(int maxConn)
          Sets the maximum number of spare connections allowed in our available pool.
 void setMaxIdle(long maxIdle)
          Sets the max idle time for threads in the available pool.
 void setMinConn(int minConn)
          Sets the minimum number of spare connections to maintain in our available pool.
 void setNagle(boolean nagle)
          Sets the Nagle alg flag for the pool.
 void setServers(java.lang.String[] servers)
          Sets the list of all cache servers.
 void setSocketConnectTO(int socketConnectTO)
          Sets the socket timeout for connect.
 void setSocketTO(int socketTO)
          Sets the socket timeout for reads.
 void setWeights(java.lang.Integer[] weights)
          Sets the list of weights to apply to the server list.
 void shutDown()
          Shuts down the pool.
protected  void startMaintThread()
          Starts the maintenance thread.
protected  void stopMaintThread()
          Stops the maintenance thread.
protected  void updateStatusPool(java.lang.String host, SockIOPool.SockIO socket, int newStatus)
           
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

NATIVE_HASH

public static final int NATIVE_HASH
另请参见:
常量字段值

OLD_COMPAT_HASH

public static final int OLD_COMPAT_HASH
另请参见:
常量字段值

NEW_COMPAT_HASH

public static final int NEW_COMPAT_HASH
另请参见:
常量字段值

CONSISTENT_HASH

public static final int CONSISTENT_HASH
另请参见:
常量字段值

MAX_RETRY_DELAY

public static final long MAX_RETRY_DELAY
另请参见:
常量字段值

random

public static final java.util.Random random
构造方法详细信息

SockIOPool

protected SockIOPool()
方法详细信息

getInstance

public static SockIOPool getInstance(java.lang.String poolName)
Factory to create/retrieve new pools given a unique poolName.

参数:
poolName - unique name of the pool
返回:
instance of SockIOPool

getPoolUsage

public static java.lang.String getPoolUsage(java.lang.String poolName)

getNewInstance

public static SockIOPool getNewInstance(java.lang.String poolName)
get new Instance form pool

参数:
poolName -
返回:

removeInstance

public static void removeInstance(java.lang.String poolName)

getInstance

public static SockIOPool getInstance()
Single argument version of factory used for back compat. Simply creates a pool named "default".

返回:
instance of SockIOPool

initialize

public void initialize()
Initializes the pool.


createSocket

protected SockIOPool.SockIO createSocket(java.lang.String host)
Creates a new SockIO obj for the given server. If server fails to connect, then return null and do not try
again until a duration has passed. This duration will grow
by doubling after each failed attempt to connect.

参数:
host - host:port to connect to
返回:
SockIO obj or null if failed to create

getHost

public java.lang.String getHost(java.lang.String key)
参数:
key -
返回:

getHost

public java.lang.String getHost(java.lang.String key,
                                java.lang.Integer hashcode)
Gets the host that a particular key / hashcode resides on.

参数:
key -
hashcode -
返回:

getSock

public SockIOPool.SockIO getSock(java.lang.String key)
Returns appropriate SockIO object given string cache key.

参数:
key - hashcode for cache key
返回:
SockIO obj connected to server

getSock

public SockIOPool.SockIO getSock(java.lang.String key,
                                 java.lang.Integer hashCode)
Returns appropriate SockIO object given string cache key and optional hashcode. Trys to get SockIO from pool. Fails over to additional pools in event of server failure.

参数:
key - hashcode for cache key
hashCode - if not null, then the int hashcode to use
返回:
SockIO obj connected to server

getConnection

public SockIOPool.SockIO getConnection(java.lang.String host)
Returns a SockIO object from the pool for the passed in host. Meant to be called from a more intelligent method
which handles choosing appropriate server
and failover.

参数:
host - host from which to retrieve object
返回:
SockIO object or null if fail to retrieve one

addSocketToPool

protected <T> boolean addSocketToPool(java.util.concurrent.ConcurrentMap<java.lang.String,java.util.concurrent.ConcurrentMap<SockIOPool.SockIO,T>> pool,
                                      java.lang.String host,
                                      SockIOPool.SockIO socket,
                                      T oldValue,
                                      T newValue,
                                      boolean needReplace)
Adds a socket and value to a given pool for the given host.

参数:
pool - pool to add to
host - host this socket is connected to
socket - socket to add

updateStatusPool

protected void updateStatusPool(java.lang.String host,
                                SockIOPool.SockIO socket,
                                int newStatus)
参数:
host -
socket -
oldStatus -
newStatus -

clearHostFromPool

protected void clearHostFromPool(java.lang.String host)
Closes and removes all sockets from specified pool for host. THIS METHOD IS NOT THREADSAFE, SO BE CAREFUL WHEN USING! Internal utility method.

参数:
pool - pool to clear
host - host to clear

closeSocketPool

protected void closeSocketPool()
Closes all sockets in the passed in pool. Internal utility method.

参数:
pool - pool to close

shutDown

public void shutDown()
Shuts down the pool. Cleanly closes all sockets.
Stops the maint thread.
Nulls out all internal maps


startMaintThread

protected void startMaintThread()
Starts the maintenance thread. This thread will manage the size of the active pool
as well as move any closed, but not checked in sockets
back to the available pool.


stopMaintThread

protected void stopMaintThread()
Stops the maintenance thread.


selfMaint

protected void selfMaint()
Runs self maintenance on all internal pools. This is typically called by the maintenance thread to manage pool size.


isInitialized

public boolean isInitialized()
Returns state of pool.

返回:
true if initialized.

setServers

public void setServers(java.lang.String[] servers)
Sets the list of all cache servers.

参数:
servers - String array of servers [host:port]

getServers

public java.lang.String[] getServers()
Returns the current list of all cache servers.

返回:
String array of servers [host:port]

setWeights

public void setWeights(java.lang.Integer[] weights)
Sets the list of weights to apply to the server list. This is an int array with each element corresponding to an element
in the same position in the server String array.

参数:
weights - Integer array of weights

getWeights

public java.lang.Integer[] getWeights()
Returns the current list of weights.

返回:
int array of weights

setInitConn

public void setInitConn(int initConn)
Sets the initial number of connections per server in the available pool.

参数:
initConn - int number of connections

getInitConn

public int getInitConn()
Returns the current setting for the initial number of connections per server in the available pool.

返回:
number of connections

setMinConn

public void setMinConn(int minConn)
Sets the minimum number of spare connections to maintain in our available pool.

参数:
minConn - number of connections

getMinConn

public int getMinConn()
Returns the minimum number of spare connections in available pool.

返回:
number of connections

setMaxConn

public void setMaxConn(int maxConn)
Sets the maximum number of spare connections allowed in our available pool.

参数:
maxConn - number of connections

getMaxConn

public int getMaxConn()
Returns the maximum number of spare connections allowed in available pool.

返回:
number of connections

setMaxIdle

public void setMaxIdle(long maxIdle)
Sets the max idle time for threads in the available pool.

参数:
maxIdle - idle time in ms

getMaxIdle

public long getMaxIdle()
Returns the current max idle setting.

返回:
max idle setting in ms

setMaxBusyTime

public void setMaxBusyTime(long maxBusyTime)
Sets the max busy time for threads in the busy pool.

参数:
maxBusyTime - idle time in ms

getMaxBusy

public long getMaxBusy()
Returns the current max busy setting.

返回:
max busy setting in ms

setMaintSleep

public void setMaintSleep(long maintSleep)
Set the sleep time between runs of the pool maintenance thread. If set to 0, then the maint thread will not be started.

参数:
maintSleep - sleep time in ms

getMaintSleep

public long getMaintSleep()
Returns the current maint thread sleep time.

返回:
sleep time in ms

setSocketTO

public void setSocketTO(int socketTO)
Sets the socket timeout for reads.

参数:
socketTO - timeout in ms

getSocketTO

public int getSocketTO()
Returns the socket timeout for reads.

返回:
timeout in ms

setSocketConnectTO

public void setSocketConnectTO(int socketConnectTO)
Sets the socket timeout for connect.

参数:
socketConnectTO - timeout in ms

getSocketConnectTO

public int getSocketConnectTO()
Returns the socket timeout for connect.

返回:
timeout in ms

setFailover

public void setFailover(boolean failover)
Sets the failover flag for the pool. If this flag is set to true, and a socket fails to connect,
the pool will attempt to return a socket from another server
if one exists. If set to false, then getting a socket
will return null if it fails to connect to the requested server.

参数:
failover - true/false

getFailover

public boolean getFailover()
Returns current state of failover flag.

返回:
true/false

setFailback

public void setFailback(boolean failback)
Sets the failback flag for the pool. If this is true and we have marked a host as dead, will try to bring it back. If it is false, we will never try to resurrect a dead host.

参数:
failback - true/false

getFailback

public boolean getFailback()
Returns current state of failover flag.

返回:
true/false

setAliveCheck

public void setAliveCheck(boolean aliveCheck)
Sets the aliveCheck flag for the pool. When true, this will attempt to talk to the server on every connection checkout to make sure the connection is still valid. This adds extra network chatter and thus is defaulted off. May be useful if you want to ensure you do not have any problems talking to the server on a dead connection.

参数:
aliveCheck - true/false

getAliveCheck

public boolean getAliveCheck()
Returns the current status of the aliveCheck flag.

返回:
true / false

setNagle

public void setNagle(boolean nagle)
Sets the Nagle alg flag for the pool. If false, will turn off Nagle's algorithm on all sockets created.

参数:
nagle - true/false

getNagle

public boolean getNagle()
Returns current status of nagle flag

返回:
true/false

setHashingAlg

public void setHashingAlg(int alg)
Sets the hashing algorithm we will use. The types are as follows. SockIOPool.NATIVE_HASH (0) - native String.hashCode() - fast (cached) but not compatible with other clients SockIOPool.OLD_COMPAT_HASH (1) - original compatibility hashing alg (works with other clients) SockIOPool.NEW_COMPAT_HASH (2) - new CRC32 based compatibility hashing algorithm (fast and works with other clients)

参数:
alg - int value representing hashing algorithm

getHashingAlg

public int getHashingAlg()
Returns current status of customHash flag

返回:
true/false


Copyright © 2009 . All Rights Reserved.