Memcached-Java-Client 3.0.0 API 解析

  Memcached-Java-Client是一个Memcached Java客户端API,相对比较古老了,Github已经停止更新了,最后时间已经是2012年左右的事情了。但不论其是否活跃,但对于研究或者应用Memcached来说,并没有太大的妨碍。

  Github地址:http://github.com/gwhalin/Memcached-Java-Client。

  源码搭建

  首先访问Github源码地址,选择相应版本就可以,本文选择3.0.0版本源码进行搭建。

在这里插入图片描述

  源码是依赖Maven构建的,只需按照正常的Maven项目导入到Eclipse中即可。

在这里插入图片描述

  Memcached-Java-Client主要包括SockIOPool和MemCachedClient两个类,下面对两个类进行详细解析。

  SockIOPool

  ● public static synchronized SockIOPool getInstance(String poolName)

  根据给定池名称创建或者查找池。

  ● public static SockIOPool getInstance(boolean isTcp)

  根据给定是否TCP标志创建或者查找池。

  ● public static SockIOPool getInstance(String poolName, boolean isTcp)

  根据给定池名称和是否TCP标志创建或者查找池。

  ● public static SockIOPool getInstance()

  默认池方法,默认池名称是default。

  ● public void setServers(String[] servers)

  设置缓存服务器列表,格式为host:port。

  ● public void setWeights(Integer[] weights)

  设置缓存服务器权重,与servers数组一一对应。

  ● public void setInitConn(int initConn)

  设置可用池中每个服务器的初始连接数。

  ● public void setMinConn(int minConn)

  设置可用池中要维护的最小备用连接数。

  ● public void setMaxConn(int maxConn)

  设置可用池中允许的最大备用连接数。

  ● public void setMaxBusyTime(long maxBusyTime)

  设置池中线程最大繁忙时间。

  ● public void setSocketTO(int socketTO)

  设置套接字读取的超时时间。

  ● public void setSocketConnectTO(int socketConnectTO)

  设置套接字连接的超时时间。

  ● public void setMaxIdle(long maxIdle)

  设置可用池中线程的最长空闲时间。

  ● public void setMaintSleep(long maintSleep)

  设置池维护线程运行之间的睡眠时间。如果设置为0,则维护线程将不会启动。

  ● public void setFailover(boolean failover)

  设置池的故障转移标志。

  如果此标志设置为true,并且套接字无法连接,则池将尝试从另一个服务器返回套接字(如果存在)。如果设置为false,那么如果无法连接到请求的服务器,则获取套接字将返回null。

  ● public void setFailback(boolean failback)

​  设置池的故障回复标志。

  如果是true,池会尝试恢复存在问题的连接。如果是false,池不会做这样的尝试。

  ● public void setAliveCheck(boolean aliveCheck)

  设置池的心跳检查标志。

  如果为true,则将尝试在每次连接退出时与服务器对话,以确保连接仍然有效。这会增加额外的网络通信,因此默认为关闭。如果要确保在断开连接的情况下与服务器通信时不会出现任何问题,则可能会很有用。

  ● public void setNagle(boolean nagle)

  设置是否使用Nagle算法,因为我们的通讯数据量通常都比较大(相对TCP控制数据)而且要求响应及时,因此该值需要设置为false(默认是true)。

  ● public void setHashingAlg(int alg)

  设置hash算法。

  0:SockIOPool.NATIVE_HASH,使用String.hashCode()获得hash code,该方法依赖JDK,可能和其他客户端不兼容,建议不使用。

  1:SockIOPool.OLD_COMPAT_HASH,使用original 兼容hash算法,兼容其他客户端。

  2:SockIOPool.NEW_COMPAT_HASH,使用CRC32兼容hash算法,兼容其他客户端,性能优于original算法。

  3:SockIOPool.CONSISTENT_HASH,使用MD5算法实现的一致性哈希。

  ● public void initialize()

  初始化连接池。

  ● public void shutDown()

  关闭连接池。

  清除并关闭所有连接。

  在Memcached 1.4+中,用户可以为每个Memcached项指定内存大小。

  可以在服务器端用参数"-I"来指定它。

  在客户端中,使用默认值1Mb设置最大Memcached项大小。

  在这种情况下,可以扩展任意大小,需要确保客户端有足够的内存,因为使用直接缓冲区来保存内存,它们在关闭之前是不会释放的。

  MemCachedClient

  ● public void setPrimitiveAsString(boolean primitiveAsString)

  允许将基础类型存储为其字符串格式。

  ● public void setDefaultEncoding(String defaultEncoding)

  设置允许将基础类型存储为其字符串格式时使用的编码。默认值为UTF-8。

  ● public void setSanitizeKeys(boolean sanitizeKeys)

  启用或禁用使用URLEncoding清理键值。

  ● public boolean keyExists(String key)

​  检查缓存中是否存在指定键。

  ● public boolean delete(String key)

  删除缓存中指定的键。

  ● public boolean set(String key, Object value)

  将指定的键值对存储到缓存中。

  ● public boolean set(String key, Object value, Integer hashCode)

  将指定的键值对存储到缓存中,并指定hashCode。

  ● public boolean set(String key, Object value, Date expiry)

  将指定的键值对存储到缓存中,并指定过期时间。

  ● public boolean set(String key, Object value, Date expiry, Integer hashCode)

  将指定的键值对存储到缓存中,并指定hashCode和过期时间。

  ● public boolean add(String key, Object value)

  将指定的键值对存储到缓存中。

  若指定的键存在,且未过期,则不会更新数据。其他情况都更新数据。

  ● public boolean add(String key, Object value, Date expiry)

  将指定的键值对存储到缓存中,并指定过期时间。

  若指定的键存在,且未过期,则不会更新数据。其他情况都更新数据。

  ● public boolean add(String key, Object value, Date expiry, Integer hashCode)

  将指定的键值对存储到缓存中,并指定hashCode和过期时间。

  若指定的键存在,且未过期,则不会更新数据。其他情况都更新数据。

  ● public boolean replace(String key, Object value)

  将指定的键的值替换掉。

  ● public boolean replace(String key, Object value, Integer hashCode)

  将指定的键的值替换掉,并指定hashCode。

  ● public boolean replace(String key, Object value, Date expiry)

  将指定的键的值替换掉,并设置过期时间。

  ● public boolean replace(String key, Object value, Date expiry, Integer hashCode)

  将指定的键的值替换掉,并设置hashCode和过期时间。

  ● public boolean storeCounter(String key, Long counter)

  根据指定键存储计数器。

  ● public boolean storeCounter(String key, Long counter, Date date)

  根据指定键存储计数器,并指定过期时间。

  ● public boolean storeCounter(String key, Long counter, Date date, Integer hashCode)

  根据指定键存储计数器,并指定hashCode和过期时间。

  ● public boolean storeCounter(String key, Long counter, Integer hashCode)

  根据指定键存储计数器,并指定hashCode。

  ● public long addOrIncr(String key)

  将指定的键和默认值0存储到缓存中,若键存在则自增。

  ● public long addOrIncr(String key, long inc)

  将指定的键和值存储到缓存中,若键存在则增加。

  ● public long addOrIncr(String key, long inc, Integer hashCode)

  将指定的键和值存储到缓存中,若键存在则增加,并指定hashCode。

  ● public long addOrDecr(String key)

  将指定的键和默认值0存储到缓存中,若键存在则自减。

  ● public long addOrDecr(String key, long inc)

  将指定的键和值存储到缓存中,若键存在则减少。

  ● public long addOrDecr(String key, long inc, Integer hashCode)

  将指定的键和值存储到缓存中,若键存在则减少,并指定hashCode。

  ● public long incr(String key)

  将指定键处的值递增1,然后返回它。

  如果使用set命令存储键/值对,确保setPrimitiveAsString=true。

  ● public long incr(String key, long inc)

  通过传入val在指定键处递增值。

  如果使用set命令存储键/值对,确保setPrimitiveAsString=true。

  ● public long incr(String key, long inc, Integer hashCode)

  通过传入val在指定键处递增值。

  如果使用set命令存储键/值对,确保setPrimitiveAsString=true,并指定hashCode。

  ● public long decr(String key)

  将指定键处的值递减1,然后返回它。

  如果使用set命令存储键/值对,确保setPrimitiveAsString=true。

  ● public long decr(String key, long inc)

  通过传入val在指定键处递减值。

  如果使用set命令存储键/值对,确保setPrimitiveAsString=true。

  ● public long decr(String key, long inc, Integer hashCode)

  通过传入val在指定键处递减值。

  如果使用set命令存储键/值对,确保setPrimitiveAsString=true,并指定hashCode。

  ● public Object get(String key)

  获取指定的键对应的值。

  ● public Object get(String key, Integer hashCode, boolean asString)

  获取指定的键对应的值,并指定hashCode。

  ● public MemcachedItem gets(String key)

  获取指定的key对应的值,值包含cas token。

  ● public MemcachedItem gets(String key, Integer hashCode)

  获取指定的key对应的值,值包含cas token,并指定hashCode。

  ● public Object[] getMultiArray(String[] keys)

  批量获取指定的键数组对应的值。

  ● public Object[] getMultiArray(String[] keys, Integer[] hashCodes)

  批量获取指定的键数组对应的值,并指定hashCode。

  ● public Object[] getMultiArray(String[] keys, Integer[] hashCodes, boolean asString)

  批量获取指定的键数组对应的值,并指定hashCode。

  ● public Map<String, Object> getMulti(String[] keys)

  批量获取指定的键数组对应的值。

  ● public Map<String, Object> getMulti(String[] keys, Integer[] hashCodes)

