什么是数据库缓存

MySQL等一些常见的关系型数据库的数据都存储在磁盘当中,在高并发场景下,业务应用对MySQL产生的增、删、改、查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生。

  • 极大地解决数据库服务器压力
  • 提高应用数据的响应速度

常见缓存形式:内存缓存,文件缓存

为什么使用缓存

缓存数据是为了让客户端很少甚至不访问数据库服务器进行数据查询,高并发下,能最大程度的降低对数据库服务器的访问压力

使用MySQL查询缓存

用户请求->连接数据库服务器并查询数据->将数据缓存(HTML,内存,JSON,序列化数据)->现实给客户端
用户再次请求->数据查询->直接从缓存里获取数据->显示给客户端

缓存是需要考虑的内容

  • 缓存方式选择
  • 缓存场景选择
  • 缓存数据的实时性
  • 缓存数据的稳定性

MySQL查询缓存

开启:query_cache_type = 0,1,2

  • 0 不使用查询缓存
  • 1 可以不适用
  • 2 按需使用

使用Memcache缓存

-工作原理:Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存,然后从内存中读取,从而大大提高读取速度

  • 工作流程:先检查客户端请求的数据是否在memcache里,如有,则直接把请求数据返回,不再对数据库进行任何操作,如果请求数据不再memcach里,就去数据库里查询,同时把数据缓存到memcache
  • 方法

    • 获取:get(key)
    • 设置:set(key,val,expire)
    • 删除:delete(key)

使用Redis缓存

memcache的区别

  • 性能区别不大
  • Redis在2.0版本后增加课自己的VM特性,突破物理内存的限制,Memcache可以修改最大可用内存,采用LRU算法
  • Redis以来客户端实现分布式读写
  • Memcache本身没有数据冗余机制
  • Memcache本身不支持数据持久化,同城做缓存,提升性能
  • Redis支持多能数据类型
  • Memcache用于在动态系统中减少数据库负载,提高性能

缓存其他数据

Session:session_setsave_handler