关于memcached 总结

本文介绍了Memcached这一高性能分布式内存对象缓存系统的原理及应用,解析了Memcache与memcached的关系,并提供了详细的安装步骤与配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Memcach什么是Memcache
1. 什么是Memcache?
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。Memcached是一个高并发的内存键值对缓存系统,它的主要作用是将数据库查询结果,内容,以及其它一些耗时的计算结果缓存到系统内存中,从而加速Web应用程序的响应速度。
2. Memcache和memcached的区别?
其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了吧。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
3. Memcached的安装
在1.4.5版本之前,memcached可以被安装成一个服务,但之后的版本中该功能被移除了。因此memcached的安装可以分为两类,第一类是1.4.5之前的版本,另一类是1.4.5之后的版本。
1) 安装memcached < 1.4.5:
1. 将下载的文件解压到任意目录。
2. 2. 1.4.5之前版本的memcached会被安装成一个服务,以administrator打开控制台,运行下面的命令:
c:\memcached\memcached.exe -d install
* 注意将路径c:\memcached\memcached.exe替换成你本地的安装路径。
3. 然后使用下面的命令启动或停止memcached服务:
c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
4. 例如你想增加memcached所使用的最大内存限制,可以修改ImagePath的值:
“c:\memcached\memcached.exe” -d runservice -m 512
* 除了参数’-m 512’之外,你还可以使用其它的参数。通过“c:\memcached\memcached.exe -h”可以查看所有能使用的参数。
5. 如果要卸载memcached服务,可以使用下面的命令:
c:\memcached\memcached.exe -d uninstall
2) 安装memcached >= 1.4.5
1. 将下载的文件解压到任意目录。
2. 1.4.5之后版本的memcached不能作为Windows服务来运行,可以在命令行中启动memcache。以管理员身份打开cmd,然后输入如下命令:
Memcached-x86 –p 11211 –m 128 –vv
memcached启动选项如下:
选项 说明
-p 使用的TCP端口,默认为11211
-m 最大内存大小默认为64m
-vv 用very verbose模式启动,调试信息和错误输出到控制台
-d 作为daemon在后台启动

  1. 添加辅助类MemcachedUtil.java

>
package com.wskj.education.util;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

/**
* Memcached辅助类
* @author Administrator
*
*/
public class MemCacheUtil {

/**
 * memcached客户端单例
 */
private static MemCachedClient cachedClient = new MemCachedClient();

/**
 * 初始化连接池
 */
static {
    //获取连接池的实例
    SockIOPool pool = SockIOPool.getInstance();

    //服务器列表及其权重
    String[] servers = {"127.0.0.1:11211"};
    Integer[] weights = {3};

    //设置服务器信息
    pool.setServers(servers);
    pool.setWeights(weights);

    //设置初始连接数、最小连接数、最大连接数、最大处理时间
    pool.setInitConn(10);
    pool.setMinConn(10);
    pool.setMaxConn(1000);
    pool.setMaxIdle(1000*60*60);

    //设置连接池守护线程的睡眠时间
    pool.setMaintSleep(60);

    //设置TCP参数,连接超时
    pool.setNagle(false);
    pool.setSocketTO(60);
    pool.setSocketConnectTO(0);

    //初始化并启动连接池
    pool.initialize();

    //压缩设置,超过指定大小的都压缩

// cachedClient.setCompressEnable(true);
// cachedClient.setCompressThreshold(1024*1024);
}

private MemCacheUtil(){
}

/**
 * 向缓存服务器中添加数据
 * @param key 键
 * @param value 值
 * @return 添加成功返回true,否则返回false
 */
public static boolean add(String key, Object value) {
    return cachedClient.add(key, value);
}

/**
 * 向缓存服务器添加数据
 * @param key 键
 * @param value 值
 * @param expireDate 被缓存数据的过期时间
 * @return
 */
public static boolean add(String key, Object value, Date expireDate) {
    return cachedClient.add(key, value, expireDate);
}

public static boolean add(String key, Object value, Integer millSeconds){
    return cachedClient.add(key, value, new Date(new Date().getTime()+millSeconds));
}

public static boolean put(String key, Object value) {
    return cachedClient.set(key, value);
}

public static boolean put(String key, Object value, Date expireDate) {
    return cachedClient.set(key, value, expireDate);
}

public static boolean put(String key, Object value, Integer millSeconds){
    return cachedClient.set(key, value, new Date(new Date().getTime()+millSeconds));
}

public static boolean replace(String key, Object value) {
    return cachedClient.replace(key, value);
}

public static boolean replace(String key, Object value, Date expireDate) {
    return cachedClient.replace(key, value, expireDate);
}

public static boolean replace(String key, Object value, Integer millSeconds){
    return cachedClient.replace(key, value, new Date(new Date().getTime()+millSeconds));
}

/**
 * 从缓存服务器获取数据
 * @param key 键
 * @return 值
 */
public static Object get(String key) {
    return cachedClient.get(key);
}

/**
 * 从缓存服务器中删除数据
 * @param key 键
 * @return
 */

public static Object delete(String key) {
return cachedClient.delete(key);
}

}


