Memcache 的学习
来源:互联网 发布:怎么修改淘宝追加评价 编辑:程序博客网 时间:2024/05/29 14:56
Memcache学习笔记
了解Memcache
- 是基于C/S架构的,使用简单文本通讯
- 基于libevent处理开发
- 是内存缓存
- 基于客户端的分布式
- memcache数据是无状态的
- 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下的选项
- -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值
过期数据惰性删除
- 当某个值过期后,并没有从内存删除, 因此,stats 统计时, curr_item 有其信息
- 当某个新值去占用他的位置时,当成空 chunk 来占用
- 当 get 值时,判断是否过期,如果过期,返回空,并且清空, curr_item 就减少了
- 这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除,好处是节省了 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
- memcache的学习地址
- Memcache 的学习
- Memcache的学习系列(一):Memcache工作原理
- Memcache学习总结2-Memcache的使用基本介绍
- Memcache学习总结3-Memcache的配置项详解
- Memcache学习笔记二:Memcache做Mybatis的缓存
- Memcache 学习
- memcache学习
- Memcache学习
- memcache 学习
- memcache 学习
- 关于MEMCACHE的学习与备忘(一)
- 关于MEMCACHE的学习与备忘(二)
- memcache学习笔记1(在windows下安装PHP的扩展memcache)
- Memcache学习笔记一:Memcache在Linux下的安装和使用
- Memcache学习笔记三:Memcache管理Tomcat的Session,Session共享
- 【ThinkPHP学习】SAE的thinkphp的memcache开启
- Memcache学习笔记(1)- memcache简介
- J2SE第三章——面向对象(一)
- linux下的main 函数
- 课堂笔记二
- python中if __name__ == "__main__":解释
- java百钱白鸡的算法
- Memcache 的学习
- 206.Interval Sum-区间求和 I(中等题)
- 动态规划--背包问题,带习题
- usaco Ordered Fractions 顺序的分数(两种解法)
- Matrix--打乱选择题
- Struts2转发和重定向(跨业务模块)
- vs 如何智能感应并且自动选中关联的单词
- java实现打印菱形
- mosefet米勒电容效应