首先记录一下用到的主要代码
protected static MemCachedClient mcc = new MemCachedClient();
static{
// 设置缓存服务器列表,当使用分布式缓存的时,可以指定多个缓存服务器。这里应该设置为多个不同的服务,我这里将两个服务设置为一样的,大家不要向我学习,呵呵。
String[] servers =
{
"115.28.190.73:11211",
"115.28.190.73:11211",
};
// 设置服务器权重
Integer[] weights = {3, 2};
// 创建一个Socked连接池实例
SockIOPool pool = SockIOPool.getInstance();
// 向连接池设置服务器和权重
pool.setServers(servers);
pool.setWeights(weights);
// set some TCP settings
// disable nagle
// set the read timeout to 3 secs
// and don't set a connect timeout
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);
// initialize the connection pool
pool.initialize();
}
记录一些memcache讲的比较好 的文章
memcached
client web app+memcache client
DB
操作流程如下
1检查客户端的请求数据是否在memcached中,如果有直接返回,不在对数据库操作
2如果检查的数据不在memcached中,就去DB中查找数据,返回给memcached一份 客户端一份
3每次更新数据时同时更新memcached和DB
4当分配给memcached的内存用完时,使用lru算法 最近最少使用策略加上到期失效策略,失效数据会首先替换然后最近最少使用的数据
特征:
所有的有效数据都存储在内存中,存取比硬盘快,当内存满后,通过lru算法,自动删除不使用的缓存,但是没有考虑容灾问题,重启机器后,所有数据会丢失
memcached服务器不互相通信,各自独立存取数据,不共享资源。
- Shell>telnet 127.0.0.1 1211 //如果在启动时指定了IP及端口号,这里要作相应改动
连接成功后命令- Stats:统计memcached的各种信息
- Stats reset:重新统计数据
- Stats slabs,显示slabs信息,可以详细看到数据的分段存储情况
- Stats items:显示slab中的item数目
- Stats cachedump 1 0:列出slabs第一段里存的KEY值
- Set|get:保存或获取数据
- STAT evictions 0:表示要腾出新空间给新的item而移动的合法item数目
- Shell>./Memcached-tool 127.0.0.1:11211
- Shell>./Memcached-tool 127.0.0.1:11211 display
- Memcache.php
- Nagios插件
- Cacti模块