set(可更新)
set key flags exptime bytes [noreply]
value
//set key 整型参数 缓存中保存键值对的时间长度 在缓存中存储的字节数 告知服务器不需要返回数据
add (不可更新)
add key flags exptime bytes [noreply]
value
repalce (不存在则失败)
replace key flags exptime bytes [noreply]
value
append(追加数据)
append key flags exptime bytes [noreply]
value
cas(数据没有被更新则写入)
cas key flags exptime bytes unique_cas_token [noreply]
value
get key1 key2 key3
gets key1 key2 key3
(获取带有CAS令牌存的数据值)
delete key[noreply]
(删除已存在的key)
incr key increment_value
(对键值自增)
decr key decrement_value
(对键值自减)
stats
(返回统计信息)
• 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:已过期的数据条目来存储新数据的数目
stats items
(显示各个slab中item的数量和存储时长)
stats slabs
(显示各个slab的信息)
stats sizes
(显示所有item的大小和个数)
flush_all [time] [noreply]
(清理缓存中所有的键值对)
命令总结
/*
**className:MemcachedJava.java
**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("Memcached 服务的主机地址", 端口号));
System.out.println("Connection to server sucessful.");
// 关闭连接
mcc.shutdown();
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
}
Memcached的优化
提高Memcached访问命中,优先读取缓存
例:每次新增数据到数据库的同时,就将数据写入或者复制一份到Memcahced里面,然后从业务逻辑上让程序优先读缓存,没有数据再查数据库
提高内存利用率,减少内存浪费
- 减少chunk内存空间浪费的调优方法为根据业务数据大小,利用-n参数设定chunk的初始值,以及-fvans胡factor增长因子设置chunk的大小尽可能接近业务数据大小
- 减少slab的浪费,设定slab的大小为chunk的整数倍
- 采用一致性哈希分布式缓存集群架构
Memcached的特点
- 协议简单 ·
- 基于libevent的事件处理 ·
- 内置内存存储方式
- memcached不互相通信的分布式