内存缓存数据库 nosql之memcache

一 大型网站优化

nosql not only sql 泛指非关系数据库 对应对比关系型数据库
没有sql语句使用 不需要设计表结构 没有连表操作
key=>value 键值对方式存储 set[设置]或者get[获取]
memcached redis 内存缓存数据库 存储数据在内存中 做优化使用
mongodb 有一部分数据在内存中,其他数据还是存在硬盘的文件中

1、大型网站

①网民角度 页面多的 功能多的 用户多的
②技术开发角度 数量多 代码量多
③运营角度 营业额 流量 并发量
seo(搜索引擎优化)的角度
搜索引擎:百度 360 搜狗 必应 神马(UC浏览器)
可以借助第三方工具,进行简单查看
pv值 访问页面数量
ip值 访问的ip数
uv值 访客数量
BAT baidu alibaba Tencent
在这里插入图片描述
ip值是千万级别 PV值是亿级别

2、网站访问流程

浏览器=>服务器端(web服务器软件 apache)=>php=>数据库(mysql)
访问流程越多,可能出现问题的几率越大,访问速度也可能会越慢
当网站业务发展到一定程度,之前的一些架构,可能就不能满足正常使用。
用户直观体验是打开网页速度特别慢。 平均值7s 会关闭网页

3、如何优化

根据网页的访问流程进行优化
优化点:①缩短访问流程 ②加快某个访问流程的速度
浏览器=>服务器端(web服务器软件 apache)=>php=>数据库(mysql)
①提供web服务器的并发量 并发就是指同时访问的人数 nginx
②页面静态化 可以把不太经常发生变动的动态页面制作称为静态页面 缩短访问流程 提高访问效率
③内存缓存优化 把需要经常读写的数据,放入内存操作
缓存,把需要经过一系列操作才能够得到的结果,单独存储起来。之后使用不需要再经过这些操作步骤,直接返回这个存储的结果。这个结果被习惯称为:缓存
④优化数据库本身

二、内存缓存之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手册
手册中搜索memcache 点击范例
注意在使用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,则$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、memcache、redis
在这里插入图片描述
在这里插入图片描述
php修改配置文件,一般没有权限修改。
使用临时设置php配置的方式在这里插入图片描述
在这里插入图片描述
如果使用框架文件,可以选择把session入库操作,在公共部分编写实现。
index.php文件里的代码都会被执行。

3、分布式memcache

分布式memcache,就是指同时连接使用多个memcache。单台的memcache的并发量和稳定性都没有多台好。为了提高整个memcache的可用性和稳定性。可以同时使用多个memcache。
使用多个memcache的方式:
①多台服务器启动多个memcache实列 性能更加好
②一台服务器通过监听不同的端口,启动多个memcache实列
linux下一台memcache。windows下一台在这里插入图片描述
在这里插入图片描述
4、memcache实例
memcache为了减轻mysql的读到的压力。把mysql的经常读取的数据,缓存到memcache中(内存),提高读的速度,提高页面的返回速度,从而给用户更好的使用体验。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原文地址:https://www.cnblogs.com/liuqun/p/12655223.html