浅尝三种缓存技术Memcached、Redis及文件缓存
随着解析的API接口使用人数越来越多,视频库调用次数和数据库并发也随之增大,前期我使用的是“文件缓存”利用cache文件夹生成缓存文件每天定时shell脚本删除这个文件夹中的缓存来达到缓解磁盘吞吐的压力。
但是,昨天晚上发现文件缓存已经不能满足于我了,16H32G的服务器CPU直接飙满。cache缓存文件夹每天定时凌晨2点自动清除,但还是缓存了1万6千多条数据。
也就是说,我这个配置的使用“文件缓存”也仅仅缓存这么点东西,如果不能及时清除会给服务器带来巨大的卡顿现象。当然,也可以每天增加清楚缓存的次数,但ip数目是每天递增的,不可能每次都等待再出现卡顿我再来弄一遍。
因此,我选择尝试使用Memcached、Redis缓存。当然,如果你使用了cdn那么这些缓存都是很鸡肋的了,因为在使用了 CDN 后访客基本已经不会访问回源了都在 CDN 节点就可以了,回源访问的都是 CDN 各个节点缓存的时候需要的,服务器的负载和流量请求都维持在一个非常小的阈值上,这时候 Memcached 或者Redis的存在除了“招蜂引蝶”以外,实在没有看出还有啥作用?
Memcached简介
Memcached 是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、hatena、Facebook、Vox、LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。
Memcached 是一种基于内存的 key-value 存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API 调用或者是页面渲染的结果。
Memcached 简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的 API 兼容大部分流行的开发语言。
本质上,它是一个简洁的 key-value 存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
Memcached特征
Memcached 作为高速运行的分布式缓存服务器,具有以下的特点。
协议简单
基于 libevent 的事件处理
内置内存存储方式
Memcached 不互相通信的分布式
Redis简介
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis特征
性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。
丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。
丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 与其他 key-value 存储有什么不同?
Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
通过上面的介绍基本上可以判定 Memcached 就是通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用( WordPress 、 Typecho )的速度、提高可扩展性的,而 Redis 看着其实就是 Memcached 升级增强体了对缓存的存储和读写速度相对于 Memcached 来说有了大幅的的提升。总之对于我们 WordPress 站点来说 Memcached 就够用了,Redis 可能在性能上会有一定提升而已。
我们再理智冷静的分析一下就会发现其实 Memcached 对硬件配置的要求更低,Redis 需要足够硬件内存支撑才能更好的发挥出性能提升效果(内存低于 1G 的服务器明月是不建议使用 Redis 的,因为一旦 Redis 对内存有更多需求的时候进程就会被“干掉”,这时候网站访问就会出现“404”了。)对于个人博客来说 1G 内存配置算是比较常见的配置了,在 MySQL、Nginx 使用一部分后基本也就没有剩下多少了,勉强的用用 Memcached 还是可以接受的。
评论