memcached mysql 缓存_Mysql缓存与Memcached,Redis区别

2ff34e647e2e3cdfd8dca593e17d9b0a.png

前言我们在做Web开发的时候从至上而下的技术分层里,缓存始终贯穿其中。浏览器层–》业务层–》数据库层。每个层面上的缓存都有各自的功能与场景。我们今天探讨下业务层到数据库层上缓存的功能和区别。

业务层缓存

Memcached

Memcached 严格上讲还不能说是完整的分布式缓存系统。它有很多第三方工具支撑其分布式功能。

Memcached 通过内部固定的大小的chunk预申请内存数据。使得分配和回收内存的效率很高。读写性能也很高。64k对象的情况下,单机QPS可以达到15W以上。

Memcached 的集群架构中,单个节点对其他节点是相互独立的,没有数据方面的通信。不具备failover能力。

Memcached 支持多语言,有相当的稳定性。

Redis

Redis 显著的特点是不仅支持普通的K,V 类型存储,还支持其独特的 五种数据结构 详见Redis数据结构

Redis 也支持集群,Redis支持的集群是Master-Slave模式。其有点是可以在宕机时切换到备份机。可用性方面有一定的提升。

Redis 单纯当做缓存存储在内存时速度和Memcached不相上下。存储到硬盘时,性能和速度会下降很多,介于 Memcahced 和mysql之间。

Redis 有特殊的订阅功能,使得它经常被用于当做内存队列使用。

Redis 扩展方面不如Memcached,无法做到持续的线性扩容。目前支持通过复制的方式,产生一主多备架构并升级容量。

数据库层缓存

mysql缓存

MySQL将缓存分为Buffer缓存和Cache缓存。

Buffer缓存:

由于硬盘的写入速度过慢,或者频繁的I/O,对于硬盘来说是极大的效率浪费。那么可以等到缓存中储存一定量的数据之后,一次性的写入到硬盘中。Buffer 缓存主要用于写数据,提升I/O性能。

Cache 缓存:

Cache 是在开启缓存功能前提下,在通过的每次sql进行hash计算,生成此条sql的唯一hash作为存储的Key值。SO select是区分大小写的。

生成缓存之后,如果涉及的table有任何数据的变动(整个talbe),所有的cache就会被删除。如果Cache缓存已经存储满,则启用LRU算法,进行数据淘汰。淘汰掉最远未使用的数据,从而开辟新的存储空间。

不过对于特大型的网站,依靠这种策略很难缓解高频率的读请求,一般会把访问非常频繁的数据静态化,直接由nginx返还给用户。

程序和数据库I/O设备交互的越少,则效率越高。

问题

既然有Memcached,Redis 为什么还要用Mysql缓存呢?解答

从整体架构上看,Memcached和Redis支持扩展分布式缓存。适用于大型Web项目。

单从单节点功能上看,Mysql由于自身的cache 删除方式。使得其缓存有相对的局限性。并且无法简单的管控。需要更好的使用的话,需要对业务上进行更详尽细致的分析。

在数据库的逻辑设计层面细分出能够说回合mysql缓存的场景。

单节点,数据简单,无太多修改的数据面前,但根据场景来,mysql缓存还是有一定价值的。比Memcached Redis简单易用,效率更好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值