Memcache
1.背景:
随着计算机性能的发展 , 内存空间的加大 , 原本被存储在硬盘中的数据库数据可以被存入读取速度更快的内存当中
管理服务器数据存入内存的软件—>memcache
2.流程
安装—>启动(memcached)—>链接(port:11211)—->发送命令(get/set)
存储格式:hash键值对
key(键) value(值) length time(存活时间)
注: memcache重启,内存中数据也就消失.
使用内存较多 , CPU使用少 , 与Apache相反
使用:缓存sql语句 , 会话控制机制
3.安装
Windows 32x 64x
Linux
4.启动
Windows:
常用参数:
-p<num> 设置链接端口号(默认不设置为11211)
-U<num> UDP监听端口(默认11211,0时关闭)
-l<ip_address> 绑定地址(默认无论内外网或本地ip都允许,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d 独立进程运行
-d start启动memcached服务-d restart重启memcached服务-d stop|shutdown关闭正在运行的memcached服务-d install安装memcached服务-d uninstall卸载memcached服务
-u <username> 绑定使用指定用户运行进程
-m <num> 允许最大内存使用量 , 单位M (默认为64M)
-P <file> 将PID写入文件<file>,配合 -d 一起使用
-M 内存耗尽时返回错误 , 而不是删除项
-c 最大同时连接数 , 默认是1024
-f 块大小增长因子 , 默认是1.25
-n 最小分配空间 , key+value+flags默认是48
-h 显示帮助
1 | #/usr/local/memcached/bin/memcached -d -m 256 -p 11211 -u www -l 127.0.0.1 |
5.基础常用命令(客户端)
–stats : 当前所有memcached服务器运行的状态信息
–add : 添加一个数据到服务器
–set : 替换一个已经存在的数据 , 如果数据不存在 , 则和add命令相同
–get : 从服务器端提取指定的数据
–delete : 删除指定的单个数据 , 如果要清除所有的数据 , 请使用flush_all指令
客户端链接直接操作memcached
telnet localhost 11211添加数据
add 键名(key) 标志(flag) 存活时间(time) 长度(length)输出数据(长度与设定长度相同)eg:
add name x1 30 5 回车换行 tomey注 : 时间设为0永久存在
删除所有数据
flush_allstats得到memcached 的运行状态stats items显示各 item 的数目和最老 item 的年龄stats cachedump 2(item后数字) n(0-得到全部)展示某个slab中的前n个key列表
6.PHP操作
memcache 函数库(基于php开发)(面向对象和面向过程)
memcache_add() 或者 memcache_obj->add()
memcached 函数库(基于c++开发)(只有面向对象使用)
安装memcache 和memcached扩展: ….
1 | <?php |
其他常用函数:
自增: increment(key [, num]);
查看状态: getStats(type);
7.分布式配置
多服务器机器利用哈希算法共同分担压力 , 共同提供数据库服务
addServer(‘主机名’,端口号,[持久链接],[权重],[超时时间],[重试间隔])
$mem->addServer('192.168.14.112',11211)
8.安全防护
内网访问
memcached -d -m 1024 -u root -l 192.168.xx.xx(内网ip) -p 11211 -c 1024 start设置防火墙
1
2
3
4
5指定访问类型
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -p tcp -s 192.168.xx.xx --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.xx.xx --dport 11211 -j ACCEPT
9.实际使用memcache读取数据
多用户大批量访问下 , 重复读取数据 , 服务器压力太大 , 使用memcache在查询时 , 缓存一份 , 以后的查询可以从memcache缓存中获取 , 当数据有变化时在更新缓存内容 , 以减轻负载压力
1 | <?php |