Redis介绍
Redis是一种非关系型数据存储工具(类似于mongoDB等),这区别于传统的关系型数据库(类似于mysql等),类似于memcache,并且其内部集成了对list(链表)、
set(集合)的操作,可以很方便快速的处理数据(像插入、删除list取交集并集差集等),这极大的减轻了底层数据库的压力,并且给用户更快的响应速度。
Redis是一个key-value格式的存储系统。Redis提供了一些丰富的数据结构,包括 Lists、 Sets、有序Sets以及Hashes,当然还有和Memcached一样的 Strings结
构。Redis当然还包括了对这些数据结构的丰富操作。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis的优点
- 性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 有序Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
Redis、memcache、mongoDB对比
性能
总体来讲,TPS 方面 redis 和 memcache 差不多,要大于 mongodb。
操作和支持数据结构方面
memcache 数据结构单一。(key-value)
Redis 数据结构丰富,数据操作方面,redis 更好一些,较少的网络IO次数,同时还提供 list,set,hash 等数据结构的存储。
mongodb 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
可用性
对于单点问题:
Redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动 sharding,需要依赖程序设定一致 hash 机制。
一种替代方案是,不用 redis 本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡。
memcache 本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的 hash 或者环状的算法,解决单点故障引起的抖动问题。
mongoDB 支持master-slave,replicaset(内部采用 paxos 选举算法,自动故障恢复),auto sharding 机制,对客户端屏蔽了故障转移和切分机制。
持久化
对于数据持久化和数据恢复,
redis 支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响
memcache 不支持,通常用在做缓存,提升性能;
MongoDB 从 1.8 版本开始采用 binlog方式支持持久化的可靠性。
事务支持
memcache 在并发场景下,用 cas 保证一致性。
Redis 事务支持比较弱,只能保证事务中的每个操作连续执行
mongoDB 不支持事务