Memcache介绍、安装、使用(三)

Memcache命令操作

五种基本 memcached 命令执行最简单的操作:
set 、add、replace、 get、delete
前三个命令属于对键值对修改,格式如下:command < key > < flags > < expiration time > < bytes > < value >


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


发现指定bytes参数,必须设值要足额才算执行完成。

set

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

set userId 0 0 5
12345
STORED

set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应

add

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

replace

仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应
最后两个基本命令是 get 和 delete
命令格式:command < key >

get

命令用于检索与之前添加的键值对相关的值,如果这个键存在于缓存中,则返回相应的值。如果不存在,则不返回任何内容。
Get可以取一个或多个键值,由空格隔开的字串 get key1 key2

set userId 0 0 5
12345
STORED

get userId
VALUE userId 0 5
12345
END

delete

delete 命令用于删除 memcached 中的任何现有值, 使用一个键调用 delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条 NOT_FOUND 消息

set userId 0 0 5
98765
STORED

delete bob
NOT_FOUND

delete userId
DELETED

incr

为特定的键增 1 或特定的值。只适用于数值 incr key value

set num 0 0 2
11
STORED
incr num 3
14
get num
VALUE num 0 2
14
END

decr

为特定的键减 1 或特定的值。只适用于数值 decr key value

set num 0 0 2
14
decr num 6
8
get num
VALUE num 0 2
8

高级 memcached 客户机命令

gets , cas , stats

stats

stats 命令的功能正如其名:转储所连接的 memcached 实例的当前统计数据。
可用stats命令查看缓存系统详情:

stats
STAT pid 5198               pid       //Memcached进程ID
STAT uptime 1852            uptime   //Memcached运行时间,单位:秒
STAT time 1445235207        time   //Memcached当前的UNIX时间
STAT version 1.4.24         version  //Memcached的版本号
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 0.040002       rusage_user  //该进程累计的用户时间,单位:秒
STAT rusage_system 0.036002 rusage_system  //该进程累计的系统时间,单位:秒
STAT curr_connections 5         curr_connections   //当前连接数量
STAT total_connections 6        total_connections   //Memcached运行以来接受的连接总数
STAT connection_structures 6        connection_structures  //Memcache分配的连接结构的数量
STAT reserved_fds 20
STAT cmd_get 1              cmd_get   //查询请求总数
STAT cmd_set 1              cmd_set  //存储(添加/更新)请求总数
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0             get_hits  //查询成功获取数据的总次数
STAT get_misses 1               get_misses  //查询成功未获取到数据的总次数
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 113         bytes_read  //Memcached从网络读取到的总字节数
STAT bytes_written 114          bytes_written  //Memcached向网络发送的总字节数
STAT limit_maxbytes 104857600   limit_maxbytes  //Memcached在存储时被允许使用的字节总数
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 malloc_fails 0
STAT bytes 0                    bytes  //Memcached当前存储内容所占用的字节数
STAT curr_items 0               curr_items  //Memcached当前存储的内容数量
STAT total_items 0              total_items   //Memcached启动以来存储过的内容总数
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END

stats items

列出所有key

STAT items:1:number 4
STAT items:1:age 2460
STAT items:4:number 1
STAT items:4:age 2649
…
END
Items :  itemsid  :  number  itemid中保存的key个数

stats cachedump itemid length

通过itemid获取key,基于列出的items id,本例中为7,第2个参数为列出的长度,0为全部列出

stats cachedump 1 0
ITEM mm [8 b; 1445237370 s]
ITEM key001 [15 b; 1445240439 s]
ITEM key01 [5 b; 1445237370 s]
ITEM userid [5 b; 1445237370 s]
END
stats cachedump 4 0
ITEM MemUser [87 b; 1445240439 s]
END

flush_all

flush_all 是最后一个要介绍的命令。这个最简单的命令仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则 flush_all 能提供很大的用处
flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行

version

返回服务器版本

version
VERSION 1.4.24

quit

命令没有参数
接收此命令后,服务器关闭连接。不过,客户端可以在不再需要时,简单地关闭连接就行,并不一定需要发送这个命令

quit
Connection closed by foreign host.

Memcache缓存性能

确定缓存效率的一种方法查看缓存的命中率(hit ratio)缓存命中率表示执行 get 的次数与错过 get 的次数的百分比, 用 get_hits 的数值除以 cmd_gets。

Memcached正确使用

memcached 并不安全

为了确保最佳性能,memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。这意味着对 memcached 服务器的访问应该这么处理:一是通过将它们放到应用程序部署环境相同的私有侧,二是如果安全性是必须的,那么就使用 UNIX® socket 并只允许当前主机上的应用程序访问此 memcached 服务器。

这多少牺牲了一些灵活性和弹性,以及跨网络上的多台机器共享 RAM 缓存的能力,但这是在目前的情况下确保 memcached 数据安全性的惟一一种解决方案。

不要缓存数据库行或文件

虽然可以使用 memcached 存储加载自数据库的数据行,但这实际上是查询缓存,并且大多数数据库都提供各自的查询缓存的机制。其他的对象,比如文件系统的图像或文件的情况与此相同。很多应用程序和 web 服务器针对此类工作已经有了一些很好的解决方案。

如果在加载和格式化后,使用它来存储全部信息块,就可以从 memcached 获得更多的实用工具和性能上的改善。以博客站点为例,存储信息的最佳点是在将博客类别格式化为对象,甚至是在格式化成 HTML 后。博客页面的构造可通过从 memcached 加载各个组件(比如 blog post、category list、post history 等)并将完成的 HTML 写回至客户机实现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章