作家
登录

同为分布式缓存,为何Redis更胜一筹?

作者: 来源: 2018-03-26 15:24:22 阅读 我要评论

沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践!


本文节选自即将出版的《可伸缩办事架构:框架恿闼殇件》一书,作者:李艳鹏、杨彪、李海亮、贾博岩、刘淏

如今,市情上的缓存解决筹划已经慢慢成熟了,今天我将拔取个一一些代表性的筹划包含Redis、Memcached和Tair进行比较,赞助大年夜家在临盆实践中更好地进行技巧选型。

一、常用的分布式缓存的比较

常用的分布式缓存包含Redis、Memcached和阿里巴巴的Tair(见下表),因为Redis供给的数据构造比较丰富且简单易用,所以Redis的应用广泛。

下面我们大年夜9个大年夜方面来比较最常用的Redis和Memcached。

1.数据类型

Redis一共支撑5种数据类型,每种数据类型对应不合的数据构造,有简单的String类型、紧缩串、字典、跳跃钡寥。跳跃表是比较新型的数据构造,常用于高机能的查找,可以达到log2N的萌芽速度,并且跳跃表相对于红黑树,在更新时变革的节点较少,更易于实现并发操作。

Memcache只支撑对键值对的存储,并不支撑其它数据构造。

Memecache的客户端包含Memcache Java Client、Spy Client、XMemcache等,Memcache Java Client应用壅塞I/O,而Spy Client/XMemcache应用非浊宣I/O。

2.线程模型

Redis应用单线程实现,Memcache等应用多线程实现,是以我们不推荐在Redis中存储太大年夜的内容,不然会壅塞其它请求。

因为缓存操作都是内存操作,只有很少的计算操作,所以在单线程下机能很好。Redis实现的单线程的非浊宣收集I/O模型,合适快速地操作逻辑,有复杂的长逻辑时会影响机能。对于长逻辑应当设备多个实例来进步多核CPU的应用率,也就是说,可以应用单机械多端口来设备多个实例,官方的推荐是一台机械应用8个实例。

它实现的非浊宣I/O模型基于Libevent库中关于Epoll的两个文件加上本身简单实现的事宜通知模型,简单小巧,作者的思惟就是保持实现简单、削减依附。因为在办事器中只有一个线程,是以供给了管道来归并要乞降批量履行,缩短了通信消费的时光。

Memcache也应用了非浊宣I/O模型,然则应用了多线程,可以应用于多种场景,请求的逻辑可大年夜可小、可长可短,不会出现一个逻辑复杂的请求壅塞对其它请求的响应的场景。它直接依附Libevent库实现,依附比较复杂,损掉了在一些特定情况下的高机能。

3.持久机制

Redis供给了两种持久机制,包含RDB和AOF,前者是准时的持久机制,但在出现宕机时可能会出现数据损掉,后者是基于操作日记的持久机制。

Memcahe并不供给持久机制,因为Memache的设计理念就是设计一个纯真的缓存,缓存的数据都是临时的,不该该是持久的,也不该该是一个大年夜数据的数据库,缓存未射中时回源萌芽数据库是理所当然的,但可以经由过程第三方库MemcacheDB来支撑它的持久性。

4.客户端

常见的Redis Java客户端Jedis应用壅塞I/O,但可以设备连接池,并供给了一致性哈希分片的逻辑,也可以应用开源的客户端分片框架Redic。

5.高可用

Redis支撑主大年夜节点复制设备,大年夜节点可应用RDB懈弛存的AOF敕令进行同步和恢复。Redis还支撑Sentinel和Cluster(大年夜3.0版本开端)等高可用集群筹划。

Memecache不支撑高可用模型,可应用第三方Megagent代劳,当一个实例宕机时,可以连接别的一个实例来实现。

6.对队列的支撑

Redis本身支撑lpush/brpop、publish/subscribe/psubscribe等队列和订阅模式。

Memcache不支撑队列,可经由过程第三方MemcachQ来实现。

7.事务

8.数据镌汰策略

Redis供给了一些在必定程度上支撑线程安然和事务的敕令,例如:multi/exec、watch、inc等。因为Redis办事器是单线程的,任何单一请求的办事器操作敕令都是原子的,但跨客户端的操作并不包管原子性,所以对于同一个连接的多个操作序列也不包管事务。

Memcached的单个敕令也是线程安然的,单个连接的多个敕令序列不是线程安然的,它也供给了inc等线程安然的自加敕令,并供给了gets/cas包管线程安然。

Redis供给了丰富的镌汰策略,包含maxmemory、maxmemory-policy、volatile-lru、allkeys-lru、volatile-random、allkeys-random、volatile-ttl、noeviction(return error)等。

Memecache在容量达到指定值后,就基于LRU(Least Recently Used)算法主动删除不应用的缓存。在某些情况下LRU机制反倒会带来麻烦,会将不等待的数据大年夜内存中清除,在这种情况下启动Memcache时,可以经由过程“M”参数禁止LRU算法。

9.内存分派

Memcache采取slab table的方法分派内存,起首把可得的内存按照不合的大年夜小来分类,在应用时根据需求找到最接近于需求大年夜小的块分派,来削减内存碎片,然则这须要进行合理设备才能达到效不雅。

二、Redis初体验

大年夜膳绫擎的比较可以看到,Redis在实现和应用上更简单,然则功能更强大年夜,效力更高,应用也更广泛。下面将对Redis进行初步介绍,给初学者一个初体验式的进修引导。

Redis是一个可以或许存储多种数据对象的开源Key-Value存储体系,应用ANSI C说话编写,可以仅仅算作内存数据库应用,也可以作为以日记为存储方法的数据库体系,并供给多种说话的API。

1.应用处景

我们平日把Redis算作一个非本地缓存来应用,很罕用到它的一些高等功能。在应用中最轻易出问题的是用Redis来保存JSON数据,因为Redis不像Elasticsearch或者PostgreSQL那样可以很好地支撑JSON数据。所以我们经常把JSON算作一个大年夜的String直接放到Redis中,但如今的JSON数据都是连环嵌套的,每次更新时都要先获取全部JSON,然后更改个一一个字段再放上去。


  推荐阅读

  binlog2sql实现MySQL误操作的恢复

沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! 对于MySQL数据库中的误操作删除数据的恢复问题,可以应用基于MySQL中binlog做到类似于闪回或者生成反向操作的S>>>详细阅读


本文标题:同为分布式缓存,为何Redis更胜一筹?

地址:http://www.17bianji.com/lsqh/40888.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)