任何软件,首要条件就是可使用的,不能用的软件,哪怕就是设计再完美,算法再精妙,界面再绚丽,都只能成为反面教材被引以为戒。 其次就是软件的功能,性能。其中性能占着很大的比重。
高性能是用户体验的重要组成部分,而磁盘的互操作,线程等待,队列的效率影响着系统的性能。
什么是 memcache ?
memcache 是一种基于 C/S 架构的内存式缓存系统.
什么是 memcached ?
Memcached 是memcache的运行服务端,核心文件,Memcached基于一个存储键/值对的hashmap,其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
对于web应用而言,高并发与高持续访问量时刻使用着CPU的资源,所以,Memcached基本只占用内存资源。能够很好弥补对于高频繁调用,却不经常变更的资源。
这里介绍的是 服务端Windows操作系统memcached-1.2.4-Win32,客户端通过java代码.java_memcached-release_1.6的简单例子。
********************服务端 START********************
服务端很简单,只需要启动一下 守护进程即可。该进程会是依赖于操作系统,在后台以进程的形式存在的。
解压memcached-1.2.4-Win32.rar
通过cmd命令行安装:
通过cmd命令行运行:
检测进程是否运行:
********************服务端 END********************
********************客户端 START********************
解压java_memcached-release_1.6.rar
将java_memcached-release_1.6.jar放到项目lib下。
这里我创建一个简单的工具类:
package test.memcached;
import java.util.Date;
import java.util.Map;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* 缓存类
* @author 小G
*/
public class MemCachedCtl {
protected static MemCachedClient mcc = new MemCachedClient();// 创建全局的唯一实例
protected static MemCachedCtl memCached = new MemCachedCtl();
//配置信息
private static String[] servers = { "127.0.0.1:11211" };
private static Integer[] weights = { 3 };
private static int initialConnections = 10;
private static int minSpareConnections = 5;
private static int maxSpareConnections = 50;
private static long maxIdleTime = 1000 * 60 * 30;
private static long maxBusyTime = 1000 * 60 * 5;
private static long maintThreadSleep = 1000 * 5;
private static int socketTimeOut = 1000 * 3;
private static boolean nagleAlg = false;
/**
* 不允许通过构造方法创建实例
*/
protected MemCachedCtl() {
}
/**
* 获取唯一实例.
*/
public static MemCachedCtl getInstance() {
return memCached;
}
/**
* 初始化基本信息
*/
public void init(){
if(initConfig())
initPool();
}
/**
* 初始化配置信息
*/
private boolean initConfig(){
//TODO 初始化配置文件
return true;
}
/**
* memcache服务器初始化连接池
*/
private void initPool(){
SockIOPool pool = SockIOPool.getInstance();// 获取socke连接池的实例对象
pool.setServers(servers);// 设置服务器信息
pool.setWeights(weights);//设置权重
pool.setInitConn( initialConnections );// 设置初始连接数
pool.setMinConn( minSpareConnections );//设置最小连接数
pool.setMaxConn( maxSpareConnections );//设置最大连接数
pool.setMaxIdle( maxIdleTime );//设置最大处理时间
pool.setMaxBusyTime( maxBusyTime );
pool.setMaintSleep( maintThreadSleep );// 设置主线程的等待时间
pool.setSocketTO( socketTimeOut ); //设置连接超时时间
pool.setNagle( nagleAlg );
pool.setHashingAlg( SockIOPool.NEW_COMPAT_HASH );
pool.setAliveCheck( true );
pool.initialize();
}
/**
* 判断key是否存在
*/
public boolean keyExists(String key){
return mcc.keyExists(key);
}
/**
* 缓存一个对象
*/
public synchronized boolean add(String key, Object value) {
return mcc.add(key, value);
}
/**
* 缓存一个对象(日期)
*/
public synchronized boolean add(String key, Object value, Date expiry) {
return mcc.add(key, value, expiry);
}
/**
* 缓存一个对象(hashCode码)
*/
public synchronized boolean add(String key,Object value,Integer hashCode){
return mcc.add(key, value, hashCode);
}
/**
* 缓存一个对象
*/
public synchronized boolean set(String key, Object value) {
return mcc.set(key, value);
}
/**
* 缓存一个对象(日期)
*/
public synchronized boolean set(String key, Object value, Date expiry) {
return mcc.set(key, value, expiry);
}
/**
* 缓存一个对象(hashCode码)
*/
public synchronized boolean set(String key,Object value,Integer hashCode){
return mcc.set(key, value, hashCode);
}
/**
* 删除一个缓存对象
*/
public synchronized boolean delete(String key) {
return mcc.delete(key);
}
/**
* 删除一个缓存对象(日期)
*/
public synchronized boolean delete(String key, Object value, Date expiry) {
return mcc.delete(key, expiry);
}
/**
* 删除一个缓存对象(hashCode码)
*/
public synchronized boolean delete(String key,Integer hashCode,Date expiry){
return mcc.delete(key, hashCode, expiry);
}
/**
* 删除全部服务器上的缓存对象
*/
public synchronized boolean flushAll() {
return mcc.flushAll();
}
/**
* 删除指定服务器上的缓存对象
*/
public synchronized boolean flushAll(String[] servers) {
return mcc.flushAll(servers);
}
/**
* 替换原有的缓存(更新缓存)
*/
public synchronized boolean replace(String key, Object value) {
return mcc.replace(key, value);
}
/**
* 替换原有的缓存(更新缓存)
*/
public synchronized boolean replace(String key, Object value, Date expiry) {
return mcc.replace(key, value, expiry);
}
/**
* 替换原有的缓存(更新缓存)
*/
public synchronized boolean replace(String key, Object value, Integer hashCode) {
return mcc.replace(key, value, hashCode);
}
/**
* 替换原有的缓存(更新缓存)
*/
public synchronized boolean replace(String key, Object value,Date expiry, Integer hashCode){
return mcc.replace(key, value, expiry, hashCode);
}
/**
* 返回全部服务器状态
*/
public Map stats(){
return mcc.stats();
}
/**
* 返回指定服务器状态
*/
public Map stats(String[] servers){
return mcc.stats(servers);
}
/**
* 根据指定KEY获得缓存
*/
public Object get(String key) {
return mcc.get(key);
}
/**
* 根据指定KEY,HASHCODE获得缓存
*/
public Object get(String key,Integer hashCode) {
return mcc.get(key,hashCode);
}
/**
* 根据指定KEY,HASHCODE,状态值 获得缓存
*/
public Object get(String key,Integer hashCode,boolean asString) {
return mcc.get(key,hashCode,asString);
}
/**
* 测试方法
*/
public static void main(String[] args) {
MemCachedCtl cache = MemCachedCtl.getInstance();
cache.init();
// cache.add("helloworld_key", "helloworld_value");
cache.set("helloworld_key", "helloworld_value");
System.out.print("返回结果: " + cache.get("helloworld_key"));
}
}
在java_memcached-release_1.6文件夹内,crc目录下有源码和测试类可供学习。
********************客户端 END********************
- 大小: 910 Bytes
- 大小: 1.2 KB
- 大小: 5.1 KB
分享到:
相关推荐
缓存框架-Memcache的例子
赠送jar包:netty-codec-memcache-4.1.73.Final.jar; 赠送原API文档:netty-codec-memcache-4.1.73.Final-javadoc.jar; 赠送源代码:netty-codec-memcache-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:...
10-编译php-memcache扩展.wmv
memcached-1.2.1-win32及memcache.dll
https://github.com/websupport-sk/pecl-memcache tar -zxvf pecl-memcache-4.0.4.tar.gz && cd /root/pecl-memcache-4.0.4 && /usr/local/...
整理了一个Memcache数据缓存操作类库文件,希望对各位会有帮助,操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以...
memcache.dll 兼容php7.1以上,适用环境window64位
赠送jar包:netty-codec-memcache-4.1.73.Final.jar; 赠送原API文档:netty-codec-memcache-4.1.73.Final-javadoc.jar; 赠送源代码:netty-codec-memcache-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:netty-codec-memcache-4.1.74.Final.jar; 赠送原API文档:netty-codec-memcache-4.1.74.Final-javadoc.jar; 赠送源代码:netty-codec-memcache-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:netty-codec-memcache-4.1.74.Final.jar; 赠送原API文档:netty-codec-memcache-4.1.74.Final-javadoc.jar; 赠送源代码:netty-codec-memcache-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:...
php_memcache-3.0.8-5.6-nts-vc11-x86 example.php memcache.php
php5.5-ts-vc11-x86-php_memcache.dll 放入php/etc目录
php7开始普及起来,但是memcache扩展却很难找到
ehcache-memcache-redis三大缓存男高音.docx
使用github上的php7分支自行编译,未修改源码。 匹配API20151012,NTS,VC14
windows下的memcache服务,在windows平台下搭建wamp或者php环境的时候,如果没有memcache服务,会报错找不到memcache()方法,下载并解压这个压缩包,将memcache.exe放到任意位置,然后使用管理员权限在命令行转到...
在项目中可能会使用到多种缓存技术,如memcache文件缓存等。如果能把这些缓存机制统一接口,对外开放,让使用者可以不用关心缓存的内部实现就可以随意调用这些缓存类。实现这样的做法,需要一个缓存代理类,来完全...
php缓存Memcache的Queue类库 下面来看看用法,代码如下: MQ::setupMq('127.0.0.1','11211');//连接 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $...
Memcache缓存技术,Memcache配置说明及其文件,PHP5.2.6版本内存缓存技术配置,PHP运行环境PHP5.2.6版本的配置,操作系统是windows下