浅尝三种缓存技术Memcached、Redis及文件缓存

流氓凡 技术分享 2018-12-25 5.32 K 0

  随着解析的API接口使用人数越来越多,视频库调用次数和数据库并发也随之增大,前期我使用的是“文件缓存”利用cache文件夹生成缓存文件每天定时shell脚本删除这个文件夹中的缓存来达到缓解磁盘吞吐的压力。

  但是,昨天晚上发现文件缓存已经不能满足于我了,16H32G的服务器CPU直接飙满。cache缓存文件夹每天定时凌晨2点自动清除,但还是缓存了1万6千多条数据。

  也就是说,我这个配置的使用“文件缓存”也仅仅缓存这么点东西,如果不能及时清除会给服务器带来巨大的卡顿现象。当然,也可以每天增加清楚缓存的次数,但ip数目是每天递增的,不可能每次都等待再出现卡顿我再来弄一遍。

  因此,我选择尝试使用Memcached、Redis缓存。当然,如果你使用了cdn那么这些缓存都是很鸡肋的了,因为在使用了 CDN 后访客基本已经不会访问回源了都在 CDN 节点就可以了,回源访问的都是 CDN 各个节点缓存的时候需要的,服务器的负载和流量请求都维持在一个非常小的阈值上,这时候 Memcached 或者Redis的存在除了“招蜂引蝶”以外,实在没有看出还有啥作用?

image.png

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 不互相通信的分布式


2018091206104290.png

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 可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

        image.png


        通过上面的介绍基本上可以判定 Memcached 就是通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用( WordPress 、 Typecho )的速度、提高可扩展性的,而 Redis 看着其实就是 Memcached 升级增强体了对缓存的存储和读写速度相对于 Memcached 来说有了大幅的的提升。总之对于我们 WordPress 站点来说 Memcached 就够用了,Redis 可能在性能上会有一定提升而已。

        我们再理智冷静的分析一下就会发现其实 Memcached 对硬件配置的要求更低,Redis 需要足够硬件内存支撑才能更好的发挥出性能提升效果(内存低于 1G 的服务器明月是不建议使用 Redis 的,因为一旦 Redis 对内存有更多需求的时候进程就会被“干掉”,这时候网站访问就会出现“404”了。)对于个人博客来说 1G 内存配置算是比较常见的配置了,在 MySQL、Nginx 使用一部分后基本也就没有剩下多少了,勉强的用用 Memcached 还是可以接受的。


评论