Memcache 的学习

来源:互联网 发布:怎么修改淘宝追加评价 编辑:程序博客网 时间:2024/05/29 14:56

Memcache学习笔记

了解Memcache

  1. 是基于C/S架构的,使用简单文本通讯
  2. 基于libevent处理开发
  3. 是内存缓存
  4. 基于客户端的分布式
  5. memcache数据是无状态的
  6. memcache的安全性

memcached源码安装

查看Linux(CentOS)系统是否已经安装libevent

rpm -qa | grep libevent

如果有执行命令(由于系统自带的版本旧,忽略依赖删除)

rpm -e libevent-xxx --nodeps

下载 libevent-2.0.21-stable.tar.gz,安装

# tar -zxvf libevent-2.0.21-stable.tar.gz# cd libevent-2.0.21-stable# ./configure --prefix=/usr/local/libevent-2.0.21# make && make install

安装 Memcache

# wget http://memcached.org/latest# tar -zxvf memcached-1.x.x.tar.gz# cd memcached-1.x.x# ./configure --prefix=/usr/local/memcache --with-libevent=/usr/local/libevent-2.0.21# make && make install# cd /usr/local/memcache/bin# memcached -u root -d

memcached主程序

命令选项

1. -p <num>      TCP端口,默认是112112. -U <num>      UDP端口,默认是11211,0表示关闭3. -s <file>     unix socket套接字文件4. -l <ip_addr>  监听的地址,默认是 INDRR_ANY5. -d   启动一个守护进程,后台运行6. -r            maximize core file limit                                     7. -u <username> 以哪个用户的身份运行8. -m <num>      以MB为单位,指定可用的最大内存空间,默认是 64 MB   9. -M            内存不够用时返回错误信息,而不是使用LRU算法利用空间10. -c <num>      最大支持的并发连接数,默认是102411. -P <file>     pid文件,使用-d选项时有效12. -f <factor>   增长因子,默认是1.2513. -n <bytes>    指定最小的 slab chunk 大小,默认是 64 字节14 -S         启用sasl进行用户认证

Windows下的选项

  1. -d start|restart|stop|shutdown|install|uninstall

数据操作

连接

telnet 127.0.0.1 11211

设置数据

set key flags exptime bytes [noreply] value

如果key不存在就是添加,否则就是更新

1、key 是通过被存储在Memcached的数据并从memcached获取键(key)的名称。2、flags 是32位无符号整数,该项目被检索时用的数据(由用户提供),   并沿数据返回服务器存储。3、exptime以秒为过期时间,0表示没有时间限制,如果exptime大于30天,   Memcached将使用它作为UNIX时间戳过期。编译memcached时指定一个最长常量   默认是30天。4、bytes 是在数据块中,需要被存储的字节数。基本上,这是一个需要存储   在memcached的数据的长度。5、noreply (可选) 参数告知服务器不发送回复6、value 是一个需要存储的数据。数据需要与上述选项执行命令后,将通过新的一行。返回值    1)STORED 表示成功。    2)ERROR 表明有问题,同时保存数据或错误的语法。

添加数据

add key flags exptime bytes [noreply]value

如果key已经存在,再放是放不进去的。关键字意思和 set 一样。

返回值    1)STORED 表示成功。    2)NOT_STORED 数据没有被存储在memcached。

替换数据

replace key flags exptime bytes [noreply]value

关键字意思和 set 一样。

返回值    1)STORED 表示成功。    2)NOT_STORED 数据没有被存储在memcached。

追加数据

append key flags exptime bytes [noreply]value

关键字意思和 set 一样。

返回值     1)STORED 表示成功。    2)NOT_STORED, 如果key不存在于memcached服务器。    3)CLIENT_ERROR, 如果有一些错误。

prepend数据

prepend key flags exptime bytes [noreply]value

关键字意思和 set 一样。

返回值     1)STORED 表示成功。    2)NOT_STORED, 如果key不存在于memcached服务器。    3)CLIENT_ERROR, 如果有一些错误。

获取数据

get key

删除数据

delete key [seconds]若加参数seconds,则表示在删除key后的seconds秒内,不允许add replace append prepend操作此key返回值    1)DELETED 删除成功    2)NOT_FOUND 没有发现key    3)ERROR 发生错误

递增递减数据

incr key incr_value #递增数据decr key incr_value #递减数据

注意: incr,decr操作是把值理解为32位无符号来+/-操作的. 值在[0-2^32-1]范围内

返回值    1)NOT_FOUND    2)CLIENT_ERROR    3)改变后的新值

清空数据

flush_all [time] [noreply]# time 表示经过 time 时间后清空数据

返回版本信息

version

退出

quit

cas

set key flags exptime bytes unique_cas_key [noreply]value#unique_cas_key类似于版本号

gets

gets key#可以获取unique_cas_key值

过期数据惰性删除

  1. 当某个值过期后,并没有从内存删除, 因此,stats 统计时, curr_item 有其信息
  2. 当某个新值去占用他的位置时,当成空 chunk 来占用
  3. 当 get 值时,判断是否过期,如果过期,返回空,并且清空, curr_item 就减少了
  4. 这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除,好处是节省了 cpu 时间和检测的成本

LRU删除机制

如果以122byte大小的chunk举例, 122的chunk都满了, 又有新的值(长度为 120)要加入, 要
挤掉谁?
memcached 此处用的 lru 删除机制.
(操作系统的内存管理,常用 fifo,lru 删除)
lru: least recently used 最近最少使用
fifo: first in ,first out
原理: 当某个单元被请求时,维护一个计数器,通过计数器来判断最近谁最少被使用.
就把谁 t 出.
注: 即使某个 key 是设置的永久有效期,也一样会被踢出来!
即–永久数据被踢现象

memcached 中的一些参数限制

key  1、最大长度是250字节  2、不能有空格和控制字符  3、不允许长度为0的keyvalue的限制:1M内存的限制:32位下最大设置到2G

统计信息

1、stats2、stats items3、stats slabs4、stats sizes

其它

分布式算法 1、取模算法 2、一致性hash算法常见现象 1、缓存雪崩    缓存雪崩一般是由某个缓存节点失效,导致其它节点的缓存命中率下降,缓存中确实的数据去数据库中    查询,短时间内导致数据库服务器崩溃。重启db server,短期又被压垮,但缓存数据也多一些。反复    启动多次,缓存重建完毕,DB才稳定运行。    或者是由于缓存周期性的失效,比如每6小时失效一次,那么每6小时,将会有一个请求峰值,    严重者甚至会令DB崩溃。 2、缓存无底洞 3、永久数据被踢
0 0
原创粉丝点击