`
GLOBLE
  • 浏览: 25039 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

WEB-APP 高速缓存 Memcache 简单例子

    博客分类:
  • JAVA
 
阅读更多
  任何软件,首要条件就是可使用的,不能用的软件,哪怕就是设计再完美,算法再精妙,界面再绚丽,都只能成为反面教材被引以为戒。 其次就是软件的功能,性能。其中性能占着很大的比重。
  高性能是用户体验的重要组成部分,而磁盘的互操作,线程等待,队列的效率影响着系统的性能。
什么是 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
分享到:
评论

相关推荐

    window-php7.1-memcache-dll

    Memcache是一款广泛使用的分布式内存对象缓存系统,它能跨多台服务器存储数据,减少了数据库访问的负载,提高了Web应用的性能。Memcache主要设计用于快速获取大量小数据,如网站的用户会话信息、数据库查询结果等。 ...

    netty-codec-memcache-4.1.73.Final-API文档-中文版.zip

    赠送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依赖信息文件:...

    缓存框架-Memcache的例子

    Memcache是一种广泛使用的分布式内存缓存系统,常用于减轻数据库负载,提高Web应用的性能。在本文中,我们将深入探讨Memcache的工作原理、优势以及如何在实际项目中使用它。 一、Memcache简介 Memcache是由Danga ...

    10-编译php-memcache扩展.wmv

    10-编译php-memcache扩展.wmv

    memcached-1.2.1-win32及memcache.dll

    memcached-1.2.1-win32及memcache.dll

    php_memcache-2.2.7-7.0-nts-vc14-x64 扩展DLL

    《PHP与Memcache扩展DLL:深入理解与应用》 PHP是一种广泛使用的开源脚本语言,尤其在Web开发领域,它的灵活性和高效性深受开发者...通过正确配置和使用,开发者可以充分利用Memcache的缓存能力,提升Web应用的性能。

    pecl-memcache-4.0.4.tar.gz

    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/...

    php数据库缓存Memcache操作类.zip

    整理了一个Memcache数据缓存操作类库文件,希望对各位会有帮助,操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以...

    php_memcache-3.0.9 for php7-nts-vc14-x64 扩展DLL,亲测有效

    标题中的“php_memcache-3.0.9 for php7-nts-vc14-x64 扩展DLL,亲测有效”表明这是一个专为PHP 7设计的Memcache扩展库,版本为...使用这个扩展,开发者可以充分利用Memcache的缓存能力,优化其Web应用程序的性能。

    MemCache对象缓存应用

    MemCache是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高应用程序的性能。它通过将数据存储在内存中,实现快速访问,避免了频繁读取硬盘上的数据库。MemCache最初由Danga ...

    php_memcache-3.0.8-5.6-nts-vc11-x86

    标题 "php_memcache-3.0.8-5.6-nts-vc11-x86" 提供的信息是关于一个特定版本的 PHP Memcache 扩展,这是一款用于 PHP 的缓存模块,专为 PHP 5.6 构建,并且适配于非线程安全(NTS)版本且采用 Visual C++ 11 编译器...

    服务器缓存服务memcache

    Memcache是一种高性能、分布式内存对象缓存系统,它主要用于减轻数据库负载,提高Web应用的响应速度。Memcache基于一个简单的键值对存储模型,能够存储任何类型的数据,如字符串、整数、浮点数甚至是二进制数据。...

    netty-codec-memcache-4.1.73.Final-API文档-中英对照版.zip

    赠送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依赖信息文件:...

    php7.0.x-7.1.x memcache.dll(windows_x86&&x64;)

    PHP Memcache扩展是PHP的一个非常重要的组件,它允许PHP程序与Memcached服务器进行交互,从而实现数据的高速缓存。Memcached是一种分布式内存对象缓存系统,能够提高网站的性能,减少数据库的负载。在PHP中,使用...

    netty-codec-memcache-4.1.74.Final-API文档-中文版.zip

    赠送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-7.1X-7.2X.zip

    从最老php5.2版本,到最新的php7.2,各个版本,x86,x64版本都有,希望想要使用的朋友,直接下载找到对应版本就直接使用,一次性打包全部,一次性解决各个版本的memcache扩展 亲测可用,用的时候,将...

    netty-codec-memcache-4.1.74.Final-API文档-中英对照版.zip

    赠送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依赖信息文件:...

    java版memcache缓存管理与开发

    Memcache是一种高性能、分布式内存对象缓存系统,它通过减轻数据库负担来加速动态Web应用程序的速度。其主要功能是将部分数据存储在内存中,从而实现前端数据的快速存取。 #### 分布式Memcache应用 对于大型网站而...

    pecl-memcache-php7

    综上所述,PECL-Memcache是PHP7在Linux环境中与Memcached服务器交互的重要工具,通过这个扩展,开发者能够充分利用Memcached的高速缓存能力,提升Web应用的性能和用户体验。了解并熟练掌握其安装、配置、使用以及...

Global site tag (gtag.js) - Google Analytics