声明:
此文章是观看韩顺平老师教程时,自己整理的笔记,与韩老师上课时所作的笔记类似。
1. memcahe提高数据访问速度。将数据放入内存中。
(1)直接查询:读取需要的数据
(2)使用真静态:从磁盘中读取数据。
(3)使用mencache:从内存中获取数据。
2. memcahe维护了一张内存表(hashtable)用键值对存放数据。
Key value
100 10
说明:memcahe的key一般是字串不能重复。否则就会被冲掉。
Value可以放入字符串、数值、布尔值、数组、对象、二进制
3. 安装使用memcached
(1)下载memcached软件 减压后。
(2)打开cmd cd到memcached.exe存放的地方
(3)然后安装指令:memcached.exe –d install
启动memcached
(1) 到计算机管理/服务和应用程序处启动
(2) 命令行启动:memcached.exe –d start
(3) 使用netstat –an 如果看到11211端口在监听,就说明启动成功。
说明:使用netstat –an还可以看到那些IP正在访问这个服务器。
使用netstat –anb可以查看哪个程序正在使用哪个端口。
(4) memcached常用命令:
memcached的基本命令(安装、卸载、启动、配置相关):
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
memcached的基本命令(当memcached启动后用于对memcached管理的数据和本身运行状态相关的命令):
Command | Description | Example |
get | Reads a value | get mykey |
set | Set a key unconditionally | set mykey 0 60 5 |
add | Add a new key | add newkey 0 60 5 |
replace | Overwrite existing key | replace key 0 60 5 |
append | Append data to existing key | append key 0 60 15 |
prepend | Prepend data to existing key | prepend key 0 60 15 |
incr | Increments numerical key value by given number | incr mykey 2 |
decr | Decrements numerical key value by given number | decr mykey 5 |
delete | Deletes an existing key | delete mykey |
flush_all | Invalidate specific items immediately | flush_all |
Invalidate all items in n seconds | flush_all 900 | |
stats | Prints general statistics | stats |
Prints memory statistics | stats slabs | |
Prints memory statistics | stats malloc | |
Print higher level allocation statistics | stats items | |
| stats detail | |
| stats sizes | |
Resets statistics | stats reset | |
version | Prints server version. | version |
verbosity | Increases log level | verbosity |
quit | Terminate telnet session | quit |
对查看的信息的关键字中英文对照表
pid | memcache服务器的进程ID |
uptime | 服务器已经运行的秒数 |
time | 服务器当前的unix时间戳 |
version | memcache版本 |
pointer_size | 当前操作系统的指针大小(32位系统一般是32bit) |
rusage_user | 进程的累计用户时间 |
rusage_system | 进程的累计系统时间 |
curr_items | 服务器当前存储的items数量 |
total_items | 从服务器启动以后存储的items总数量 |
bytes | 当前服务器存储items占用的字节数 |
curr_connections | 当前打开着的连接数 |
total_connections | 从服务器启动以后曾经打开过的连接数 |
connection_structures | 服务器分配的连接构造数 |
cmd_get | get命令(获取)总请求次数 |
cmd_set | set命令(保存)总请求次数 |
get_hits | 总命中次数 |
get_misses | 总未命中次数 |
evictions | 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) |
bytes_read | 总读取字节数(请求字节数) |
bytes_written | 总发送字节数(结果字节数) |
limit_maxbytes | 分配给memcache的内存大小(字节) |
threads | 当前线程数 |
4.使用memcached如何进行增删改查。
(1)通过PHP程序操作用的最多。
(1)memcache扩展操作
(2)memcached扩展操作
(3)直接使用socket编程来操作
(2)telnet工具操作
Telnet操作:
(1)登录到telnet链接到memcached服务。
telnet 127.0.0.1(要链接服务器的IP地址) 11211
(2)增加
基本语法:add key1(键名) 0(占位符) 30(保存时间) 5(值的长度) 回车后 输入值
(3)获取
基本语法:get key1(键值)
(4)修改
基本语法:set key1 0 存放时间 值大小(key1不存在增加)
或者使用:replace key1 0 存放时间 值大小(key1不存在失败)
(5)删除
delete key1
使用PHP程序操作memcached服务(curd):
(1)把对应版本的php_memcache.dll文件下载保存到php的ext下。
(2)修改php.ini文件:extension=php_memcache.dll(上面的dll文件名。)
(3)重启apache
使用直接使用socket编程来操作:
(1)别人写好的函数源码,直接操作。
5.memcached机制深入了解。
(1)使用memcached是基于CS结构。Memcached作为服务器。
(2)基于libevent的事件处理并发机制。
(3)数据放入内存中。
(4)基于客户端分布式。
说明:
(1)生命周期:若把时间设为0,则表示永不过期。
(2)重启memcached服务,那么里面的数据都会销毁。
(3)如何把session数据放入memcached中。
(1)在php.ini中配置 在[Session]中修改:
session.save_handler = memcache(设置以何种方式存放)
session.save_path ="tcp://127.0.0.1:11211"(设置session存放路径)
说明:这样就可以将session保存到memcached中,我们不用管它如何保存,我们依然用$_SESSION[]取出该值。
(2)或者在页面中使用ini_set()改变当前页面的php.ini中配置。
ini_set(“session.save_handler”,” memcache”);
ini_set(“session.save_path”,” tcp://127.0.0.1:11211”);
(4)memcahe数据是无状态的,不和任何用户绑定。
(5)memcache安全性。将memcached放到内网。然后设置防火墙。
(6)什么样的数据适合放入memcached中?
(1)变化频繁,具有不稳定性的数据,不需要实时入库, (比如用户在线状态、在线人数..)
(2)门户网站的新闻等,觉得页面静态化仍不能满足要求,可以放入
(7)Redis(Key/value型数据库)技术与memcache类似,将数据保存在内存中,并定时向硬盘中同步