高并发-数据库缓存

1、什么是数据库缓存

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

数据库缓存解决了什么问题:
1、极大解决了数据库服务器的压力
2、提高应用数据的响应数据

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

2、为什么要使用缓存

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

场景1:
用户请求–》数据查询–》链接数据库服务器并查询数据–》将数据缓存起来(html、内存、json、序列化数据)–》显示给客户端

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

注意点:
缓存方式的选择、缓存场景的选择、缓存数据的实时性、缓存数据的稳定性

3、MySQL的查询缓存

3.1、MySQL查询缓存配置:

query_cache_type配置项:
值有0、1、2三个取值。0表示不使用、1始终使用查询缓存,2表示按需使用查询缓存

#query_cache_type为1时,如何关闭查询缓存,下方表示不使用缓存
SELECT SQL_NO_CACHE * FROM table_name WHERE field=?;
#query_cache_type为2时,可按需使用查询缓存,下方表示开启缓存
SELECT SQL_CACHE * FROM table_name WHERE field=?;

query_cache_size:
默认情况下query_cache_size为0,表示为查询缓存预留的内存为0,此时无法使用查询缓存

SET GLOBAL query_cache_size = 134217728;

查询缓存可看作是SQL文本和查询结果的隐射
第二次查询的SQL和第一次查询的SQL完全相同,则会使用缓存

# 查看缓存的命中次数
SHOW STATUS LIKE ‘Qcache_hits’;

表的结构或数据发生改变时,查询缓存中的数据不再有效

3.2、如何清理缓存:

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

4、使用Memcache缓存

对于大型站点,如果没有中间缓存层,当流量打入数据库层时,对于数据库服务器的压力冲击是很大的,这样响应速度会下降,因此添加中间缓存层很有必要

4.1、Memcache简介

memcache是一套分布式的高速缓存系统。但是目前被许多网站使用用于提升网络访问速度,尤其对于一些大型的,需要频繁访问数据库的网站访问速度提升效果十分显著

4.2、Memcache工作原理

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据(图片、视频、文件、数据库查询结果等),简单说就是将数据调用到内存,然后从内存中读取,从而大大提高读取数据

4.3、memcache当做缓存层的工作流程

1、检测客户端请求数据是否在memcache中,如有且未过期,直接把请求数据返回,不再对数据库进行任何操作
2、请求数据不在,就去查询数据库中查询数据,将数据库中查询的数据返回给客户端,同时数据缓存一份到memcache中

4.4、memcache使用方法

//获取缓存
get( key);
//设置缓存
set( key, val, expire);
//删除缓存
delete( key);

一般使用查询的方法名+参数作为查询时的key来获取value

4.5、memcache与redis的区别

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值