memcached学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcached学习笔记相关的知识,希望对你有一定的参考价值。

1  memcached概述

memcached是一个高性能,分布式的内存对象缓存系统,通常是通过缓存降低数据库服务的负载来加速动态Web应用程序。memcache的分布是由客户端决定如何进行分布的,即依赖客户端。集中将后端的服务器的数据缓存到memcache服务器上。memcached缓存数据的上限是1M,超过1M的数据将不缓存,适合于小数据的缓存。LiveJournal旗下的Danga Interactive研发的产品。但是memcached无持久存储功能;使用内存空间来缓存数据,重启或关机,缓存项失效,失效后需要热身才能重新上线。缓存系统是hash后存储数据,是基于kv(键值)格式来存储数据是一种高效的方法

2  概念介绍

缓存分两类

一是:bypass缓存:旁挂式缓存:仅提供缓存服务,强依赖于客户端的智能性,如缓存的内容,该信息是否可以被缓存,缓存的时间等信息都由客户端决定,即前端的客户端决定。这种客户端称为smart  client。客户端第一次发起请求时,向后端的服务器获取获取,得到服务器响应后,客户端会判断该响应数据是否可以被缓存,如果可以,就把响应信息也存一份到缓存服务器,第二次,客户端发起同样的请求,会先查看缓存服务器,如果缓存服务器此时有对应数据,直接响应,如果没有数据,则客户端会向后端服务器发起请求。mencache一半依赖于客户端,一般依赖于缓存和后端的原始存储。mencache是旁挂式缓存。

二是:代理式缓存:类似递归缓存的方式,如果本地没有缓存,需要自己去查找后端的服务器,得到数据

memcached特性

k/v cache:仅可存储可序列化(流式化)数据;存储项:k/v;

智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端;

分布式缓存:互不通信的分布式集群;

分布式系统请求路由方法:取模法,一致性哈希算法;

算法复杂度:O(1)

清理过期缓存项:

缓存耗尽:LRU ,最近最少使用算法

缓存项过期:惰性清理机制

3  安装配置

监听的端口:11211/tcp, 11211/udp :一般可以仅支持tcp,但是用tcp每次都需要三次握手,开销较大。

软件集成在base仓库里,通过yum直接安装,yum  -y  install  memcached 完成memcached服务器端的安装。客户端要驱动memcache,也要安装相应的包,有各种编程语言的客户端包,python,php,perl等,可以通过yum  list all *memcache*查看。

memcached通过命令行传递选项来启动。可以查看/usr/lib/systemd/system/memcached.service这个文件查看对应的启动命令。启动相关参数放在/etc/sysconfig/memcached文件里。可以通过memcached  -h 查看到更多选项。

软件安装成功后,直接启动程序,systemctl start memcached.service,不需要做其他设置。

libmemcached.x86_64:基于C库的专用客户端工具来管理,连接到指定服务器上做设置。yum -y  install libmemcached,安装完后会生成很多mem相关的工具。如果不支持文本协议,只支持二进制,那么就一定要使用libmemcached这个专业工具进行管理,如果是支持文本协议,可以用telnet直接连接管理,连接方法是telnet 17.18.50.75 11211,不支持help.

/usr/share/doc/memcached-1.4.15/protocol.txt这个文档记录了关于memcache命令的介绍,记录了关于命令的格式。有三类命令:存储命令,获取数据的命令和其他命令三类

配置文件

主程序:/usr/bin/memcached

配置文件:/etc/sysconfig/memcached

Unit File:memcached.service 

按需存储,会造成内存碎片多

提前规划好缓存项,按一定步进规则来提前划分空间,切割大小的叫slab class

协议格式:memcached协议

文本格式:效率低

二进制格式:

命令:

统计类:stats, stats items, stats slabs, stats sizes 其中,stats显示所有的内键状态

存储类:set, add, replace, append, prepend

命令格式:<command name> <key> <flags> <exptime> <bytes>  

<cas unique>

检索类:get, delete, incr/decr

清空:flush_all ,清空所有的缓存

示例:

telnet> add KEY <flags> <expiretime> <bytes> \r
telnet> VALUE
telnet 172.18.50.75 11211
add mykey 1 600 15 #存入一个15个字符,这个关键字就是mykey
hello memcached  #输入要存入缓存的内容
STORED  #提示已经存入
get mykey  #
VALUE mykey 1 15
hello memcached
END
append mykey 1 600 5  #在后面追加5个字符,也可以在前面追加,prepend
sunny
STORED
incr count 3 #增加,步进值为3,如果原count是2,则之后count为5

4  memcached程序的常用选项

-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes..默认是64M内存。

-c <num>:Use <num> max simultaneous connections; the default is 1024.

-u <username>:以指定的用户身份来运行进程;

-l <ip_addr>:监听的IP地址,默认为本机所有地址;

-p <num>:监听的TCP端口, the default is port 11211.

-U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.

-M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止;

-f <factor>:增长因子;默认是1.25;

-t <threads>:启动的用于响应用户请求的线程数;

memcached默认没有认证机制,可借用于SASL进行认证;

SASL:Simple Authentication Secure Layer

API:

php-pecl-memcache

php-pecl-memcached

python-memcached

libmemcached

libmemcached-devel

命令行工具:

memcached-tool  SERVER:PORT  COMMAND 


本文出自 “阳光运维” 博客,请务必保留此出处http://ghbsunny.blog.51cto.com/7759574/1982351

以上是关于memcached学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Python 学习笔记 - Memcached

Memcache 学习笔记---- PHP 脚本操作 Memcache 服务器

memcached学习笔记

Memcached学习笔记之一:memcached安装

Memcached学习笔记之四:Memcached统计命令

Linux学习笔记总结--memcached配置