package com.wskj.education.util;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

/**
 * Memcached辅助类
 * @author Administrator
 *
 */
public class MemCacheUtil {

    /**
     * memcached客户端单例
     */
    private static MemCachedClient cachedClient = new MemCachedClient();

    /**
     * 初始化连接池
     */
    static {
        //获取连接池的实例
        SockIOPool pool = SockIOPool.getInstance();

        //服务器列表及其权重
        String[] servers = {"127.0.0.1:11211"};
        Integer[] weights = {3};

        //设置服务器信息
        pool.setServers(servers);
        pool.setWeights(weights);

        //设置初始连接数、最小连接数、最大连接数、最大处理时间
        pool.setInitConn(10);
        pool.setMinConn(10);
        pool.setMaxConn(1000);
        pool.setMaxIdle(1000*60*60);

        //设置连接池守护线程的睡眠时间
        pool.setMaintSleep(60);

        //设置TCP参数,连接超时
        pool.setNagle(false);
        pool.setSocketTO(60);
        pool.setSocketConnectTO(0);

        //初始化并启动连接池
        pool.initialize();

        //压缩设置,超过指定大小的都压缩
//      cachedClient.setCompressEnable(true);
//      cachedClient.setCompressThreshold(1024*1024);
    }

    private MemCacheUtil(){
    }

    /**
     * 向缓存服务器中添加数据
     * @param key 键
     * @param value 值
     * @return 添加成功返回true,否则返回false
     */
    public static boolean add(String key, Object value) {
        return cachedClient.add(key, value);
    }

    /**
     * 想缓存服务器添加数据
     * @param key 键
     * @param value 值
     * @param expireDate 被缓存数据的过期时间
     * @return
     */
    public static boolean add(String key, Object value, Date expireDate) {
        return cachedClient.add(key, value, expireDate);
    }

    public static boolean add(String key, Object value, Integer millSeconds){
        return cachedClient.add(key, value, new Date(new Date().getTime()+millSeconds));
    }

    public static boolean put(String key, Object value) {
        return cachedClient.set(key, value);
    }

    public static boolean put(String key, Object value, Date expireDate) {
        return cachedClient.set(key, value, expireDate);
    }

    public static boolean put(String key, Object value, Integer millSeconds){
        return cachedClient.set(key, value, new Date(new Date().getTime()+millSeconds));
    }

    public static boolean replace(String key, Object value) {
        return cachedClient.replace(key, value);
    }

    public static boolean replace(String key, Object value, Date expireDate) {
        return cachedClient.replace(key, value, expireDate);
    }

    public static boolean replace(String key, Object value, Integer millSeconds){
        return cachedClient.replace(key, value, new Date(new Date().getTime()+millSeconds));
    }

    /**
     * 从缓存服务器获取数据
     * @param key 键
     * @return 值
     */
    public static Object get(String key) {
        return cachedClient.get(key);
    }

    /**
     * 从缓存服务器中删除数据
     * @param key 键
     * @return
     */
   public static Object delete(String key) {
       return cachedClient.delete(key);
   }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值