`
fun_virus
  • 浏览: 4117 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Memcached的管理工具实现

阅读更多
Memcached的好处没必要多说,网上一搜一大把的,那就简单说说Memcached适合用于场合:
1、Memcached是“分布式”的内存对象缓存系统,那些不是分布式的,不需要共享的,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源。

2、Memcached在很多时候都是作为数据库前端cache或者一些不重要信息的缓存。因为它比数据库少了很多SQL解析、IO操作等开销,而且它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能。在游戏中,访问同样的数据是很频繁的,memcached可以大大降低数据库压力,使系统执行效率提升。另外,memcached也经常作为服务器之间数据共享的存储媒介,例如游戏中的聊天数据就可以保存在memcached中,被多个服务器共享。

3、Memcached使用内存管理数据,当服务器重启,或者memcached进程中止,数据便会丢失,所以memcached不能用来持久保存数据。memcached使用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接,它和使用磁盘的数据库系统相比,好处在于没有过多的开销和直接的读写方式,它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了,memcached进程本身并不占用多少CPU资源的情况。

接下来说一下memcached管理工具的实现。

自定义的xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
   <memcached>
	<pool name="sys" servers="127.0.0.1:11211" weights="3" init_conn="3" min_conn="3" max_conn="10"/> <!-- 保存系统数据 -->
	<pool name="chat" servers="127.0.0.1:11211" weights="3" init_conn="3" min_conn="3" max_conn="10"/> <!-- 保存聊天数据 -->
   </memcached>
</root>


管理器的实现:
public class MemCachedMgr {
        // 用一个池管理memcached
	private static Map<String, MemCachedClient> pools = new HashMap<String, MemCachedClient>();

	/**
	 * 初始化MemCacheClient
	 * @param element
	 */
	private static void initPool(Element element) {
		SockIOPool pool = null;
		String name = element.attributeValue("name"); // 解析自定义的xml,并取得数据(代码中未实现)
		String[] servers = element.attributeValue("servers").split(",");
		String[] strs = element.attributeValue("weights").split(",");
		Integer[] weights = new Integer[strs.length];
		int initConn = Integer.parseInt(element.attributeValue("init_conn"));
		int minConn = Integer.parseInt(element.attributeValue("min_conn"));
		int maxConn = Integer.parseInt(element.attributeValue("max_conn"));
		for (int i = 0; i < strs.length; i++) {
			weights[i] = Integer.parseInt(strs[i]);
		}
		pool = SockIOPool.getInstance(name);
		pool.setServers(servers);
		pool.setWeights(weights);
		pool.setFailover(true);
		// 设置初始连接数、最小和最大连接数
		pool.setInitConn(initConn);
		pool.setMinConn(minConn);
		pool.setMaxConn(maxConn);
		// 设置一个连接最大空闲时间6小时
		pool.setMaxIdle(1000 * 60 * 60 * 6);

		// 设置主线程的睡眠时间 (5分钟)
		pool.setMaintSleep(300);

		// 设置TCP的参数
		// 关闭nagle算法
		pool.setNagle(false);
		// 设置 读取 超时50 毫秒
		pool.setSocketTO(50);
		// 不设置连接超时
		pool.setSocketConnectTO(10);
		//
		pool.setAliveCheck(true);

		// 初始化
		pool.initialize();
		MemCachedClient memCachedClient = new MemCachedClient(name);
		pools.put(name, memCachedClient);
	}

	/**
	 * 设置memecached
	 * @param poolName 连接名
	 * @param key 关键字
	 * @param value 数据
	 * @param minute         
	 */
	public static void set(String poolName, String key, Object value, long time) {
		try {
			if (key == null || value == null || "".equals(key))
				return;
			// minute 为 -1时候表示时间不限
			MemCachedClient memCachedClient = pools.get(poolName);

			if (time == -1) {
				memCachedClient.set(key, value);
			} else {
				// 相对时间
				memCachedClient.set(key, value, new Date(time));
			}
		} catch (Exception e) {
			
		}
	}

	/**
	 * 替换memecached
	 * @param poolName  连接名
	 * @param key 关键字
	 * @param value 数据
	 * @param minute          
	 */
	public static void replace(String poolName, String key, Object value, long time) {
		// minute 为 -1时候表示时间不限
		MemCachedClient memCachedClient = pools.get(poolName);
		if (time == -1) {
			memCachedClient.replace(key, value);
		} else {
			// 相对时间
			memCachedClient.replace(key, value, new Date(time));
		}
	}

	/**
	 * 添加数据到memecached
	 * @param poolName  连接名
	 * @param key 关键字
	 * @param value  数据
	 * @param minute        
	 */
	public static void add(String poolName, String key, Object value, long time) {
		// minute 为 -1时候表示时间不限
		MemCachedClient memCachedClient = pools.get(poolName);
		if (time == -1) {
			memCachedClient.add(key, value);
		} else {
			memCachedClient.add(key, value, new Date(time));
		}
	}

	/**
	 * 从Memcached中取数据
	 * @param poolName
	 * @param key
	 * @return
	 */
	public static Object get(String poolName, String key) {
		try {
			if (key == null || "".equals(key))
				return null;
			// 从memcached中取得缓存的值
			MemCachedClient memCachedClient = pools.get(poolName);
			Object object = memCachedClient.get(key);
			return object;
		} catch (Exception e) {
			
		}
		return null;
	}

	/**
	 * 删除
	 * @param poolName
	 * @param key
	 */
	public static void delete(String poolName, String key) {
		if (key == null || "".equals(key))
			return;
		MemCachedClient memCachedClient = pools.get(poolName);
		if (memCachedClient.keyExists(key)) {
			memCachedClient.delete(key);
		}
	}

}


这个管理工具是在我们线上服务器一直稳定运行着的,经过了真实数据的验证。希望可以帮助到一些人,有问题也可以提出,使工具越来越完善。
1
0
分享到:
评论
2 楼 baojunfei 2013-08-09  
1 楼 武打明星 2013-08-08  
这个只是工具类,我还以为做了个管理界面,可以查看缓存状态和操作缓存呢

相关推荐

    memcached客户端工具

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理、维护。 功能包括:NoSQL数据库的展示,库表的展示,key,value的展示,新增,修改,删除等数据的...

    memcached1

    对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须...

    memcached

    通过Composer获取安装是使用PHP SDK的推荐方法,Composer是PHP的依赖管理工具,支持您项目所需的依赖项,将其安装到项目中。关于Composer详细可参考Composer官网。 安装Composer:Windows环境请访问下载安装包安装。...

    cpp-FastoNoSQL是一个跨平台的RedisMemcachedSSDBLevelDB管理工具

    FastoNoSQL - 是一个跨平台的Redis,Memcached,SSDB,LevelDB,RocksDB,UnQLite,LMDB,UpscaleDB,ForestDB,Pika管理工具,FastoNoSQL也是NoSQL数据库的平台,您可以为不同的数据库添加自己的实现。

    fastonosql:FastoNoSQL是一个跨平台的Redis,Memcached,SSDB,LevelDB,RocksDB,UnQLite,LMDB,ForestDB,Pika,Dynomite,KeyDB GUI管理工具

    Memcached,SSDB,LevelDB,RocksDB,UnQLite,LMDB,UpscaleDB,ForestDB,Pika管理工具,而且FastoNoSQL是NoSQL数据库的平台,您可以为不同的数据库添加自己的实现。视窗:MacOS X:Linux:FreeBSD:安卓: 请访问...

    Redis可视化工具安装包(redis管理视图)

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,...区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

    2021040309-公司配件库存管理系统设计与实现源码.rar

    公司配件库存管理系统 一、功能要求 基础数据管理:维护配件的基础信息,如名称、规格...其他技术:使用Nginx作为Web服务器,Docker进行容器化部署,Redis或Memcached作为缓存工具。 三、数据库设计 配件表:存储配

    Redis管理及监控工具:treeNMS_1.4.8

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis,Memcached数据库进行管理、维护。 不但稳定,实用,功能强大,交互友好,可自由组合各种色彩,让维护NoSQL数据库成为一件...

    memcached::rabbit_face:Memcached内存中键值存储的从源构建的容器映像

    memcached(容器映像) 内存中键值存储...无UNIX工具,无包管理器...) 以非特权(非root )用户身份运行建筑docker build --tag ricardbejarano/memcached --file Dockerfile .执照MIT许可,请参阅了解更多详细信息。

    redis客户端工具

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理、维护。 功能包括:NoSQL数据库的展示,库表的展示,key,value的展示,新增,修改,删除等数据的...

    IOIF基于开源技术的JAVA开发框架

    实现的主要功能有:客户端Frame、客户端VAD、异常处理、错误处理、AOP日志管理、计划任务、操作日志管理、数据分页功能、线程池管理、内存缓存管理。主要工具有:系统日志工具、应用属性配置工具、系统属性配置工具...

    IOIF面向项目的开源开发框架

    实现的主要功能有:客户端Frame、客户端VAD、异常处理、错误处理、AOP日志管理、计划任务、操作日志管理、数据分页功能、线程池管理、内存缓存管理。主要工具有:系统日志工具、应用属性配置工具、系统属性配置工具...

    基于Springcloud+mysql的分布式架构网上商城设计与实现(源码+设计文档+部署说明+视频演示).zip

    监控与日志:系统使用监控工具和日志系统,如Spring Cloud Sleuth、Zipkin、ELK Stack等,实现对系统运行状态、性能和日志的监控和分析。 水平扩展与弹性伸缩:系统支持水平扩展和弹性伸缩,通过增加服务实例和负载...

    up_258543_phpMemcachedAdmin_6dzj0m.rar

    利用php实现,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,阅读提升自我参考代码

    up_1181363_phpMemcachedAdmin_wgjrt.rar

    脚本语言服务端php实现,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,阅读提升自我参考代码

    up_703334_phpMemcachedAdmin_l0pgrg.rar

    服务端脚本语言php实现,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,阅读提升自我参考代码

    up_1102356_phpMemcachedAdmin_2iqqk.rar

    通过php编码实现的,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,阅读提升自我参考代码

    up_1053698_phpMemcachedAdmin_czrto.rar

    php脚本语言实现,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,作为开发的各种例子程序代码

    up_795359_phpMemcachedAdmin_das0oj.rar

    php脚本语言实现,phpMemcachedAdmin是一个用来管理memcached的一个可视化的管理工具,采用php的脚本语言实现,参考的例子程序供学习参看

Global site tag (gtag.js) - Google Analytics