4

php项目下的缓存控制

客户端向服务端请求php页面的过程中,服务端是可控的。
可控的才可优化,优化的重点,即是缓存优化。

试想?数据存储在DB中,访问DB就要读取硬盘数据,但如果需要数据的速度>>硬盘最大的读写速度,
就会产生IO瓶颈。

那么,使用内存缓存数据结果集,让用户首先读取缓存,未果则从DB中读取。
如此,就能提高数据响应的速度,也保护了数据源。

php虽开启shmop扩展可管理内存,但所能管理的内存大小是有限的。

才有大为流行的NOSQL:
memcache  高性能的分布式内存缓存服务器   
(分布式配置:1.有多个memcache服务端;2.开启php相应扩展,通过addServer()即可实现。底层通过对key的hash取余来标识服务器,因此代码实现上,不要改变存取前的服务器的顺序,否则可能出现获取不到值的情况)
redis     高性能的内存缓存服务器          
(主从配置:master主服务器执行修改操作,多个slave(只读)连接master,在首次全量复制后,增量更新数据到自身。如果slave断了,重新连接master时,会自动全量复制)

MEMCACHE

  1. 以key-value的方式存储
  2. key可达250B,value可达1M
  3. value是以字符串的形式保存的:

    php标量数据类型,保存时会隐式转换为字符串;
    php其他数据类型, 保存时自动序列化,取出时自动反序列化. //该过程是php的memcache扩展开启后,底层实现的
    
  4. item过期时间是时间戳时,无限制;以s为单位时,不能超过30天的秒数
  5. 不能持久化,要的就是速度

注意事项

  • clipboard.png
  • clipboard.png
  • clipboard.png

memcacheredis,最大区别在于持久化(即数据能否保存在硬盘上).
redis因其多样的数据结构,而满足更多的业务需求,但memcache的读取速度更快些.

REDIS

  1. 支持丰富的数据结构(在此先不展开该方面的讨论)

    常用项:string,hash,list,set,sortedset                //redis本身就实现了双向列表,list还可模拟出队列,堆栈的数据结构
  2. value值可达512M
  3. 可持久化:

    • 快照持久化(SNAPSHOTTING)
      一定时间内一定数量的key值的改变,就会全量复制redis内存管理的数据到硬盘.

    clipboard.png

    • 精细持久化(AOF)
      用来保存每次执行的命令.开启后,每秒保存一次。见下图的英文注释

    clipboard.png

    clipboard.png

注意事项

  • clipboard.png
  • clipboard.png

Lin945
211 声望6 粉丝

技术沉淀还是很有必要的,尽量多写写。