php项目下的缓存控制
客户端向服务端请求php页面的过程中,服务端是可控的。
可控的才可优化,优化的重点,即是缓存优化。
试想?数据存储在DB中,访问DB就要读取硬盘数据,但如果需要数据的速度>>硬盘最大的读写速度,
就会产生IO瓶颈。
那么,使用内存缓存数据结果集,让用户首先读取缓存,未果则从DB中读取。
如此,就能提高数据响应的速度,也保护了数据源。
php虽开启shmop扩展可管理内存,但所能管理的内存大小是有限的。
才有大为流行的NOSQL:
memcache 高性能的分布式内存缓存服务器
(分布式配置:1.有多个memcache服务端;2.开启php相应扩展,通过addServer()即可实现。底层通过对key的hash取余来标识服务器,因此代码实现上,不要改变存取前的服务器的顺序,否则可能出现获取不到值的情况)
redis 高性能的内存缓存服务器
(主从配置:master主服务器执行修改操作,多个slave(只读)连接master,在首次全量复制后,增量更新数据到自身。如果slave断了,重新连接master时,会自动全量复制)
MEMCACHE
- 以key-value的方式存储
- key可达250B,value可达1M
-
value是以字符串的形式保存的:
php标量数据类型,保存时会隐式转换为字符串; php其他数据类型, 保存时自动序列化,取出时自动反序列化. //该过程是php的memcache扩展开启后,底层实现的
- item过期时间是时间戳时,无限制;以s为单位时,不能超过30天的秒数
- 不能持久化,要的就是速度
注意事项
∧
memcache
与redis
,最大区别在于持久化
(即数据能否保存在硬盘上).redis
因其多样的数据结构,而满足更多的业务需求,但memcache
的读取速度更快些.
∨
REDIS
-
支持丰富的数据结构(在此先不展开该方面的讨论)
常用项:string,hash,list,set,sortedset //redis本身就实现了双向列表,list还可模拟出队列,堆栈的数据结构
- value值可达512M
-
可持久化:
- 快照持久化(SNAPSHOTTING)
一定时间内一定数量的key值的改变,就会全量复制redis内存管理的数据到硬盘.
- 精细持久化(AOF)
用来保存每次执行的命令.开启后,每秒保存一次。见下图的英文注释
- 快照持久化(SNAPSHOTTING)
注意事项
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。