• Memcached缓存框架的使用


    Memcach什么是Memcache

    1. 什么是Memcache?

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。Memcached是一个高并发的内存键值对缓存系统,它的主要作用是将数据库查询结果,内容,以及其它一些耗时的计算结果缓存到系统内存中,从而加速Web应用程序的响应速度。

    1. Memcache和memcached的区别?
      其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了吧。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
    2. 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:memcachedmemcached.exe -d install

    * 注意将路径c:memcachedmemcached.exe替换成你本地的安装路径。

    1. 然后使用下面的命令启动或停止memcached服务:

    c:memcachedmemcached.exe -d start

    c:memcachedmemcached.exe -d stop

    1. 例如你想增加memcached所使用的最大内存限制,可以修改ImagePath的值:

    "c:memcachedmemcached.exe" -d runservice -m 512

    * 除了参数'-m 512'之外,你还可以使用其它的参数。通过“c:memcachedmemcached.exe -h”可以查看所有能使用的参数。

    1. 如果要卸载memcached服务,可以使用下面的命令:

    c:memcachedmemcached.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. 在java中如何使用Memcache
      1. 添加jar包:

    commons-pool-1.5.6.jar、

    java_memcached-release_2.6.6.jar、

    slf4j-api-1.6.1.jar、

    1. 添加辅助类MemcachedUtil.java

    import java.util.Date;

    import com.danga.MemCached.MemCachedClient;

    import com.danga.MemCached.SockIOPool;

    public class MemcachedUtil {

        /**

         * 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 MemcachedUtil(){

        }

         

        public static boolean add(String key, Object value) {

            return cachedClient.add(key, value);

        }

        

        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));

        }

        

        public static Object get(String key) {

            return cachedClient.get(key);

        }

       

       public static Object delete(String key) {

           return cachedClient.delete(key);

       }

    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    1. 注意,被添加到缓存的类必须实现接口Serializable。

     

     

     

     

     

     

  • 相关阅读:
    AVL树的java实现
    request和response的setCharacterEncoding()方法
    几种常用数据库连接池的使用
    String类、static关键字、Arrays类、Math类
    QT学习笔记(day02)
    QT学习笔记(day01)
    STL中栈和链表的不同实现方式的速度对比
    C++泛化双端队列
    C++泛化队列
    C++泛化栈
  • 原文地址:https://www.cnblogs.com/blackshine/p/6427983.html
Copyright © 2020-2023  润新知