全面解读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

转载于:https://www.cnblogs.com/chrdai/p/11293680.html

PHP后端开发中的缓存策略选择 本文章的主要目的是为PHP后端开发者提供全面且深入的缓存策略选择指导。我们将涵盖常见的缓存类型,包括内存缓存、文件缓存数据库缓存等,并分析它们在不同场景下的优缺点。范围包括缓存的基本原理、核心算法、实际应用案例以及工具资源推荐等方面,旨在帮助开发者在实际项目中能够根据具体需求选择最适合的缓存策略。本文将按照以下结构展开:首先介绍缓存的核心概念和不同类型缓存之间的联系,接着详细阐述各种缓存策略的核心算法原理和具体操作步骤,包括使用Python代码示例进行讲解。 阅读详情

相关推荐

PHP常用的缓存技术

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到。这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。

xinyuerr的博客 134

PHP常用缓存技术介绍

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到。这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。.

xiaoweids的博客 956

如何在PHP中进行数据缓存

PHP中进行数据缓存是一种常见的优化技术,可以提高应用程序的性能和响应速度。数据缓存允许您将经常使用的数据存储在内存或其他快速存储介质中,以便快速访问,而无需每次都重新计算或从数据库中检索。Memcached和Redis是流行的分布式内存缓存系统,它们提供了存储和检索数据的功能,并具有高性能和可扩展性。缓存可以提高性能,但也需要考虑缓存的过期时间、缓存刷新策略和数据的一致性,以确保应用程序的正确运行。根据您的应用程序需求,您可以实现自定义缓存策略,例如基于时间戳或数据变化的缓存刷新策略。

周祥平程序专栏 779

PHP 实现多级缓存系统:自动切换内存缓存数据库缓存

PHP 实现多级缓存系统:自动切换内存缓存数据库缓存

763

php缓存源码,PHP缓存实例 源代码

cache.php 代码如下:PHP代码01.02./*03.用户需要事先定义的常量:04._CachePath_ 模板缓存路径05._CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制06._ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存07.*/08.09.class cache {10.11.var $cachef...

weixin_42659791的博客 239

php vr 书籍,温习《PHP 核心技术与最佳实践》这本书

再次看这本书,顺手提炼了一下大致目录,以便后续看见目录就知道大概讲的些什么内容PHP 核心技术与最佳实践1、面向对象思想的核心概念1.1 面向对象的『形』与『本』1.2 魔术方法的应用1.2.1 __set和 __get 方法PHP 的重载和Java 等语言的重载不同。 Java 里,重载指一个类中可以定义参数列表不同但名字相同的多个方法。比如,Java 也有构造函数,只要保证方法签名不一样就行;...

weixin_30418751的博客 215

UCHome 中的common.php代码分析

001.<?php 003. [UCenter Home] (C) 2007-2008 Comsenz Inc.004. $Id: common.php 13217 2009-9-25 ymaozi005.*/006.007.@define('IN_UCHOME', TRUE); //定义IN_UCHOME008.define('D_BUG', '0'); //定义错误等级009.010....

weixin_34352005的博客 69

THINKPHP config.php的配置问题

ThinkPHP之config.php详细配置文件介绍 THINKPHP  config.php的配置问题 return array( //--------------------------------------------------------------------------------------- //模版配置 //----------------

永不停歇 3717

PHP核心技术与最佳实践

PHP核心技术与最佳实践》基本信息作者: 列旭松 陈文 出版社:机械工业出版社ISBN:9787111401926上架时间:2012-11-8出版日期:2013 年1月开本:16开页码:1版次:1-1所属分类: 计算机 &gt...

csdn1232的博客 335

PHP后端十年:从0到资深开发者的10堂必修课【第6篇】

本文全面介绍PHP应用性能优化的关键策略,从字节码缓存数据库优化到缓存策略和代码层面优化。重点内容包括:OpCache原理与配置可提升600%+请求处理速度;数据库优化需关注慢查询分析、索引设计和Swoole连接池;缓存策略推荐Redis/Memcached和页面静态化;代码优化建议减少I/O、使用生成器处理大数据和PHP8.1预加载功能。这些方法共同构建PHP应用的高性能解决方案。

程序员【夜珀】的博客 195

Php 日志 分析 源码,Discuz!源代码分析系列(1)-./include/common.inc.php

本楼文章转自www.discuz.net 作者:郭鑫第一个文件当然是分析./include/common.inc.php这个文件,这个是Discuz的核心中的核心,基本上每次操作都include到了这个文件,下面就分七段来分析这个文件:Section One:复制内容到剪贴板代码://定义PHP一些环境error_reporting(0);set_magic_quotes_runtime(0);/...

weixin_42306688的博客 427

PHP开源系统学习之fluxbb_1

最近一直忙于做项目,虽说做了点新东西。感觉自己进步不是很大,总体水平还是跟半年前差不多,想到的东西跟以前差不多,写出来的东西也跟以前差不多。只是现在做的东西多些,比以前敢做了。 近期准备利用点时间,读读一些开源系统,之前一直想学习下discuz,无奈多次放弃。还是对老外的感兴趣,虽然自己英语差的不行,之前也做过wordpress的二次开发,这次准备对fluxbb下手。啥也不说了,直接上场。 整...

weixin_30471065的博客 221

【2022/1/2】thinkphp源码无差别阅读(十)

thinkphp源码无差别阅读(十) framework阅读 console/command/optimize/Route.php 配置:configure 执行:execute 生成路由缓存:buildRouteCache console/command/optimize/Schema.php 配置:configure 执行:execute 未知:buildModelSchema 未知:buildDataBaseSchema console/command/input/Argument.php

470

从瀑布到敏捷:企业如何通过DevOps平台实现研运一体化转型

本文探讨了企业如何借助DevOps平台,实现从传统瀑布模型到敏捷开发,再到研运一体化的转型。文章深入分析了转型的核心逻辑,并系统性地阐述了如何通过构建一体化平台、落地自动化流水线以及建立数据驱动的度量体系,来打破部门墙、提升软件交付效率与质量,最终构建持续响应市场变化的组织能力。

o4p5q6r7s的博客 90

源代码分析讲解

国内著名CMS: PHPCMS 整站源代码分析讲解 首先我对 PHPCMS 的 头程序文件开始讲解 : include/common.inc.php 这个文件是程序启动的核心文件. [php] <?php /** 代码讲解分析: 逆雪寒. 2007 - 12 - 20 */ $mtime = explode(' ', microtime()); $phpcms_starttime =

经验在于积累而不在于年限---dreamboycx 902

25 本数据工程书籍怎么读:从入门到湖仓架构的完整路线

数据工程书籍不在多,在读的顺序和场景。本文基于 data-engineer-handbook 开源项目——一个汇总数据工程书籍、实战项目、社区与面试资料的资源合集——里的书单,把 25+ 本书按你实际会遇到的问题拆开:转岗前补什么、搭数仓读什么、Spark 和 Flink 怎么选、面试前补哪些短板。不用读完所有书,对号入座即可,完整清单见 [books.md](https://link.gitco

gitblog_00909的博客 350

浅谈Facebook的服务器架构

大体层次划分  Facebook的架构可以从不同角度来换分层次。  一种是:  一边是PHP整的经典的LAMP stack;另外一边是非PHP整的各种service。    Facebook的页面从刚创立的时候扎克伯格写的,到现在,都用PHP开发。后端有用各种语言开发的servi

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1258
上一篇: 非正常关闭myeclicps后,出现错误Errors occurred during the build.的解决方法
下一篇: 磁盘管理RAID
weixin_30471065
博客等级 码龄11年 127粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值