您的位置:首页 > 数据库 > Memcache

memcached 的安装时使用

2016-06-04 09:50 411 查看
Memcached是一个免费开源、高性能、分布式的内存对象缓存系统。Memcached是在内存中,为特定数据(字符串或对象)构建key-value的小块数据存储。

条件:

yum -y install gcc 

yum -y install gcc-c++ 

yum -y libevent

1、安装memcached 

      cd      /home/memcached

     下载:wget   http://www.memcached.org/files/memcached-1.4.25.tar.gz

      tar -zxvf   memcached-1.4.25.tar.gz

      cd  memcached-1.4.25

     ./configure    --prefix=/usr/local/memcached

     make  && make install

    cd    /usr/local/memcached     

     memcached   -help  查看帮助信息

     ./memcached -d -m 1024 -u root -p 11211   -f  1.25  -P   tmp/memcached.pid

     

      -d选项是启动一个守护进程 

     -m是分配给Memcache使用的内存数量,单位是MB,这里是10MB 

      -u是运行Memcache的用户,这里是root 

      -l是监听的服务器IP地址,这里指定了服务器的IP地址192.168.1.106 

      -p是监听的端口,这里设置了2222,最好是1024以上的端口 

      -c选项是最大运行的并发连接数,默认是1024,这里设置了256 

      -P是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid 

      常用的还有几个需要了解: 

       -f 块大小增长因子,默认是1.25 

      -n 最小分配空间, key+value+flags 默认是 48byte 

      -I 每个slab page的大小 

       -v/-vv 详细显示工作时各种参数

   

      关闭Memcached,先用 ps   aux |  grep   memcached找到进程号,然后kill -9 掉

2、安装teinet 服务

     yum  install  telnet-server

3、telnet  127.0.0.1   11211

    


4、基本命令 

          您将使用五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:

         set      :   无论如何都存储的set,如果没有这个健则增加,有健则进行replace命令

         add     :   只有数据不存在时进行添加的add

         replace  : 替换命令

         get :  获取数值明明

         delete  : 删除命令

          gets   :  获取多个实例 

        实例:

          set   username   0 1 2   :   username是key的名字(是以key/value存放),0标志,1表示数据存放1s,2表示放入多大数据。如果一个key已经存在,再放入是失败的

          

5、  stats 命令:

          stats 命令的功能正如其名:转储所连接的 memcached 实例的当前统计数据。在下例中,执行 stats 命令显示了关于当前 memcached 实例的信息:

        pid 1444memcache服务器进程ID

        uptime 3054736693服务器已运行秒数

        time 224601969服务器当前Unix时间戳

        version 1.4.2memcache版本

        pointer_size 64操作系统指针大小

        rusage_user 17.515625进程累计用户时间

        rusage_system 46.187500进程累计系统时间

        curr_connections 11当前连接数量

        total_connections 499965Memcached运行以来连接总数

        connection_structures 17Memcached分配的连接结构数量

        cmd_get 553get命令请求次数

       cmd_set 499806set命令请求次数

       cmd_flush 0flush命令请求次数

      get_hits 553get命令命中次数

      get_misses 499376get命令未命中次数

      delete_misses 0delete命令未命中次数

      delete_hits 2delete命令命中次数

      incr_misses 0incr命令未命中次数

      incr_hits 0incr命令命中次数

      decr_misses 0decr命令未命中次数

      decr_hits 0decr命令命中次数

      cas_misses 0cas命令未命中次数

      cas_hits 0cas命令命中次数

      cas_badval 0使用擦拭次数

     bytes_read 58006092读取总字节数

     bytes_written 7092540发送总字节数

      limit_maxbytes 67108864分配的内存总大小(字节)

      accepting_conns 1接受新的连接

      listen_disabled_num 0失效的监听数

     threads 4当前线程数

     conn_yields 0连接操作主动放弃数目

     bytes 805025当前存储占用的字节数

     curr_items 4687当前存储的数据总数

     total_items 499806启动以来存储的数据总数

     evictions 0LRU释放的对象数目

      此处的大多数输出都非常容易理解。稍后在讨论缓存性能时,我还将详细解释这些值的含义。至于目前,我们先来看看输出,然后再使用新的键来运行一些 set 命令,并              再次运行stats 命令,注意发生了哪些变化。

      

       如果是在做秒杀的功能时:需要用到count 与set 相结合使用,当达到某一个数值时停止操作,对内存的操作1s的时间内呢个做到3W。

6、flush_all 命令

         flush_all 是最后一个要介绍的命令。这个最简单的命令仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则 flush_all              能提供很大的用处。

7、其他命令

           memcached还有很多命令,比如对于存储为数字型的可以通过incr/decr命令进行增减操作等等,这里只列出开发和运维中经常使用的命令,其他的不再一一举例说明。

  

        set s 0 0 2

        34

        STORED

        incr s 4

        38

        decr s 1

        37

         注意incr与decr只适用于数字的插入与删除,操作后的值不会为负数

         

8、 下载JAR包    

      http://download.csdn.net/my
     http://download.csdn.net/detail/lzzmy/2080224

        代码实现1):

         

package com.alisoft.sme.memcached;  

  

import java.util.Date;  

  

import com.danga.MemCached.MemCachedClient;  

import com.danga.MemCached.SockIOPool;  

  

public class MemCachedManager {  

  

    // 创建全局的唯一实例  

    protected static MemCachedClient mcc = new MemCachedClient();  

  

    protected static MemCachedManager memCachedManager = new MemCachedManager();  

  

    // 设置与缓存服务器的连接池  

    static {  

        // 服务器列表和其权重  

        String[] servers = { "127.0.0.1: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 MemCachedManager() {  

  

    }  

  

    /** 

     * 获取唯一实例. 

     *  

     * @return 

     */  

    public static MemCachedManager getInstance() {  

        return memCachedManager;  

    }  

  

    /** 

     * 添加一个指定的值到缓存中. 

     *  

     * @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) {  

        MemCachedManager cache = MemCachedManager.getInstance();  

        cache.add("hello", 234);  

        System.out.print("get value : " + cache.get("hello"));  

    }  



getbub :  https://github.com/gwhalin/Memcached-Java-Client

代码实现2)、

 

package Test;

import java.io.IOException;

import java.net.InetSocketAddress;

import net.spy.memcached.MemcachedClient;

public class TestMemcached {
public static void main(String[] args) throws IOException {
MemcachedClient cache = new MemcachedClient(new InetSocketAddress(
"127.0.0.1", 11211));
for (int i = 1; i < 10; i++) {
cache.set("T0001" + i, 3600, new User(i + ""));
}
User myObject = (User) cache.get("T00011");
System.out.println("Get object from mem :" + myObject.getUserId());
cache.shutdown();
}

}

import java.io.Serializable;

public class User implements Serializable {
/**

*/
private static final long serialVersionUID = 1L;
private String userId;

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public User(String userId) {
super();
this.userId = userId;
}

@Override
public String toString() {
return "User [userId=" + userId + "]";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: