区块链入门AI-大数据

【深度知识】memcache和redis原理对比

2019-09-24  本文已影响0人  笔名辉哥

一、问题:

数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。

二、解决方案:

1、通过高速服务器Cache缓存数据库数据
2、内存数据库

(这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台)

三、主流解Cache和数据库对比:

名称 类型 数据存储选项 查询类型 附加功能
Redis 内存中的非关系数据库 string、list、set、hashe、sorted set 用于常见访问模式的每个数据类型的命令,包括批量操作和部分跨操作支持。 发布/订阅,主/从复制,磁盘持久性,脚本(存储过程)
memcached 内存缓存键-值 键到值的映射 用于创建、读取、更新删除和其他一些命令 多线程服务器的额外性能
MySQL 关系数据库 数据库表的行,视图的表,空间和第三方扩展。 SELECT,INSERT,UPDATE,DELETE,函数,存储过程 ACID兼容(与InnoDB),主/从和主/主复制。
PostgreSQL 关系数据库 数据库表的行,视图的表,空间和第三方扩展,可定制的类型。 SELECT,INSERT,UPDATE,DELETE,内置函数、自定义存储过程 ACID兼容,主/从复制,多主复制(第三方)
MongoDB 磁盘上的非关系文档存储 无模式BSON文档表数据库。 命令创建、读取、更新、删除条件查询,等等 支持使用映射-规约模式操作,主/从复制、分片、空间索引

上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了

我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。
而MongoDB其实只是一种非关系型数据库,其优势在于可以存储海量数据,具备强大的查询功能,因此不宜用于缓存数据的场景。
从以上各数据可知,对于我们产品最可行的技术方案有两种:

1、Memcached 内存Key-Value Cache
2、Redis 内存数据库

四、下面重点分析Memcached和Redis两种方案:

4.1 Memcached介绍

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,现在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使用。

4.2 Memcached工作方式分析

许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。下图展示了memcache与数据库端协同工作情况:

4.3 如何实现分布式可拓展性?

Memcached的分布式不是在服务器端实现的,而是在客户端应用中实现的,即通过内置算法制定目标数据的节点,如下图所示:


4.4 Redis 介绍

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。

4.5 Redis 工作方式分析

Redis支持丰富的数据类型,最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中,或被配置为使用虚拟内存。Redis有一个很重要的特点就是它可以实现持久化数据,通过两种方式可以实现数据持久化:使用RDB快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的AOF日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。 Redis支持将数据同步到多台从数据库上,这种特性对提高读取性能非常有益。

4.6 Redis如何实现分布式可拓展性?

2.8以前的版本:与Memcached一致,可以在客户端实现,也可以使用代理,twitter已开发出用于Redis和Memcached的代理Twemproxy 。
3.0 以后的版本:相较于Memcached只能采用客户端实现分布式存储,Redis则在服务器端构建分布式存储。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,各个节点地位一致,具有线性可伸缩的功能。如图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个 key的数值域分成16384个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是16384

五、综合结论

应该说Memcached和Redis都能很好的满足解决我们的问题,它们性能都很高,总的来说,可以把Redis理解为是对Memcached的拓展,是更加重量级的实现,提供了更多更强大的功能。具体来说:

六、需要慎重考虑的部分

本文转载自《memcache和redis原理对比》https://www.kancloud.cn/mayan0718/php/555555,如不适合转载请告知。

上一篇下一篇

猜你喜欢

热点阅读