mysql有缓存 为什么还要用redis,为什么需要使用redis缓存

之前觉得需要使用redis缓存是因为使用redis作为缓存可以减少数据库的压力,特别是需要频繁查询大量数据的情形下。使用redis还可以提高访问速度,因为redis的数据会被保存在内存中,但是,这一些是不足以说明的。

712368507d81

其实mysql架构中也是有缓存的,服务器中查询缓存(query cache),在执行sql语句的时候,会将可以作为缓存的sql结果(注1)保存在查询缓存中,这样当有相同的sql查询执行时,可以直接从缓存中查询到结果,不需要进行sql解析、优化器优化。似乎可以直接依赖mysql自身的查询缓存来解决问题

但是,

1)这个缓存是本地缓存,如果有多台服务器,sql语句会随机发送给其中一台,无法保证相同的请求会发送给同一台,这样本地缓存命中率就比较低,本地缓存(即查询缓存)就没有什么用了

2)从查询缓存中取出结果或者将查询结果添加进查询缓存中,会带来额外性能消耗

3)当表的结构或内容发生变化时,使用这个表的缓存查询将不再有效,查询缓存值的相关条目将被清空。常见修改表结构和表内容的语句,如delete、insert、altertable很多。使用redis作为缓存将受这个影响很小,因为它是基于键值对保存缓存的,只有key对应的缓存内容发生变化,才会受到影响,其他key对应缓存内容发生变化对其几乎是没有影响的

那为什么现在用redis比较多呢,大概是因为其支持的数据类型比较多吧,如list、set、sortedset、hashmap、string,而memecache只能支持简单的数据类型。另外redis可以完成一部份数据的持久化,而memecache完全将数据保存在内存中,不进行持久化,如果服务器出问题,数据将全部丢失,另外,可能是redis底层实现优化比memecache好吧

注1:有一些sql语句,比如sql语句中含有自定义函数、自定义变量、含有不确定数据[NOW()、CURRENT_DATE()等]、还有其他一些sql语句的查询语句是不会被加入到查询缓存中的,查询时也不会经过查询缓存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值