memcache

内存缓存之memcache

1、memcache介绍

memory cache  内存 缓存

Memcached 是国外 社区 网站 LiveJournal  的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。

2、安装软件

windows下安装

2.1、直接前端运行

①把软件及其依赖文件放置到一个运行目录

这种方式使用,当cmd窗口关闭,就会把软件同时关闭,不方便操作使用

2.2、后台服务运行

通过建立windows服务的方式,解决软件后台运行的操作

服务管理操作属于高级权限,需要使超级管理员cmd进行操作

①打开管理员cmd

②查看相关参数帮助,及其安装服务

-p  监听的端口号

-l 监听的地址 确认哪些ip地址可以连接

-d start 启动memcahed服务

-d install 安装memcached服务

-d uninstall 卸载memcache服务

查看服务并启动memcached

Tip:如果不使用可以选择删除服务

注意服务要是先关闭的

③卸载服务

 

windows下安装是为了之后能够在windows开发使用

linux下安装

①把软件包上传到linux服务器

通过sftp工具上传即可。

确定软件上传成功

②安装libevent

memcached依赖libevent

先安装libevent

shell > tar zxvf libevent-2.1.8-stable.tar.gz

shell > cd libevent-2.1.8-stable

shell > ./configure --prefix=/usr/local/libevent && make && make install

查看一下libevent是否安装成功

③安装memcached

shell > tar zxvf memcached-1.5.1.tar.gz

shell > cd memcached-1.5.1

shell >./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent

shell > make && make install

查看安装目录,是否可以启动

shell > /usr/local/memcached/bin/memcached -u root -d

3、命令行客户端操作

telnet 之前的远程连接协议 memcache可以通过此协议进行连接操作

连接一个服务:ip地址+port端口号

①windows的telnet客户端

cmd > telnet 192.168.127.112 11211

以上问题,可能是防火墙的问题,临时关闭防火墙测试

②简单命令操作使用

set  key名称  是否压缩  是否过期   长度

现在一般不进行压缩了,压缩和解压缩需要耗费一定时间

get  key名称

delete key 删除key

flush_all 清空所有key

只要是支持telnet协议的工具都可以通过telnet协议连接memcached

三、php操作memcache

1、开启拓展

获取拓展文件,并安装开启拓展,开启拓展之后php就拥有了一个可以操作memcached的类。

之后需要使用拓展文件,都到以下网址找:

http://pecl.php.net/

memcache的两个php拓展

memcache

memcached

①根据php的实际参数选择拓展

php版本号  软件位数  运行方式(ts nts)   运行平台(vc6 vc9 vc11 vc14 vc15)

②把对应的拓展文件放入php的ext拓展目录

③开启php.ini配置,重启服务,查看phpinfo

可以自行添加一句

使用方式可以参考php手册

注意在使用php操作memcache:

①php的拓展是安装好的

②memcache的服务器端是启动

2、记录格式

key=>value的格式

value的值大小默认1M

key的要求,简洁明了,能够直观描述出value存储的是什么。

3、有效期

memcache有两种设置有效期的方式

①时间差的方式  多少s之后过期   超过30天的时间差将被认为是一个时间戳

$mem->set('classname','ithm5',0,时间差);

时间戳的方式  在哪个时间戳点过期

设置超过30天的时间点,需要通过时间戳的方式设置

$mem->set('classname','ithm5',0,时间差(time()+时间差));

key过期之后,返回的值为bool(false)

4、存储各种数据类型

数据保存的最低标准要求,要保持数据的完整性和一致性。

标量类型  string(字符串) int(整型) float(浮点型) bool(布尔型)

②复合类型  array(数组)  object(对象)

序列化操作,是为了方便存储复合型数据

③特殊类型  resoure(资源)  NULL(空)

以上所有操作,发现只有资源类型不能够通过memcache操作使用,其他都可以正常使用

5、其他相关操作方法

$mem->delete(键 [, int $timeout ]);      

删除指定键的信息,(指定$timeout,则$timeout秒后删除)

$mem->flush();

删除全部键

$mem->add(key, value, 是否压缩, 有效期)

仅添加:Key存在则失败,KEY不存在添加

$mem->replace(Key, Value, 是否压缩, 有效期)

仅替换(修改):Key存在则修改,KEY不存在失败。

以下可以用来做计算器操作

$mem -> decrement(key,num=1)

按照num的幅度,对key的值进行减少操作

$mem -> increment(key,num=1)

按照num的幅度,对key的值进行增加操作

6、php监控操作memcache的客户端

以上两个软件,都需要在安装好php的memcache拓展的前提下才可以使用

1>memcache.php

2>memadmin

四、memcache的应用拓展

1、失效机制(了解)

懒惰机制  key过期之后不会立即删除,等到获取时(get)再去删除信息

php gc垃圾回收机制 懒惰模式的

②LRU机制  Least Recently USE  最近最少使用  get的使用

默认memcache存储空间为64M 超过此空间,就会删除不太常用key,存储新的key

-M  禁用LRU机制  如果写满就会返回一个错误

2、session入库共享

session 会话技术  用来存储用户的状态信息

默认存储在服务器的目录里的文件中。若果文件夹下的文件多的话,文件读写效率会降低。

①登录标识

②验证码的存储

③短信验证码

问:有做过session入库操作么?session为什么要进行入库?

答:有简单使用过。session入库的好处:

①session文件比较碎小,入库会提高session的读写效率

②为了能够共享session数据  跨站点(单点)登录   

一般session共享操作会存储到mysql、memcacheredis

原文地址:https://www.cnblogs.com/songyanan/p/8264115.html