memcached:
memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
最初的目的是用来加速动态页面访问,减少缓解数据库压力,主要生产场景用来缓存mysql的查询结果。
缓存服务器:
缓存:cache,无持久存储功能;所有数据都保存在内存中,断电即丢失 bypass缓存--旁挂式缓存 只能性一般依赖于服务端,一半依赖于客户端 k/v cache,仅支持存储流式化数据; 单个缓存项大小不能大于1M,支持池流失化数据。 key和value都放在内存中。key放在hash表中 LiveJournal旗下的Danga Interactive研发,
特性:
k/v cache:仅可序列化数据;存储项:k/v;存储于内存中
智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端;
运作方式,客户端(例如php)先找memcache查找缓存中是否有其想要的数据,有则直接读取(缓存命中),没有则去真实的服务端请求数据,请求到数据后,自己将请求结果缓存到memcache。
分布式缓存:互不通信的分布式集群;负载均衡需要客户端自己实现。(需要程序员自己实现)
分布式系统请求路由方法:取模法,一致性哈希算法; key的哈希值除以服务的数量取模,0就是第一台,1就是第二台...但是取模法会出现雪崩效应。其中一台故障,但是客户端根据算法还是会调度到该服务器上。
建议使用一致性哈希算法
hash环
算法复杂度:O(1)
执行效率非常高
清理过期缓存项:
缓存耗尽:LRU ,最近最少使用算法,主动清理 缓存项过期:惰性清理机制,不删除,直接覆盖
安装配置:
有两个版本centos6都可以安装 memcache memcached centos7只能按装这个 由CentOS 7 base仓库直接提供: 监听的端口: 11211/tcp, 11211/udp tcp更可靠,udp效率更高效 主程序:/usr/bin/memcached 配置文件:/etc/sysconfig/memcached #环境配置定义的变量,启动脚本中要调用。 [root@localhost html]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="" # 使用memcached [options]
Unit File:memcached.service
[root@localhost html]# cat /usr/lib/systemd/system/memcached.service [Unit] Description=Memcached Before=httpd.service After=network.target [Service] Type=simple EnvironmentFile=-/etc/sysconfig/memcached ##调用环境文件 ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS ###调用变量 [Install] WantedBy=multi-user.target
协议格式:memcached协议
文本格式 使用Telnet就可以控制 二进制格式
memcache配置文件 centos7为列
[root@localhost html]# rpm -ql memcached /etc/sysconfig/memcached #memcache的运行环境 /usr/bin/memcached /usr/bin/memcached-tool /usr/lib/systemd/system/memcached.service #服务启动脚本 /usr/share/doc/memcached-1.4.15 /usr/share/doc/memcached-1.4.15/AUTHORS /usr/share/doc/memcached-1.4.15/CONTRIBUTORS /usr/share/doc/memcached-1.4.15/COPYING /usr/share/doc/memcached-1.4.15/ChangeLog /usr/share/doc/memcached-1.4.15/NEWS /usr/share/doc/memcached-1.4.15/README.md /usr/share/doc/memcached-1.4.15/protocol.txt /usr/share/doc/memcached-1.4.15/readme.txt /usr/share/doc/memcached-1.4.15/threads.txt /usr/share/man/man1/memcached-tool.1.gz /usr/share/man/man1/memcached.1.gz
命令:
命令格式:
统计类:stats, stats items, stats slabs, stats sizes 存储类: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
exptime 过期时间
memcached程序的常用选项:
memcached [options]
-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes. 缓存空间大小,默认64MB -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. 0表示关闭此功能 -M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止; -f <factor>:增长因子;默认是1.25;内存的空间分配因子 创建chunk的粒度,粒度过于粗糙浪费空间。根据实际情况调整。 -t <threads>:启动的用于响应用户请求的线程数;
使用Telnet连接使用文本格式的协议
[root@localhost ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats STAT pid 5051 #主进程的pid号 STAT uptime 13419 STAT time 1477675842 STAT version 1.4.15 STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.144034 STAT rusage_system 1.049062 STAT curr_connections 10 STAT total_connections 743 STAT connection_structures 12 STAT reserved_fds 20 STAT cmd_get 0 STAT cmd_set 0 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 0 STAT get_misses 0 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 10270 STAT bytes_written 756593 STAT limit_maxbytes 67108864 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT hash_power_level 16 STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT bytes 0 STAT curr_items 0 STAT total_items 0 STAT expired_unfetched 0 STAT evicted_unfetched 0 STAT evictions 0 STAT reclaimed 0 END
memcache也是使用事件驱动机制,开启的线程数最好不要超过cpu核心数
memcached默认没有认证机制,可借用于SASL进行认证;
SASL:Simple Authentication Secure Layer #可以基于pam或mysql认证
API:
php-pecl-memcache #php的API接口扩展模块 php-pecl-memcached #PHP的API接口扩展模块 python-memcached #python的API接口扩展模块 libmemcached #工具 libmemcached-devel #开发库 命令行工具: memcached-tool SERVER:PORT COMMAND memcached-tool - stats and management tool for memcached
图形界面工具: phpmemcacheadmin
安装 yum install httpd php php-pecl-memcached memcached
将管理页面放到httpd的虚拟主机目录。php通过API会调用一些系统调用。selinux会阻止,禁用selinux。目录的属主。启动httpd服务,启动memcached 即可运行。
进入首页先配置根据装的是memcached还是memcache选择API接口。如果服务启动没有问题。访问status页面能看到memcache的状态。
注意:memcache的使用场景,有场景适合使用更为专业的redis,但是如果本机安装一个memcache就能解决大问题。也就没必要使用redis。
nginx也支持memcache有相关模块 ngxhttpmemcached_module
原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/56558