zoukankan      html  css  js  c++  java
  • 全面解读PHP-数据库缓存

    一、什么是数据库缓存?

    1、定义

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

    2、数据库缓存有什么作用?

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

    3、常见的缓存形式

    • 内存缓存。
    • 文件缓存。

    4、使用缓存后用户请求流程

    用户请求--> 数据查询--->连接数据库服务器并查询数据-->将数据缓存起来(HTML、 内存、JSON、序列号数据)-->显示给客户端。(有一个对数据处理的开销)

    当用户再次请求或者新用户访问-->数据查询-->直接从缓存中获取数据-->显示给客户端。

    5、缓存需要考虑的内容

    • 缓存方式的选择。
    • 缓存场景的选择。
    • 缓存数据的实时性。(真是数据发送改变,缓存是否需要立马改变?一般情况下,我们可以给缓存设置一个失效时间,比如过5分钟再去更新一遍缓存就可以了)
    • 缓存数据的稳定性。

    二、使用mysql查询缓存

    1、作用

    启用mysql查询缓存可以极大的降低CPU使用率。

    2、如何使用

    query_cache_type //查询缓存类型
    //0 : 不使用查询缓存。
    //1 : 始终使用查询缓存。
    //2 : 按需使用查询缓存。
    
    query_cache_size //为查询缓存预留的内存,默认值为0,即无法使用查询缓存。
    //临时设置方法,或者在my.cnf中永久设置
    SET GLOBAL query_cache_size = 1024;

    a、当 query_cache_type = 1 时,亦可关闭查询缓存

    SELECT SQL_NO_CACHE * FROM table_name WHRE condition;

    b、当 query_cahce_type = 2 时,可按需使用查询缓存。

    SELECT SQL_CACHE * FROM table_name WHRE condition; 

    查询缓存可看作是SQL文本和查询结果的映射。

    第二次查询的SQL和第一次查询的SQL完全相同,则会使用缓存。只要第二次的sql稍微跟第一次的sql不太一样,比如多了一个空格,多了一个字段,都不会使用缓存。

    c、查缓存命中次数

    SHOW STATUS LIKE 'Qcache_hits';  //查看缓存命中次数

    d、清理缓存

    FLUSH QUERY CACHE; //清理查询缓存中的内存碎片
    RESET QUERY CACHE;  //从查询缓存中移除所有查询
    FLUSH TABLES; //关闭所有打开的表,同时该操作将会清空查询缓存中的内容

    三、使用memecache缓存

    对于大型的站点,如果没有中间缓存层,当流量打入数据库存时,即便有之前的几层为我们挡住一部分流量,但是在大并发的情况下,还是会有大批量请求涌入数据库层,这样对于数据库服务器的压力冲击非常大,响应速度也会下降,因此添加中间缓存层很有必要。

    1、memcache的工作原理

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

    2、工作流程

    先检查客户端的请求数据是否在memcached中,如果有,直接把请求数据返回,不在对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到mencached中。

    3、方法

    get(key);  //获取数据
    set(key, value, exipre); //设置数据
    delete(key); //删除数据

    注:memcache拓展和 memcached 拓展是两个不同的 Memcache拓展,memcached拓展方法更丰富一些。

    四、使用redis缓存

     1、Redis 和 memcache 的区别

    • 性能差距不大
    • Redis在2.0版本后增加了自己的VM特性,突破物理内存限制,Memcache可以修改最大可用内存,采用LRU算法。
    • Redis依赖客户端来实现分布式读写。‘
    • Memcache 本身没有数据冗余机制。
    • Redis支持(快照、AOF),依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响。
    • Memcache不支持持久化,通常做缓存,提升性能。
    • Memcache在并发场景下,用case来保持一致性,Redis事务支持比较弱,只能保证事务中的每个操作连续执行。
    • Redis支持多种数据类型。
    • Redis用于数据量较小的高性能操作和运算上。
    • Memcache用于在动态系统中减少数据库负载,提升性能,适合做缓存,提高性能。

    本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/p/11293680.html

  • 相关阅读:
    HTML5离线缓存问题
    一款我常用到的手机app
    修补: Vs调试时火狐自动增加www.和 .com
    linq to xml 控制投影的类型以解决无法返回匿名类型
    创建数据绑定模板控件 Asp.net
    发布一个IEJs调试开关,方便Vs调试
    TransmitFile下载文件(部分转载)
    如何在网页中添加地图
    MVC中Jqgrid的用法
    CSS中如何将li横向排列
  • 原文地址:https://www.cnblogs.com/chrdai/p/11293680.html
Copyright © 2011-2022 走看看