数据缓存技术 数据库缓存VS程序缓存

数据库(查询)缓存

1、数据库性能:
(1)mysql每秒可以处理5000次读取,或者3000次写入
(2)响应时间通常在10ms以内,但是并发量达到1万的时候,要保证10ms以内的响应速度,任务数据库都做不到

2、数据库缓存:
(1)mysql缓存是KV(key-value)结构的,保存在内存中,key是执行过的sql语句,value是查询的结果
(2)如果执行删除、修改、新增操作,或者修改表结构,都会造成(表)缓存情况

3、数据库查询过程:
执行sql语句,MySQL先查询缓存。命中数据,就从缓存中提取数据;没有命中,则从数据库中查询数据
在这里插入图片描述
4、数据库缓存注意事项
(1)所有对数据加锁的事务中,不会使用查询缓存:如一个事务包含update + select,则select语句不使用缓存
(2)查询语句必须是一模一样(key值保存的sql语句),才有机会命中缓存

5、结论:
(1)用户表经常涉及查询和更新操作,而部门表、角色表则不经常更新,当mysql缓存了很多结果的时候,一条用户表更新语句就会让全部用户表缓存作废,且mysql是一刀切,无法细颗粒管理哪些表需要缓存,哪些表不需要缓存,这严重加重了内存管理的负担

//mysql 查看是否开启缓存
show variables like '%query_cache%';

(2)mysql 8.0去除了查询缓存,Oracle官方也不推荐使用查询缓存

程序缓存

1、Redis、memcached等缓存产品,结合spring框架,在程序中可以细粒度的设置哪些查询缓存,哪些查不需要缓存

2、SpringCache技术
(1)方法加上@Cacheable注解,该方法执行时,spring先查询缓存,根据命中的情况决定返回缓存,还是查询数据库
在这里插入图片描述
(2)方法加上@CacheEvcit,spring执行完数据库操作后,删除缓存记录

3、单表查询,查询结果可以缓存,但是表连接查询,不建议缓存结果,因为不好说在表连接里面,那张表是经常修改,那张表是不经常修改的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值