• w3cschoolmemcached教程


    https://www.w3cschool.cn/memcached/

    Memcached 教程

     Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

    Memcached 教程
     

    手册简介

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

    手册说明

    1477538529958052

    Memcached是什么?

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

    Memcached有什么特征?

    memcached作为高速运行的分布式缓存服务器,具有以下的特点。
    · 协议简单
    · 基于libevent的事件处理
    · 内置内存存储方式
    · memcached不互相通信的分布式
    协议
    memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。
    因此,通过telnet也能在memcached上保存数据、取得数据。下面是例子。
    $ telnet localhost 11211
    Trying 127.0.0.1
    Connected to localhost.localdomain (127.0.0.1).
    Escape character is '^]'.
    set foo 0 0 3 (保存命令)
    bar (数据)
    STORED (结果)
    get foo (取得命令)
    VALUE foo 0 3 (数据)
    bar (数据)
    

    事件处理
    libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考Dan Kegel的The C10K Problem。
    存储方式
    为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
    通信分布式
    memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。本文也将介绍memcached的分布式。

    Memcached set 命令

    2018-08-10 19:30 更新

    Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。

    如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

    语法:

    set 命令的基本语法格式如下:

    set key flags exptime bytes [noreply] 
    value 

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

    实例

    以下实例中我们设置:

    • key → w3cschool
    • flag → 0
    • exptime → 900 (以秒为单位)
    • bytes → 9 (数据存储的字节数)
    • value → memcached
    set w3cschool 0 900 9
    memcached
    STORED
    
    get w3cschool
    VALUE w3cschool 0 9
    memcached
    
    END

    输出

    如果数据设置成功,则输出:

    STORED

    输出信息说明:

    • STORED:保存成功后输出。
    • ERROR:在保持失败后输出。

    Memcached add 命令

    2018-08-10 19:31 更新

    Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。

    如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED

    语法:

    add 命令的基本语法格式如下:

    add key flags exptime bytes [noreply]
    value

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

    实例

    以下实例中我们设置:

    • key → new_key
    • flag → 0
    • exptime → 900 (以秒为单位)
    • bytes → 10 (数据存储的字节数)
    • value → data_value
    add new_key 0 900 10
    data_value
    STORED
    get new_key
    VALUE new_key 0 10
    data_value
    END

    输出

    如果数据添加成功,则输出:

    STORED

    输出信息说明:

    • STORED:保存成功后输出。
    • NOT_STORED :在保持失败后输出。

    Memcached replace 命令

    2018-08-10 19:32 更新

    Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)

    如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED

    语法:

    replace 命令的基本语法格式如下:

    replace key flags exptime bytes [noreply]
    value

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

    实例

    以下实例中我们设置:

    • key → mykey
    • flag → 0
    • exptime → 900 (以秒为单位)
    • bytes → 10 (数据存储的字节数)
    • value → data_value

    以下实例中我们使用的键位 'mykey' 并存储对应的值 data_value。执行后我们替换相同的 key 的值为 'some_other_value'。

    add mykey 0 900 10
    data_value
    STORED
    get mykey
    VALUE mykey 0 10
    data_value
    END
    replace mykey 0 900 16
    some_other_value
    get mykey
    VALUE mykey 0 16
    some_other_value
    END

    输出

    如果数据添加成功,则输出:

    STORED

    输出信息说明:

    • STORED:保存成功后输出。
    • NOT_STORED:执行替换失败后输出。

    Memcached append 命令

    2018-08-10 19:35 更新

    Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。

    语法:

    append 命令的基本语法格式如下:

    append key flags exptime bytes [noreply]
    value

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

    实例

    实例如下:

    • 首先我们在 Memcached 中存储一个键 w3cschool,其值为 memcached。
    • 然后,我们使用 get 命令检索该值。
    • 然后,我们使用 append 命令在键为 w3cschool 的值后面追加 "redis"。
    • 最后,我们再使用 get 命令检索该值。
    set w3cschool 0 900 9
    memcached
    STORED
    get w3cschool
    VALUE w3cschool 0 14
    memcached
    END
    append w3cschool 0 900 5
    redis
    STORED
    get w3cschool
    VALUE w3cschool 0 14
    memcachedredis
    END

    输出

    如果数据添加成功,则输出:

    STORED

    输出信息说明:

    • STORED:保存成功后输出。
    • NOT_STORED:该键在 Memcached 上不存在。
    • CLIENT_ERROR:执行错误。

    Memcached prepend 命令

    2018-08-10 19:37 更新

    Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。

    语法:

    prepend 命令的基本语法格式如下:

    prepend key flags exptime bytes [noreply]
    value

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

    实例

    实例如下:

    • 首先我们在 Memcached 中存储一个键 w3cschool,其值为 memcached。
    • 然后,我们使用 get 命令检索该值。
    • 然后,我们使用 prepend 命令在键为 w3cschool 的值后面追加 "redis"。
    • 最后,我们再使用 get 命令检索该值。
    set w3cschool 0 900 9
    memcached
    STORED
    get w3cschool
    VALUE w3cschool 0 14
    memcached
    END
    prepend w3cschool 0 900 5
    redis
    STORED
    get w3cschool
    VALUE w3cschool 0 14
    redismemcached
    END

    输出

    如果数据添加成功,则输出:

    STORED

    输出信息说明:

    • STORED:保存成功后输出。
    • NOT_STORED:该键在 Memcached 上不存在。
    • CLIENT_ERROR:执行错误。

    Memcached CAS 命令

    2018-08-10 19:39 更新

    Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作

    它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。

    检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。

    语法:

    CAS 命令的基本语法格式如下:

    cas key flags exptime bytes unique_cas_token [noreply]
    value

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • unique_cas_token通过 gets 命令获取的一个唯一的64位值。
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

    实例

    要在 Memcached 上使用 CAS 命令,你需要从 Memcached 服务商通过 gets 命令获取令牌(token)。

    gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于,gets 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 "版本" 标识符。

    实例步骤如下:

    • 如果没有设置唯一令牌,则 CAS 命令执行错误。
    • 如果键 key 不存在,执行失败。
    • 添加键值对。
    • 通过 gets 命令获取唯一令牌。
    • 使用 cas 命令更新数据
    • 使用 get 命令查看数据是否更新
    cas tp 0 900 9
    ERROR             <− 缺少 token
    
    cas tp 0 900 9 2
    memcached
    NOT_FOUND         <− 键 tp 不存在
    
    set tp 0 900 9
    memcached
    STORED
    
    gets tp
    VALUE tp 0 9 1
    memcached
    END
    
    cas tp 0 900 5 1
    redis
    STORED
    
    get tp
    VALUE tp 0 5
    redis
    END

    输出

    如果数据添加成功,则输出:

    STORED

    输出信息说明:

    • STORED:保存成功后输出。
    • ERROR:保存出错或语法错误。
    • EXISTS:在最后一次取值后另外一个用户也在更新该数据。
    • NOT_FOUND:Memcached 服务上不存在该键值。

    Memcached get 命令

    2018-08-10 19:40 更新

    Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。

    语法:

    get 命令的基本语法格式如下:

    get key

    多个 key 使用空格隔开,如下:

    get key1 key2 key3

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。

    实例

    在以下实例中,我们使用 w3cschool 作为 key,过期时间设置为 900 秒。

    set w3cschool 0 900 9
    memcached
    STORED
    get w3cschool
    VALUE w3cschool 0 9
    memcached
    END

    Memcached gets 命令

    2018-08-10 19:42 更新

    Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。

    语法:

    gets 命令的基本语法格式如下:

    gets key

    多个 key 使用空格隔开,如下:

    gets key1 key2 key3

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。

    实例

    在以下实例中,我们使用 w3cschool 作为 key,过期时间设置为 900 秒。

    set w3cschool 0 900 9
    memcached
    STORED
    gets w3cschool
    VALUE w3cschool 0 9 1
    memcached
    END

    Memcached delete 命令

    2018-04-20 17:27 更新

    Memcached delete 命令用于删除已存在的 key(键)。

    语法:

    delete 命令的基本语法格式如下:

    delete key [noreply]

    多个 key 使用空格隔开,如下:

    delete key1 key2 key3

    Memcached incr 与 decr 命令

    2018-08-10 19:45 更新

    Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。

    incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。

    如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR


    incr 命令

    语法:

    incr 命令的基本语法格式如下:

    incr key increment_value

    参数说明如下:

    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • increment_value: 增加的数值。

    实例

    在以下实例中,我们使用 visitors 作为 key,初始值为 10,之后进行加 5 操作。

    set visitors 0 900 2
    10
    STORED
    get visitors
    VALUE visitors 0 2
    10
    END
    incr visitors 5
    15
    get visitors
    VALUE visitors 0 2
    15
    END

    Memcached stats 命令

    2018-08-10 19:46 更新

    Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。

    语法:

    stats 命令的基本语法格式如下:

    stats

    实例

    在以下实例中,我们使用了 stats 命令来输出 Memcached 服务信息。

    stats
    STAT pid 1162
    STAT uptime 5022
    STAT time 1415208270
    STAT version 1.4.14
    STAT libevent 2.0.19-stable
    STAT pointer_size 64
    STAT rusage_user 0.096006
    STAT rusage_system 0.152009
    STAT curr_connections 5
    STAT total_connections 6
    STAT connection_structures 6
    STAT reserved_fds 20
    STAT cmd_get 6
    STAT cmd_set 4
    STAT cmd_flush 0
    STAT cmd_touch 0
    STAT get_hits 4
    STAT get_misses 2
    STAT delete_misses 1
    STAT delete_hits 1
    STAT incr_misses 2
    STAT incr_hits 1
    STAT decr_misses 0
    STAT decr_hits 1
    STAT cas_misses 0
    STAT cas_hits 0
    STAT cas_badval 0
    STAT touch_hits 0
    STAT touch_misses 0
    STAT auth_cmds 0
    STAT auth_errors 0
    STAT bytes_read 262
    STAT bytes_written 313
    STAT limit_maxbytes 67108864
    STAT accepting_conns 1
    STAT listen_disabled_num 0
    STAT threads 4
    STAT conn_yields 0
    STAT hash_power_level 16
    STAT hash_bytes 524288
    STAT hash_is_expanding 0
    STAT expired_unfetched 1
    STAT evicted_unfetched 0
    STAT bytes 142
    STAT curr_items 2
    STAT total_items 6
    STAT evictions 0
    STAT reclaimed 1
    END

    这里显示了很多状态信息,下边详细解释每个状态项:

    • pid: memcache服务器进程ID
    • uptime:服务器已运行秒数
    • time:服务器当前Unix时间戳
    • version:memcache版本
    • pointer_size:操作系统指针大小
    • rusage_user:进程累计用户时间
    • rusage_system:进程累计系统时间
    • curr_connections:当前连接数量
    • total_connections:Memcached运行以来连接总数
    • connection_structures:Memcached分配的连接结构数量
    • cmd_get:get命令请求次数
    • cmd_set:set命令请求次数
    • cmd_flush:flush命令请求次数
    • get_hits:get命令命中次数
    • get_misses:get命令未命中次数
    • delete_misses:delete命令未命中次数
    • delete_hits:delete命令命中次数
    • incr_misses:incr命令未命中次数
    • incr_hits:incr命令命中次数
    • decr_misses:decr命令未命中次数
    • decr_hits:decr命令命中次数
    • cas_misses:cas命令未命中次数
    • cas_hits:cas命令命中次数
    • cas_badval:使用擦拭次数
    • auth_cmds:认证命令处理的次数
    • auth_errors:认证失败数目
    • bytes_read:读取总字节数
    • bytes_written:发送总字节数
    • limit_maxbytes:分配的内存总大小(字节)
    • accepting_conns:服务器是否达到过最大连接(0/1)
    • listen_disabled_num:失效的监听数
    • threads:当前线程数
    • conn_yields:连接操作主动放弃数目
    • bytes:当前存储占用的字节数
    • curr_items:当前存储的数据总数
    • total_items:启动以来存储的数据总数
    • evictions:LRU释放的对象数目
    • reclaimed:已过期的数据条目来存储新数据的数目

    Memcached stats items 命令

    2018-08-10 19:46 更新

    Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。

    语法:

    stats items 命令的基本语法格式如下:

    stats items

    实例

    stats items
    STAT items:1:number 1
    STAT items:1:age 7
    STAT items:1:evicted 0
    STAT items:1:evicted_nonzero 0
    STAT items:1:evicted_time 0
    STAT items:1:outofmemory 0
    STAT items:1:tailrepairs 0
    STAT items:1:reclaimed 0
    STAT items:1:expired_unfetched 0
    STAT items:1:evicted_unfetched 0
    END

    Memcached stats slabs 命令

    2018-08-10 19:47 更新

    Memcached stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。

    语法:

    stats slabs 命令的基本语法格式如下:

    stats slabs

    实例

    stats slabs
    STAT 1:chunk_size 96
    STAT 1:chunks_per_page 10922
    STAT 1:total_pages 1
    STAT 1:total_chunks 10922
    STAT 1:used_chunks 1
    STAT 1:free_chunks 10921
    STAT 1:free_chunks_end 0
    STAT 1:mem_requested 71
    STAT 1:get_hits 0
    STAT 1:cmd_set 1
    STAT 1:delete_hits 0
    STAT 1:incr_hits 0
    STAT 1:decr_hits 0
    STAT 1:cas_hits 0
    STAT 1:cas_badval 0
    STAT 1:touch_hits 0
    STAT active_slabs 1
    STAT total_malloced 1048512
    END

    Memcached stats sizes 命令

    2018-08-10 19:47 更新

    Memcached stats sizes 命令用于显示所有item的大小和个数。

    该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。

    语法:

    stats sizes 命令的基本语法格式如下:

    stats sizes

    实例

    stats sizes
    STAT 96 1
    END

    Memcached flush_all 命令

    2018-08-10 19:49 更新

    Memcached flush_all 命令用于用于清理缓存中的所有 key=>value(键=>值) 对。

    该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。

    语法:

    flush_all 命令的基本语法格式如下:

    flush_all [time] [noreply]

    实例

    清理缓存:

    set w3cschool 0 900 9
    memcached
    STORED
    get w3cschool
    VALUE w3cschool 0 9
    memcached
    END
    flush_all
    OK
    get w3cschool
    END

    Java 连接 Memcached 服务

    2018-08-10 20:01 更新

    使用 Java 程序连接 Memcached,需要在你的 classpath 中添加 Memcached jar 包。

    以下程序假定 Memcached 服务的主机为 127.0.0.1,端口为 11211。

    连接实例

    Java 连接 Memcached

    import net.spy.memcached.MemcachedClient;
    import java.net.*;
    
    
    public class MemcachedJava {
       public static void main(String[] args) {
          try{
             // 本地连接 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
             
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex){
             System.out.println( ex.getMessage() );
          }
       }
    }

    该程序中我们使用 InetSocketAddress 连接 IP 为 127.0.0.1 端口 为 11211 的 memcached 服务。

    执行以上代码,如果连接成功会输出以下信息:

    Connection to server successful.

    set 操作实例

    以下使用 java.util.concurrent.Future 来存储数据

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
          
             // 存储数据
             Future fo = mcc.set("w3cschool", 900, "Free Education");
          
             // 查看存储状态
             System.out.println("set status:" + fo.get());
             
             // 输出值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex){
             System.out.println( ex.getMessage() );
          }
       }
    }

    执行程序,输出结果为:

    Connection to server successful.
    set status:true
    W3Cschool value in cache - Free Education

    add 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "Free Education");
    
             // 打印状态
             System.out.println("set status:" + fo.get());
    
             // 输出
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 添加
             Future fo = mcc.add("w3cschool", 900, "memcached");
    
             // 打印状态
             System.out.println("add status:" + fo.get());
    
             // 添加新key
             fo = mcc.add("codingground", 900, "All Free Compilers");
    
             // 打印状态
             System.out.println("add status:" + fo.get());
             
             // 输出
             System.out.println("codingground value in cache - " + mcc.get("codingground"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex){
             System.out.println(ex.getMessage());
          }
       }
    }

    replace 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try {
             //连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加第一个 key=》value 对
             Future fo = mcc.set("w3cschool", 900, "Free Education");
    
             // 输出执行 add 方法后的状态
             System.out.println("add status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 添加新的 key
             fo = mcc.replace("w3cschool", 900, "Largest Tutorials' Library");
    
             // 输出执行 set 方法后的状态
             System.out.println("replace status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex){
             System.out.println( ex.getMessage() );
          }
       }
    }

    append 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "Free Education");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 对存在的key进行数据添加操作
             Future fo = mcc.append("w3cschool", 900, " for All");
    
             // 输出执行 set 方法后的状态
             System.out.println("append status:" + fo.get());
             
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("codingground"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }

    prepend 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "Education for All");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 对存在的key进行数据添加操作
             Future fo = mcc.prepend("w3cschool", 900, "Free ");
    
             // 输出执行 set 方法后的状态
             System.out.println("prepend status:" + fo.get());
             
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("codingground"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }

    CAS 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.CASValue;
    import net.spy.memcached.CASResponse;
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "Free Education");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
                
             // 使用 get 方法获取数据
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 通过 gets 方法获取 CAS token(令牌)
             CASValue casValue = mcc.gets("w3cschool");
    
             // 输出 CAS token(令牌) 值
             System.out.println("CAS token - " + casValue);
    
             // 尝试使用cas方法来更新数据
             CASResponse casresp = mcc.cas("w3cschool", casValue.getCas(), 900, "Largest Tutorials-Library");
             
             // 输出 CAS 响应信息
             System.out.println("CAS Response - " + casresp);
    
             // 输出值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }

    get 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "Free Education");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
    
             // 使用 get 方法获取数据
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }

    gets 操作实例、CAS

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.CASValue;
    import net.spy.memcached.CASResponse;
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "Free Education");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
                
             // 从缓存中获取键为 W3Cschool 的值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 通过 gets 方法获取 CAS token(令牌)
             CASValue casValue = mcc.gets("w3cschool");
    
             // 输出 CAS token(令牌) 值
             System.out.println("CAS value in cache - " + casValue);
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }

    delete 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数据
             Future fo = mcc.set("w3cschool", 900, "World's largest online tutorials library");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("w3cschool"));
    
             // 对存在的key进行数据添加操作
             Future fo = mcc.delete("w3cschool");
    
             // 输出执行 delete 方法后的状态
             System.out.println("delete status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("w3cschool value in cache - " + mcc.get("codingground"));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }

    Incr/Decr 操作实例

    import java.net.InetSocketAddress;
    import java.util.concurrent.Future;
    
    import net.spy.memcached.MemcachedClient;
    
    public class MemcachedJava {
       public static void main(String[] args) {
       
          try{
       
             // 连接本地的 Memcached 服务
             MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
             System.out.println("Connection to server sucessful.");
    
             // 添加数字值
             Future fo = mcc.set("number", 900, "1000");
    
             // 输出执行 set 方法后的状态
             System.out.println("set status:" + fo.get());
    
             // 获取键对应的值
             System.out.println("value in cache - " + mcc.get("number"));
    
             // 自增并输出
             System.out.println("value in cache after increment - " + mcc.incr("number", 111));
    
             // 自减并输出
             System.out.println("value in cache after decrement - " + mcc.decr("number", 112));
    
             // 关闭连接
             mcc.shutdown();
             
          }catch(Exception ex)
             System.out.println(ex.getMessage());
       }
    }
  • 相关阅读:
    bzoj 1093: [ZJOI2007]最大半连通子图
    bzoj 1266 1266: [AHOI2006]上学路线route
    poj 2104 K-th Number
    洛谷 P3313 [SDOI2014]旅行
    cogs 306. [SGOI] 糊涂的记者
    cogs 1164. 跑步
    洛谷 1821: [JSOI2010]Group 部落划分 Group
    洛谷 U3357 C2-走楼梯
    洛谷 P3014 [USACO11FEB]牛线Cow Line
    洛谷 P2982 [USACO10FEB]慢下来Slowing down
  • 原文地址:https://www.cnblogs.com/hanease/p/16204830.html
Copyright © 2020-2023  润新知