Redis

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 是什么

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis 功能

Redis提供了如下功能:

  • 提供了基于key-value的查询/存储/watch/过期等功能
  • 支持String/Hash/List/Set/Zset等类型的存储结构。
  • 支持数据持久化操作。
  • 提供Pub/Sub的机制
  • 支持集群模式、支持主从节点数据复制等
  • Redis具有丰富的功能,还提供了各种语言的API,入门门槛较低,可以低成本的嵌入到各类项目中。

Redis 应用场景

  • 缓存系统

    • Redis具有非常优秀的读写性能,常用作缓存cache系统,用来提高系统负载能力和响应速度。
  • 分布式锁

    • Redis支持setnx操作(即key不存在的情况下设置value),这种特性常用来做分布式锁的实现。
  • 配置中心

    • Redis提供key/value的查询、存储机制,也提供了watch机制,可以很方便的实现一个配置中心。
  • 消息系统

    • Redis的Pub/Sub功能用作简单的消息系统
  • 分布式场景

    • Redis不仅支持数据持久化,还支持集群化的协同方式,这些特性很好的支持了分布式设计的一些要求(支持扩容和高可用)。
  • 排行榜、热搜、秒杀等

    • Redis内置一些数据结构,可以很方便的解决各式各样的热点数据访问问题。

Redis优点

  • 高性能

    • Redis是基于内存型的数据存储系统,所以读写性能非常优秀,读写qps能达到10w左右(写稍微慢一些)。
  • 高可用

    • Redis支持数据持久化和集群化的操作方式,通过搭建Redis集群和实现数据迁移,来提高可用性。
  • 易用性

    • Redis对外暴露的接口非常简单,不经提供了客户端工具,还支持了多种语言的client api,接入成本很低。
  • 支持丰富的数据数据结构

    • Redis的value,除了常规的string之外,还支持List/Set/Zset等数据结构,丰富的数据类型能支持更加多样的存储和查询场景。比如秒杀系统、排行榜等
  • 支持事务级、原子级操作

    • Redis支持事务级操作,即将多个命令打包一起执行,还支持原子性操作。

Redis劣势

  • 成本高昂

    • 成本高昂是Redis的最大痛点,一方面Redis强依赖于RAM,设计大容量的缓存系统,需要很多台机器;另一方面Redis也消耗CPU资源,无法进行混部(消耗CPU、低内存占用的服务),导致Redis只能独占机器,成本高昂。
  • 持久化做的不好(影响性能)

    • RDB和AOF两种持久化方式各有优缺点。
  • 存在内存碎片问题

  • key的索引较为简单,无法支持scan等查询操作

Redis与其他key-value存储有什么不同

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。