美文网首页
分布式缓存(一)

分布式缓存(一)

作者: 东南枝下 | 来源:发表于2020-07-07 06:39 被阅读0次

    分布式缓存(一)

    数据库缓存

    Mysql 查询缓存(Query cache)

    当打开了Query Cache功能,MySQL在接收到一条select语句的请求后,如果该语句满足Query Cache的要求,MySQL会直接根据预先设定好的HASH算法将接收到的select语句以字符串方式进行hash,然后到Query Cache中直接查找是否已经缓存,如果已经有结果在缓存中,该select请求就会直接将数据返回。

    检查QC设置是否合理

    SHOW VARIABLES LIKE '%query_cache%';
    SHOW STATUS LIKE '%Qcache%';
    

    VARIABLES参数

    query_cache_type:

    使用QC的场景;

    值为0(OFF)不使用QC;

    值为1(ON)除显示要求不使用的SELECT(SQL_NO_CACHE)外,默认都使用QC

    -- 显示要求不使用QC
    SELECT SQL_NO_CACHE * FROM some_table
    

    值为2(DEMAND)与上一个相反,除显示要求使用的SELECT(SQL_CACHE)外,默认都不使用QC

    -- 显示要求使用QC
    SELECT SQL_CACHE * FROM some_table
    

    query_cache_size:

    单位(B),缓存ResultSet的内存大小,设置为1024的倍数,参考值32M

    query_cache_limit:允许Cache的单条Query结果集的最大容量,默认是1MB,超过此参数设置的Query结果集将不会被Cache

    query_cache_min_res_unit:设置Query Cache中每次分配内存的最小空间大小,也就是每个Query的Cache最小占用的内存空间大小

    query_cache_wlock_invalidate:如果某个数据表被其他的连接锁住,是否仍然从查询缓存中返回结果

    STATUS参数

    Qcache hits:

    Query Cache命中次数

    如果该值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓存

    Qcache inserts:

    表示多少次未命中然后插入

    Qcache lowmem prunes:

    当Query Cache内存容量不够,需要从中删除老的Query Cache以给新的Cache对象使用的次数

    如果该值特别大,则代表经常出现缓冲不够

    Qcache free blocks:

    目前还处于空闲状态的Query Cache中内存Block数目

    该值非常大,则表明缓存区中的碎片很多,可能需要寻找合适的机会进行整理

    缺点:如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。

    如果你的数据表更新频繁的话,那么Query Cache将会成为系统的负担

    优点:对数据库的更新很少,那么QC将会作用显著

    基于以上优缺点,可以通过参数计算QC命中率,来判断是否需要进行调整

    QC命中率=Qcache_hits / ( Qcache_hits + Qcache_inserts )

    注:Mysql8.0 中已经删除 query cache(小声BB:说明官方也觉得这个东西不行,还是用平台级或应用级缓存吧)

    https://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/

    The query cache has been disabled-by-default since MySQL 5.6 (2013) as it is known to not scale with high-throughput workloads on multi-core machines.

    平台级缓存

    带有缓存特性的应用框架,或者可用于缓存功能的专用库

    Java中,如Ehcache,Cacheonix, Voldemort, JBoss Cache, OSCache等缓存框架。

    应用级缓存

    需要开发者通过代码来实现缓存机制

    Redis、MongoDB、以及Memcached等

    每分钟或一段时间后统一生成某类页面存储在缓存中,或者可以在热数据变化时更新缓存

    [TOC]

    参考:

    相关文章

      网友评论

          本文标题:分布式缓存(一)

          本文链接:https://www.haomeiwen.com/subject/nbpoqktx.html