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

Memcache基础(一)

2015-06-05 15:11 579 查看
Memcache笔记

作者:LiveJournal开发团体开发的高性能分布式内存缓存服务器

目的:通过缓存数据查询结果,减少对数据库的查询访问次数,提高动态web应用的速度,提高可扩展性

Memcache 为项目名称

Memcached为服务器端的主程序名称

运行原理:

  (1)在首次访问数据库的时候讲查询的数据保存到memcached中,

  (2)再次访问时直接访问memcached进行查询

 

什么时候用Memcached
(1)大量数据集中访问时;
(2)随着数据量的增加,访问集中时

  (3)随着连接数和请求数的增加

安装和卸载:

  -d install 安装memcached服务

  -d start 启动

  -d stopshutdown 关闭正在运行的memcached服务

  -d uninstall 卸载memcached服务

  -d restart 重启memcached 服务

常用命令
存储命令:
set 命令
add 命令
replace 命令
append 命令
读取命令:
get 命令
查看memcached使用状态
stats 命令
stats items 命令
stats slabs 命令
stats sizes 命令
flush_all 命令

客户端向服务器发送命令格式:

1)、
<command name> <key> <flags> <exptime> <bytes>\r\n
<command name>:set/get/add....   
<key>:key  
 <flags>:16位整数      
 <exptime>:过期时间(0)   
 <bytes>:需要存储的字节数   
 \r\n:结束标志
eg:
add key 0000111122223333 0 \r\n
2)、获取数据
get <key> * \r\n
<key> *  :表示一个或多个key  用空格分开
以\r\n 命令头结束
3)、 数据格式
VALUE <key> <falgs> <bytes >\r\n
<data black>\r\n
<key>  希望数据的key值
<falgs> 发送set命令设置的标志项
<bytes> 发送数据的长度 (不包含“\r\n”)
"\r\n" 文本行的结束标志
<data black> 希望接受的数据项
“\r\n” 接收一个数据项的结束标志
4)、delete <key> <time>\r\n
<key> key
<time>  客户端希望服务器删除数据的时间  (unix的时间或者从现在开的秒数)
“\r\n”

Memcached 的内存分配策略
数据存储方式:Slab Allocation 
按照预先分配的大小,将分配的内存分割成特定长度的块,以解决内存碎片问题
Slab Allocation 原理: 将分配的内存分割成各种尺寸的chunk  并把尺寸相同的块分组(chunk的集合)
分配级别:
page :分配slab的内存空间  默认 1M,分配给slab后再根据slab的大小切分成成chunk;
chunk: 用于缓存记录的内存空间
Slab Class :特定大小的chunk组(维护一个List)
memcached根据收到的数据大小选择合适数据大小的slab
注意:
1)、Memcached 分配出去的page是不会被回收的或者重新分配
2)、Memcached 申请的内存是不会被释放的;
3)、slab 空闲的chunk是不会借给别的slab使用;
浪费原因:
1)、chunk中存放的数据小于chunk长度 ,产生浪费
2)、page分块为chunk是分不完,产生浪费
3)、某个slab可能一直未被用到,产生浪费

过期方式:
Lazy Expiration(懒性过期)
Memcached内部不会监视记录是否过期,而是get时查看记录的过期时间戳(lazy expiration)
LRU(最近最少使用)
Memcached 会优先使用以超时的记录空间,如果在追加新纪录时空间不足时,就要从最近未被使用的记录中搜索,并将其空间分配给新的记录 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Memcache