用了一段时间memcache,没有认真的看过,了解下顺便做下笔记。
1. memcached
memcached是danga的一个项目,是一种高性能分布式缓存技术,将数据缓存到内存中,来提高访问速度。(目的:提速)
注:当内存一旦关闭,数据就会丢失;推荐存储一些频繁变化(比如统计在线人数)、检索(热点数据)且数据丢失也没影响。
memcached维护了一张大的hashmap内存表,以key-value形式存储,可以存放的类型(字符串、数值、boolean、对象、二进制、数组)
memcached是线程安全的。
libevent是一套跨平台的事件处理接口的封装
memcached使用libevent来进行网络并发连接的处理,能够保持在很大的并发情况下,仍旧能够保持快速的响应能力。
memcached在内容容量达到指定值得情况下使用LRU算法自动删除不使用的缓存。
应该每一次存储会记录时间戳,当容量到达瓶颈时找到时间最久的进行替换。
memcached是分布式缓存服务器,但服务器没有分布式功能,各个memcached不会互相通信以共享信息,所以这完全取决于客户端的实现。
2. 下载(略过)
3. 安装启动
以window为例,管理员身份打开控制台
几种方式
1.
1.1. 将memcached加入到后台进程中,打开命令控制台,进入到memcached根目录,输入 memcached.exe -d install 执行安装(卸载:memcached.exe -d uninstall)
1.2. 启动net start memcached(停止 net stop memcached) 或者 memcached.exe -d start (停止memcached.exe -d stop)
2. 直接双击打开memcached.exe文件
3. 控制台命令memcahed.exe -p 11211 (11211为memcached默认端口,端口可以自行修改)
其他dot命令自行百度,比如查看端口是否被占用等。。。
4. memcached基本命令
使用telnet测试
telnet是tcp/ip中一份子,是internet登录远程服务的标准协议和主要方式。
命令行:telnet ip 端口
如果提示未找到telnet 是由于未开启,可到《添加或删除程序中将其开启》如图:
memcached命令
格式:
|
set/add/replace/delete...... | |
key值,唯一 | |
客户端使用它存储关于键值对的额外信息 | |
数据存活时间,0代表永久 | |
数据字节数 | |
存储数据块,长度需要等于 |
replace:要求key必须存在,否则提示no_stored
delete:如果key存在提示deleted如果不存在提示no_found
语法:delete key
append:在原有的key值后面增加数据
语法:append key 0 0 2
prepend:在key原有的数据前面增加
同上
flush_all:立即使所有存在的元素失,它并不会立即删除所有资源,只是标记,因此已经使用的内存会被新的数据复写。stats:查看当前memcached的一些基本状态,比如版本,启动时间,命中率,连接数,命令执行次数等等
值得关注的是:通常我们可以根据命中率来判断当前内存中缓存的数据是否合理,如果命中率偏低,那么代表有很多数据存到内存中并没有使用,且无意义的占用了内存,可以据此优化memcached存储。
Pid: Memcached 服务器中的进程编号
Uptime:Memcached服务器启动之后所经历的时间,单位秒
Time: 当前系统时间,单位秒
Version: Memcached 的版本号
pointer_size:服务器所在主机操作系统的指针大小,一般为32或64
curr_items:表示当前缓存中存放的所有缓存对象的数量
total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括已经删除的对象
bytes:表示系统存储缓存对象所使用的存储空间,单位为字节
curr_connections:表示当前系统打开的连接数
total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数
cmd_get: 查询缓存的次数,即使不成功也算一次
cmd_set: 保存数据的次数,当然这里只保存成功的次数
get_hits:表示获取数据成功的次数。
get_misses:表示获取数据失败的次数。
evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象
bytes_read:memcached服务器从网络读取的总的字节数
bytes_written:memcached服务器发送到网络的总的字节数
limit_maxbytes:memcached服务缓存允许使用的最大字节数
threads:被请求的工作线程的总数量
缓存命中率 = get_hits / cmd_get * 100% ;