java程序使用memcached
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
1、linux环境下安装与启动memcache:
以编译安装的方式安装。具体参看:
http://wangrui.iteye.com/blog/500921
http://www.cnblogs.com/xiongpq/p/3384681.html
【我没有安装检验过】
一个服务器上可以启动多个memcached服务,设置不同的端口号即可。
启动memcached 11211端口
/usr/local/memcached/bin/memcached -p11211 -d -r -u root -vv>>m.log 2>&1
2、java代码连接memcached服务
(1)引入jar包 :java_memcached-release_2.6.6.jar, 开源代码,可去官网下载jar包
Memcached-Java-Client官网jar包的下载地址: https://github.com/gwhalin/Memcached-Java-Client/downloads
Memcached-Java-Client的说明文档:https://github.com/gwhalin/Memcached-Java-Client
(2)new SockIOPool 和 new MemCachedClient
static{
// 应用服务器对数据库的增删改查都要与之先建立数据库连接,有了pool,才会有连接
sockIoPool = init(poolName,"cacheServers");
memCachedClient = new MemCachedClient(poolName);
//设置cache 数据的原始类型是String .
//默认值是false 只有在确定cache 的数据类型是string 的情况下才设为true,这样可以加快处理速度。
memCachedClient.setPrimitiveAsString(true);
} public static SockIOPool init(String poolName, String confKey){
//缓存服务器
String cacheServers= GameServer.cfg.getServerByName(confKey);
String server[] = {"192.x.x.x:11211"};
if (cacheServers == null || "".equals(cacheServers)) {
}else{
server[0]=cacheServers;
}
//创建一个连接池
SockIOPool pool = SockIOPool.getInstance(poolName);
pool.setServers(server);//缓存服务器 pool.setInitConn(50); //初始化链接数
pool.setMinConn(50); //最小链接数
pool.setMaxConn(500); //最大连接数
pool.setMaxIdle(1000 * 60 * 60);//最大处理时间 pool.setMaintSleep(3000);//设置主线程睡眠时,每3秒苏醒一次,维持连接池大小
pool.setNagle(false);//关闭套接字缓存 pool.setSocketTO(3000);//链接建立后超时时间
pool.setSocketConnectTO(0);//链接建立时的超时时间 pool.initialize();
return pool;
}
/*
set和add最显而易见的区别就是:
如果key是已经存在的set是更新原来的数据,而add则不会。
所以对于add的对象有replace方法
*/
public boolean add(String key , Object o){
return memCachedClient.add(key, o);
} public boolean set(String key , Object o){
return memCachedClient.set(key, o);
}
public boolean update(String key , Object o){
return memCachedClient.replace(key, o); }
public boolean delete(String key){
return memCachedClient.delete(key);
}
/*memCachedClient还有计数的方法: incr("key", 1L); getCount("key")*/
3、 对类、临时数据等进行缓存:新建一个类,建立一个cachedClass set,将需要缓存的类全部add进去,主要是为了便于管理
public static Set<Class>> cachedClass = new HashSet<Class>();
static{
System.out.print("static 被执行");
cachedClass.add(Player.class);
cachedClass.add(User.class); }
// 在新new一个对象的时候,可以调用add方法,之后可用update,delete...方法对对象数据进行增删改查的操作
一份数据在memcached缓存之后,并存入数据库,那么在数据库本地更改数据不能更改缓存,也就是要看缓存和db的关系。
4、情况memcached缓存数据:
(1) kill 掉进程,就关闭,并且清空了memcache缓存中所有的数据,但是这就关掉了memcached进程了。
(2)flush_all :flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。
【memcached 中一个命令flush_all 执行前后,使用stats查看的状态完全一样,刚开始以为是没执行成功,学习完memcached的工作原理后发现了flush_all执行完的效果是这样的:
“flush_all”命令有一个可选的数字参数。它总是执行成功,服务器会发送“OK\r\n”回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行。flush_all 效果具体如下:它导致所有更新时间早于flush_all所设定时间的项目,在被执行取回命令时命令被忽略。】
(3)批量删除数据:http://blog.csdn.net/zhaoxuejie/article/details/7739255
5、 memcached的存储原理简介:http://www.iteye.com/topic/225692
6、memcached的一些相关参数说明:http://ronxin999.blog.163.com/blog/static/4221792020121753522686/
参考链接:http://www.cnblogs.com/yejg1212/p/3186179.html
java程序使用memcached的更多相关文章
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- 分享下对JAVA程序员成长之路的总结<转>
我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,手痒来给新人分享下从新手成长为老鸟的已见. 首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set ...
- 转载:java程序员如何拿到2万月薪
作者:匿名用户链接:https://www.zhihu.com/question/39890405/answer/83676977来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- zabbix 监控java程序
http://www.tuicool.com/articles/IRnM7f http://transcoder.baidu.com/from=1012852q/bd_page_type=1/ssid ...
- java程序员应该掌握的技能
这是看了一篇大神说的java程序员应该会些什么的文章,这里只是把应该掌握的技能部分列了出来. static.final.transient.volatile关键字,内部类,泛型等 static最需要记 ...
- 【转载】分享下多年积累的对JAVA程序员成长之路的总结
注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看. 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博, ...
- Java程序员在用的大数据工具,MongoDB稳居第一!
据日前的一则大数据工具使用情况调查,我们知道了Java程序猿最喜欢用的大数据工具. 问题:他们最近一年最喜欢用什么工具或者是框架? 受访者可以选择列表中的选项或者列出自己的,本文主要关心的是大数据工具 ...
- 做为一个Java程序员,你需要哪些傍身的技能?
最近总有些断断续续的思考,想想从我入行以来,我到底学会了什么,做成过什么,以后要做什么,如何提升自己······· 工作3年了,常听人说3年,5年,10年是程序员的坎,每过一个都会有新的想法,新的改变 ...
- 作为一名JAVA程序员应该有怎样的就业思维
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格JAVA软件工程师所要具备的. 一.专业技能 1.熟 ...
随机推荐
- OOP的字段
<?php class Archie{ //字段成员声明格式:修饰符 变量名 [=xxx] public $_name='Archie!'; //public表示共有,类外可以访问 public ...
- 手动搭建SSI框架
SSI框架为struts.spring.ibatis,在该框架中,使用ibatis作为数据持久层,其中ibatis使用最新版本mybatis3. 注:本文使用版本:struts-2.3.4.sprin ...
- 将可执行exe文件注册成windows服务
要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe.Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行.这两个软件都包含 ...
- liunx下试用yum进行php及opchache扩展安装
Centos 6.6 环境: php 5.6.29 nginx:1.10.2 1.配置安装包源 # CentOs 6.x rpm -Uvh http://mirror.webtatic.com/yum ...
- 浅谈angularJS指令的属性
restrict – 这个属性用来指定指令在HTML中如何使用(指令的四种表示方式).我们使用 ‘AE’,这个指令可以被当作新的HTML元素或者属性来使用.如果要允许指令被当作class来使用,我们将 ...
- 【转】Matrix67:十个利用矩阵乘法解决的经典题目
好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质. 不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...
- zTree模糊查询人员姓名:getNodesByParamFuzzy
以前使用zTree,不知道有getNodesByParamFuzzy这个模糊查询的方法,所以用了比较笨的方法,比如:功能要求(模糊查询人员姓名),先获得用户输入的名称,然后到数据库或者缓存中去查找,然 ...
- SolrCloud今日大纲
SolrCloud今日大纲(了解) ● 分布式集群系统基本概念 ● SolrCloud入门 ● SolrCloud搭建 ******************************* ...
- mysql简单建表
MySQL 字段约束 null,not null,default,auto_increment [来源于] 没有规矩,不成方圆,任何事物都是如此.在MySQL中,每个字段定义都包含附加约束或者修饰符, ...
- Sun jdk, Openjdk, Icedtea jdk关系
转自: http://blog.chinaunix.net/uid-20648944-id-3204527.html Sun jdk与Openjdk版本发展历史如下图所示: 1. Openjdk ...