Memcache
-
就是一个数据库,将数据保存在内存中
-
常用于缓存服务器,保存操作频繁,丢失无所谓的数据
启动选项
-
-d 是一个守护进程
-
-m 内存分配
-
-u 用户
-
-l 监听地址
-
-p 端口
-
-c 最大并发连接数
-
-p pid文件路径
作为后台启动 memcached -p 11211 -m 64m -d -u root
! telnet推出的时候 quit ,^c完全没有用
操作Me
-
增/改 set set key 是否压缩(0 - 否 ,1 - 是) 缓存时间 / s 数据长度 ,回车后输入 val
-
获取值 get key
-
添加键数据 add key 是否压缩 缓存时间 数据长度 (只能添加不能修改)
-
修改键数据 replace key 是否压缩 缓存时间 数据长度
-
删除键 delete key
-
删除所有键 flush_all
-
递增 incr 和 递减 decr key number
-
查看Me允许状态 stats , 以下为状态表
pid: memcache服务器进程ID
uptime:服务器已运行秒数
time:服务器当前Unix时间戳
version:memcache版本
pointer_size:操作系统指针大小
rusage_user:进程累计用户时间
rusage_system:进程累计系统时间
curr_connections:当前连接数量
total_connections:Memcached运行以来连接总数
connection_structures:Memcached分配的连接结构数量
cmd_get:get命令请求次数
cmd_set:set命令请求次数
cmd_flush:flush命令请求次数
get_hits:get命令命中次数
get_misses:get命令未命中次数
delete_misses:delete命令未命中次数
delete_hits:delete命令命中次数
incr_misses:incr命令未命中次数
incr_hits:incr命令命中次数
decr_misses:decr命令未命中次数
decr_hits:decr命令命中次数
cas_misses:cas命令未命中次数
cas_hits:cas命令命中次数
cas_badval:使用擦拭次数
auth_cmds:认证命令处理的次数
auth_errors:认证失败数目
bytes_read:读取总字节数
bytes_written:发送总字节数
limit_maxbytes:分配的内存总大小(字节)
accepting_conns:服务器是否达到过最大连接(0/1)
listen_disabled_num:失效的监听数
threads:当前线程数
conn_yields:连接操作主动放弃数目
bytes:当前存储占用的字节数
curr_items:当前存储的数据总数
total_items:启动以来存储的数据总数**(包括过期的)**
evictions:LRU释放的对象数目
reclaimed:已过期的数据条目来存储新数据的数目
Php集合Me
php有两个Me的客户端分别是 Me(老客户端) 和 Med (新客户端)
还有就是Me这个扩展好像是没有Php7以上的版本 = =,具体我也没有去看。
关于Med 和 Me 的Api还是有一点差别的。
Me相关特性
-
惰性过期 (Lazy Expiration) 只有在get时才会主动检测是否过期
-
最近最少使用 (Least Recently Used) 内存已满清空下,将最少使用的数据删除
-
单个key_name 最大 250字节
-
一个item 最大可以存1m 的数据
Session 入 Me
在多台服务器的(如:集群)这种情况下,会做到session无法共享,这样就无法去认证用户。
于是就有了session入库,或把session存入Me之类的做法。
当然了,在如今,关于认证不仅仅可以用session去做,还可以用 JWT 之类的技术去实现。
这里主要实现一下 Session 入 Me
有一下几种方式:
-
先去修改 php.ini 配置 session.save_handler = files >> memcache 修改保存工具 session.save_path = "tcp://127.0.0.1:11211" 同时要修改保存地址,因为已经不是文件了 (这种最简单的说)
-
临时修改,同上以用,只是在文件的顶端加入 ini_set(set_name,set_config)
-
自定义会话存储函数 从5.4开始可以去实现SessionHandlerInterface这个工具接口。
1 class MeSessionHandler implements \SessionHandlerInterface 2 { 3 priavte $me; 4 5 public static function start() 6 { 7 # 更改session存储方式 8 session_set_have_handler(new self, true); 9 session_start();_ 10 } 11 12 public function open($savePath, $sessionName) 13 { 14 $this->me = new Memcache(); 15 $this->me->addServer('localhost', 11211); 16 return true; 17 } 18 19 public function close() 20 { 21 return true; 22 } 23 24 public function read($sessionId) 25 { 26 return $this->me->get($sessionId) ? : ''; 27 } 28 29 public function write($sessionId, $data) 30 { 31 return $this->me->set($sessionId, $data); 32 } 33 34 public function destroy($sessionId) 35 { 36 return true; 37 } 38 39 public function gc($lifeTime) 40 { 41 return true; 42 } 43 44 }