zoukankan      html  css  js  c++  java
  • 分布式缓存memcached介绍,win7环境安装,常用命令set,get,delete,stats, java访问

    一、memcached是什么?

    二、memcached不互相通信的分布式

    三、安装步骤

    四、本文介绍的命令主要包括:

    1. 存入命令(Storage commands)
    2. 取回命令(Retrieval command)
    3. 删除命令(Deletion)
    4. 统计(Statistics)
    5. 其他命令

     五、java客户端访问

    一、     memcached是什么?

    memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。

    许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。

    这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。

     

    二、     memcached不互相通信的分布式

    memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。

    三、安装步骤 (我这里因为是win7系统,为了便于测试,安装的是windows 64bit版本)

    1、 从http://pan.baidu.com/s/1sk7lNgp 下载,解压到指定目录,如:C:UsersAdminDesktopmemcached-win64-1.4.4-14memcached

     

    2、 用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。

     

    3、打开控制面板,打开服务,可以看到memcached已经在上面,如果没有启动,则手动启动一下。

     

    四、 本文介绍的命令主要包括:

    1.存入命令(Storage commands)

    <command name> <key> <flags> <exptime> <bytes> [noreply]

    cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]

    <command name> 是"set", "add", "replace", "append" 或者"prepend"

    key 长度最长不能超过250 characters

    set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

    add 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应NOT_STORED。

    replace 仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。  

    Append 将此数据添加到现有数据后的现有key中

    prepend 将此数据添加到现有数据前的现有key中

    append和prepend命令不接受flags或exptime。他们更新现有的数据部分,而忽略了新的flag和exptime设置。

    cas是一个check和set操作,这意味着, 存储这些数据,但在我访问过此数据后,再没有其他人更新。

    <key>用于查找缓存值 
    <flags>可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 
    <exptime>在缓存中保存键值对的时间长度(以秒为单位,0 表示永远) 
    <bytes>在缓存中存储的字节点 

    <cas unique> 一个存在的64bit的entry值。这个值是客户端使用gets返回的值。

    "noreply" 这是一个可选参数,服务端不会发送回复。

    在这一行之下,是客户端要发送给服务端进行缓存的数据。

    <data block>

    <data block> 存储的数据块(可直接理解为key-value结构中的value)

    实例操作:

     

     

    可以看到我保存了carl到username中,结果是STORED。表示存储成功。 

    2.取回命令(Retrieval command)

    get <key>*

    gets <key>*

    <key>* 是一个或多个被空格分开的字符串

    返回的结果是0到多个items。存储的数据会被显示出来。结尾是一个

    "END "

     

    3.删除命令(Deletion)

    delete <key> [noreply]

    <key> 是客户端想要删除的服务端的缓存的key值

      

    4.统计(Statistics)

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

    STAT pid 22459                             进程ID 
    STAT uptime 1027046                        服务器运行秒数 
    STAT time 1273043062                       服务器当前unix时间戳 
    STAT version 1.4.4                         服务器版本 
    STAT pointer_size 64                       操作系统字大小(这台服务器是64位的) 
    STAT rusage_user 0.040000                  进程累计用户时间 
    STAT rusage_system 0.260000                进程累计系统时间 
    STAT curr_connections 10                   当前打开连接数 
    STAT total_connections 82                  曾打开的连接总数 
    STAT connection_structures 13              服务器分配的连接结构数 
    STAT cmd_get 54                            执行get命令总数 
    STAT cmd_set 34                            执行set命令总数 
    STAT cmd_flush 3                           指向flush_all命令总数 
    STAT get_hits 9                            get命中次数 
    STAT get_misses 45                         get未命中次数 
    STAT delete_misses 5                       delete未命中次数 
    STAT delete_hits 1                         delete命中次数 
    STAT incr_misses 0                         incr未命中次数 
    STAT incr_hits 0                           incr命中次数 
    STAT decr_misses 0                         decr未命中次数 
    STAT decr_hits 0                           decr命中次数 
    STAT cas_misses 0    cas未命中次数 
    STAT cas_hits 0                            cas命中次数 
    STAT cas_badval 0                          使用擦拭次数 
    STAT auth_cmds 0 
    STAT auth_errors 0 
    STAT bytes_read 15785                      读取字节总数 
    STAT bytes_written 15222                   写入字节总数 
    STAT limit_maxbytes 1048576                分配的内存数(字节) 
    STAT accepting_conns 1                     目前接受的链接数 
    STAT listen_disabled_num 0                 
    STAT threads 4                             线程数 
    STAT conn_yields 0 
    STAT bytes 0                               存储item字节数 
    STAT curr_items 0                          item个数 
    STAT total_items 34                        item总数 
    STAT evictions 0                           为获取空间删除item的总数 

    5.其他命令

    flush_all该命令有一个可选的数字参数。它总是执行成功,服务器会发送 “OK ” 回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。

    flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。

     

     五、java客户端访问

    所依赖的主要jar包

    maven配置pom.xml

    <!--  memcached client -->
            <dependency>
                <groupId>com.google.code.simple-spring-memcached</groupId>
                <artifactId>spymemcached</artifactId>
                <version>2.8.4</version>
            </dependency>

    java客户端测试代码(参考自文章:http://blog.csdn.net/arui_email/article/details/8129400)

    另外大家也可以参考这篇文章http://blog.csdn.net/seelye/article/details/8511073

    package com.carl.carlapp.memcached;
    
    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class TestSpyMemcache {  
           
        public static void main(String[] args) {  
       
           // 保存对象  
       
           try {  
       
               /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */  
       
               MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  
       
               Future<Boolean> b = null;  
       
               /* 将key值,过期时间(秒)和要缓存的对象set到memcached中 */  
       
               b = mc.set("neea:testDaF:ksIdno", 900, "someObject");  
       
               if (b.get().booleanValue() == true) {  
       
                  mc.shutdown();  
       
               }  
       
           } catch (Exception ex) {  
       
               ex.printStackTrace();  
       
           }  
       
           // 取得对象  
       
            try {  
       
               /* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */  
       
               MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  
       
               /* 按照key值从memcached中查找缓存,不存在则返回null */  
       
               Object b = mc.get("neea:testDaF:ksIdno");  
       
               System.out.println(b.toString());  
       
               mc.shutdown();  
       
           } catch (Exception ex) {  
       
               ex.printStackTrace();  
       
           }  
       
        }  
       
    }  

    结果:

    someObject

    使用telnet 结果:

    -----------------------------------------------------------------------

    官方网站:http://www.memcached.org/

    Github源代码: https://github.com/memcached/memcached

    帮助文档:https://github.com/memcached/memcached/blob/master/doc/protocol.txt

     

    另外,可以参考如下的博客

    相关链接: 
    Memcached笔记——(一)安装&常规错误&监控 
    Memcached笔记——(二)XMemcached&Spring集成 
    Memcached笔记——(三)Memcached使用总结 
    Memcached笔记——(四)应对高并发攻击 

     

  • 相关阅读:
    Tomcat启动过程[更详细]
    数据库连接池原理
    Druid
    Spring的注解积累
    React基础知识
    mac里git项目删除.DS_Store文件
    GET请求参数为中文时乱码分析
    npm中package.json详解
    前后端分离工具之ftl-server
    利用performance属性查看网页性能
  • 原文地址:https://www.cnblogs.com/jinhuazhe2013/p/5169335.html
Copyright © 2011-2022 走看看