​  批量获取指定的键数组对应的值,并指定hashCode。

  ● public Map<String, Object> getMulti(String[] keys, Integer[] hashCodes, boolean asString)

  批量获取指定的键数组对应的值,并指定hashCode。

  ● public boolean flushAll()

  清理所有缓存服务器上的缓存内容。

  ● public boolean flushAll(String[] servers)

  清理指定缓存服务器上的缓存内容。

  ● public Map<String, Map<String, String>> stats()

  返回所有服务器的统计信息。

  ● public Map<String, Map<String, String>> stats(String[] servers)

  返回指定服务器的统计信息。

  ● public Map<String, Map<String, String>> statsItems()

  返回所有服务器的item的统计信息。

  ● public Map<String, Map<String, String>> statsItems(String[] servers)

  返回指定服务器的item的统计信息。

  ● public Map<String, Map<String, String>> statsSlabs()

  返回所有服务器的slab的统计信息。

  ● public Map<String, Map<String, String>> statsSlabs(String[] servers)

  返回指定服务器的slab的统计信息。

  ● public Map<String, Map<String, String>> statsCacheDump(int slabNumber, int limit)

  返回所有服务器的内存DUMP统计信息。

  ● public Map<String, Map<String, String>> statsCacheDump(String[] servers, int slabNumber, int limit)

  返回指定服务器的内存DUMP统计信息。

  ● public boolean append(String key, Object value)

  在指定的键对应的值后面追加值。

  ● public boolean append(String key, Object value, Integer hashCode)

  在指定的键对应的值后面追加值,并指定hashCode。

  ● public boolean cas(String key, Object value, long casUnique)

  以CAS的方式将指定的键值对存储到缓存中,指定需要比较的cas token。

  ● public boolean cas(String key, Object value, Integer hashCode, long casUnique)

  以CAS的方式将指定的键值对存储到缓存中,指定需要比较的cas token,并指定hashCode。

  ● public boolean cas(String key, Object value, Date expiry, long casUnique)

  以CAS的方式将指定的键值对存储到缓存中,指定需要比较的cas token,并指定过期时间。

  ● public boolean cas(String key, Object value, Date expiry, Integer hashCode, long casUnique)

​  以CAS的方式将指定的键值对存储到缓存中,指定需要比较的cas token,并指定hashCode和过期时间。

  ● public boolean prepend(String key, Object value)

  在指定的键对应的值前面追加值。

  ● public boolean prepend(String key, Object value, Integer hashCode)

  在指定的键对应的值前面追加值,并指定hashCode。

  总结

  Memcached-Java-Client的API,3.0.0版本较之前弃用了一些看起比较累赘的功能,如:setCompressEnable、setCompressThreshold等。文中罗列基本是Memcached主要API,与Memcached的命令相对应,并提供了分片机制,可以通过客户端完成Memcached的集群。

  若文中存在错误和不足,欢迎指正!