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 命令
<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 会优先使用以超时的记录空间,如果在追加新纪录时空间不足时,就要从最近未被使用的记录中搜索,并将其空间分配给新的记录
作者: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 会优先使用以超时的记录空间,如果在追加新纪录时空间不足时,就要从最近未被使用的记录中搜索,并将其空间分配给新的记录