




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存)。先简单的介绍下什么是memcached。 Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga Interactive开发,用于提升LiveJ访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。 上网baidu了很多东西,几乎都差不多,而且基于java的说的很少,所有只有在研究了各个其他语言类的应用后再来尝试在java上进行简单的操作应用。先从memcached上进行说明,memcached的最新版是采用c语言进行开发和设计的,据说旧版的是采用perl语言开发的,而且它是一个应用软件来的,是作为缓存服务器的服务器端运行在服务器上的,需要使用特定的语言编写客户端与其进行通信来进行数据的缓存和获取。通常我们是把memcached安装运行在web服务器上,然后通过对需要的数据进行缓存,据我目前所知,所有数据的缓存设置和存取操作,以及数据的更新后替换操作全部需要程序来进行,而不是自动进行的(自动不知道能不能成功,呵呵)。下面从一个实际的例子来应用memcached。 首先到/memcached/下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可!首先是安装运行memcached服务器,我们将memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:c:memcached.exe -d installc:memcached.exe -l -m 32 -d start 第一行是安装memcached成为服务,这样才能正常运行,否则运行失败!第一行是启动memcached的,作为测试我们就简单的只分配32M内存了,然后监听本机端口和以守护进行运行。执行完毕后,我们就可以在任务管理器中见到memcached.exe这个进程了。好了,我们的服务器已经正常运行了, 下面我们就来写java的客户端连接程序。 我们将java_memcached-release_1.6.zip解压后的目录中的java_memcached-release_1.6.jar文件复制到java项目的lib目录下,然后我们来编写代码,比如我提供的一个应用类如下:package utils.cache;import java.util.Date;import com.danga.MemCached.MemCachedClient;import com.danga.MemCached.SockIOPool;/* 使用memcached的缓存实用类.* * author 铁木箱子*/public class MemCached / 创建全局的唯一实例 protected static MemCachedClient mcc = new MemCachedClient(); protected static MemCached memCached = new MemCached(); / 设置与缓存服务器的连接池 static / 服务器列表和其权重 String servers = :11211; Integer weights = 3; / 获取socke连接池的实例对象 SockIOPool pool = SockIOPool.getInstance(); / 设置服务器信息 pool.setServers( servers ); pool.setWeights( weights ); / 设置初始连接数、最小和最大连接数以及最大处理时间 pool.setInitConn( 5 ); pool.setMinConn( 5 ); pool.setMaxConn( 250 ); pool.setMaxIdle( 1000 * 60 * 60 * 6 ); / 设置主线程的睡眠时间 pool.setMaintSleep( 30 ); / 设置TCP的参数,连接超时等 pool.setNagle( false ); pool.setSocketTO( 3000 ); pool.setSocketConnectTO( 0 ); / 初始化连接池 pool.initialize(); / 压缩设置,超过指定大小(单位为K)的数据都会被压缩 mcc.setCompressEnable( true ); mcc.setCompressThreshold( 64 * 1024 ); /* * 保护型构造方法,不允许实例化! * */ protected MemCached() /* * 获取唯一实例. * return */ public static MemCached getInstance() return memCached; /* * 添加一个指定的值到缓存中. * param key * param value * return */ public boolean add(String key, Object value) return mcc.add(key, value); public boolean add(String key, Object value, Date expiry) return mcc.add(key, value, expiry); public boolean replace(String key, Object value) return mcc.replace(key, value); public boolean replace(String key, Object value, Date expiry) return mcc.replace(key, value, expiry); /* * 根据指定的关键字获取对象. * param key * return */ public Object get(String key) return mcc.get(key); public static void main(String args) MemCached cache = MemCached.getInstance(); cache.add(hello, 234); System.out.print(get value : + cache.get(hello); 那么我们就可以通过简单的像main方法中操作的一样存入一个变量,然后再取出进行查看,我们可以看到先调用了add,然后再进行get,我们运行一次后,234这个值已经被我们存入了memcached的缓存中的了,我们将main方法中红色的那一行注释掉后,我们再运行还是可以看到get到的value也是234,即缓存中我们已经存在了数据了。 对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须实现该接口,否则会报错的。比如我们写一个简单的测试Bean如下:class TBean implements java.io.Serializable private static final long serialVersionUID = 1945562032261336919L; private String name; public String getName() return name; public void setName(String name) = name; 然后我们在main方法中加入如下几行代码:TBean tb = new TBean();tb.setName(铁木箱子);cache.add(bean, tb);TBean tb1 = (TBean)cache.get(bean);System.out.print(name= + tb1.getName();tb1.setName(铁木箱子_修改的);tb1 = (TBean)cache.get(bean);System.out.print(name= + tb1.getName(); 我们首先把TBean的一个实例放入缓存中,然后再取出来,并进行名称的修改,然后我们再取这个对象,我们再看其名称,发现修改的对象并不是缓存中的对象,而是通过序列化过来的一个实例对象,这样我们就无须担心对原生类的无意修改导致缓存数据失效了,呵呵看来我也是多此一想啊。所以这表明从缓存中获取的对象是存入对象的一个副本,对获取对象的修改并不能真正的修改缓存中的数据,而应该使用其提供的replace等方法来进行修改memcached是由livejournal团队()制作的开源缓存软件.安装实际上很容易(编译memcached除外) - 而且可以作为服务运行.已经有编译好的套件.参数和linux/bsd下的memcached没什么区别/projects/memcached-win32/例如:c:memcachedmemcached.exe -d installc:memcachedmemcached.exe -d start(默认端口11211)参数解释:-d 以守护程序(daemon)方式运行 memcached;-m 设置 memcached 可以使用的内存大小,单位为 M;-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。-h 帮助使用好了能够大大加快页面或者是其它程序的执行速度.同样的,php下(其它脚本也有)有许多memcached连接器.偶知道的就好几种,自己搜索一下,很容易的比如内置的memcache(没有d) extension.一般使用可以用client.(强烈推荐pecl-memcache,优化的相当不错.)讲的很仔细了吧.可以用其它的方式操作memcached servers.像sql查询一样.比如 add,set,del,get,replace 等.另外可以参见:mysql & memcache(memcached):双赢的选择memcached:客户端在与 memcached 服务建立连接之后,进行存取对象的操作,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金提取炉项目可行性研究报告
- 第四单元 多姿多彩的乐音世界 第8课时音乐知识《室内乐》教学设计-2025-2026学年湘艺版(2024)初中音乐八年级上册
- 废旧塑料家具再生项目可行性研究报告
- DB65T 4136-2018 多浪羊两年三产繁殖技术规程
- 人力资源管理竞业限制协议3篇
- 合同标准版3篇
- Gerstmann综合征护理查房
- 四川省绵阳市涪城区2025届九年级下学期中考一模生物试卷(含答案)
- 河南省九师联盟2025-2026学年高三上学期开学考试数学试题含答案
- 部门用车安全培训课件
- 课堂高效学习的主阵地 教学设计-2023-2024学年高中上学期主题班会
- 2025年放射工作人员培训考试试题(附答案)
- 电力运行维护管理办法
- 高考熟词生义解密(复习讲义)-2026年高考英语一轮复习(北京专用)挖空版
- 2025年甘肃省高考政治真题卷含答案解析
- 2025年北京市中考英语试卷(含答案与解析)
- 浙江名校协作体(G12)2025年9月2026届高三返校联考英语(含答案)
- 2025年环保法律法规基础知识考试卷及答案
- 2026届新人教版高考物理一轮复习讲义:静电场及其应用(含答案)
- 专职安全生产管理人员综合类C证习题(含答案)
- 2025年市场监管总局机关公开遴选公务员面试模拟题及答案
评论
0/150
提交评论