最近为公司开发一个缓存组件,就研究了一下memcached服务器,使用的java客户端是:memcached client for java(https://github.com/gwhalin/Memcached-Java-Client)2.5.3。在此client的基础上进行了再次封装,实现了两个缓存:通用分布式缓存(CommonCache)和集群分布式缓存(ClusterCache)。(注意:memcached服务器需要自己安装部署,我用的最新版1.4.5 http://memcached.org/)
对于memcached的客户端初始化在CacheFactory中通过读取配置文件cacheConfig.xml完成。通用分布式缓存,只是一个简单的封装,利用memcached client for java提供的分布式支持来实现,这里主要说一下clusterCache的实现思想:对存入的缓存对象的key值进行一次hash,找到对应的服务器存入,然后根据一定的规则再次进行hash,找到另外一个不同的服务器存入,取缓存时,先对要取的key值进行一次hash,找到主服务器,如果获取失败或者获取到的值为null,就对key进行再次hash,找到其从服务器,从这台服务器取缓存结果(如果取到结果就异步的更新到主服务器),这样就形成了主从式集群缓存。特点是:没有绝对的主节点和从节点,正常情况下所有服务器共同承担缓存服务器,在一台服务器出现异常时其他服务器共同承担增加的访问压力。
拓扑结构如下:
这里对ClusterCache.java 中的set方法做简要分析:
//把数据放入缓存,如果与key对应的缓存值已存在,则替换
public boolean set(String key, T value) {
if (key == null) {
return false;
}
key = base + key;//这里对key值做了一个简单的处理,请忽略之...
boolean result = false;
if (pool.getServers().length < 2) {//如果只设置了一个服务器,则直接存入
result = memCachedClient.set(key, value);
} else {
int hashCode = HashCodeUtil.getHash(key);//一次hash算法
result = memCachedClient.set(key, value, hashCode);//存入主服务器
hashCode = getRehashCode(key, hashCode);//二次hash算法
memCachedClient.set(key, value, hashCode);//存入从服务器
}
return result;
}
//rehash方法
private int getRehashCode(String key, int oldHashcode) {
String host = pool.getHost(key, oldHashcode);//获取主服务
int rehashTries = 0;
int hashCode = HashCodeUtil.getHash(rehashTries + key);
while (host.equals(pool.getHost(key, hashCode))) {//查找从服务器,直到查找到不同的一台服务器为止
rehashTries++;
hashCode = HashCodeUtil.getHash(rehashTries + key);
}
return hashCode;
}
具体的实现代码在附件中。
- 大小: 18.7 KB
- 大小: 13.3 KB
分享到:
相关推荐
在实际使用中,通常会开发 Java 客户端库来封装 Memcached 的操作,提供更方便的 API。封装过程可能包括: 1. **连接池管理**:为了提高性能,客户端可以使用连接池管理多个到 Memcached 服务器的连接,避免频繁...
【Memcached 缓存系统详解】 Memcached 是一个高性能、分布式的内存对象缓存系统,主要用于减少数据库...在实际应用中,我们需要根据业务需求,对Java客户端进行适当封装和优化,以充分发挥其性能并降低数据库压力。
1. **安装库**:首先,需要安装适用于.NET的Memcached客户端库,如Enyim.Caching或Memcached.ClientLibrary等。 2. **创建缓存策略**:定义一个缓存策略类,该类将负责处理Memcached的增删查改操作。这通常包括添加...
MemCachedClient client = new MemCachedClient(); String[] addr = {"127.0.0.1:11211"}; Integer[] weights = {3}; SockIOPool pool = SockIOPool.getInstance(); pool.setServers(addr); pool.setWeights...
官方提供的Memcached Client for Java基于Java BIO实现,SpyMemcached和XMemcached则是基于Java NIO的实现,其中XMemcached在并发性能上表现更优,SpyMemcached也有不错的性能。在实际应用中,可以根据项目需求选择...
MemCachedClient client = new MemCachedClient(); String[] addr = {"***.*.*.*:11211"}; Integer[] weights = {3}; SockIOPool pool = SockIOPool.getInstance(); pool.setServers(addr); pool.setWeights...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
在实际项目中,你会看到类似`DBConnection`的类用于封装连接,`SQLExecutor`处理SQL语句,`CacheClient`进行缓存操作等。 总结来说,"数据库操作API封装"意味着将数据库操作的细节隐藏在库或类中,为开发者提供简洁...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...
google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 SpeechLion.tar SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来...