Redis学习笔记一——初始Redis

时间:2021-12-30 07:03:36

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 不支持事务

参考文章

程序和资料