A-A+

Redis简介

2019年10月01日 数据库 暂无评论 阅读 143 次

 

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

 

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

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

产品特征

Redis是个Key-Value存储,但除了简单的key-value外,还支持非常丰富的数据结构如Hash、List、Set等。

协议

纯文本的协议,举个例子:

数据类型丰富

各种list, set, hash等等。

确实很丰富。

持久化

两种持久化机制,AOF和RDB。

AOF是write ahead log,以命令文本的方式存放,可配置是否开启。

RDB是checkpoint,二进制方式存放,RDB需要手动发命令执行。

事务性

Redis提供了比较简单的事务接口,一组操作先被queue到服务器端,提交时批量执行。Redis还提供了watch命令,用于在事务开启前,监视指定的key,如果事务执行期间这个key被其他客户端修改了,事务提交时会失败。

基本上聊胜于无。

复制 & 集群功能

复制(HA)能力:基本类似于MySQL的同步/异步等传统主备模式的复制。

集群功能:pre-hash,hash range预先划分到节点,增删节点的时候会比较麻烦,半人工处理。

基本上可以说,都是比较简单初级的设计。

其他功能

  1. 发布与订阅
  2. slow query
  3. monitor: 客户端注册成为服务器的monitor,进而接收所有的命令序列。

 

技术设计

主要特点

  • 单线程
  • 整个架构上,访问数据的部分都是单线程跑的,所以内存存储部分都是不需要关心多线程的,实现上简单很多。
  • 如果想充分利用多核,官方建议用多个实例。

 

Redis高性能的几个原因

  1. 内存操作:不配AOF的时候,都是纯内存处理
  2. 轻量级数据结构实现:例如string等都是自己实现的,另外关键的数据结构(hashmap, skiplist等)都是不考虑多线程的。
  3. 简洁高效的网络处理框架(Redis自己实现了一个轻量级的基于epoll框架)

根本上,还是浪费少,都在干有用的活。不过话又说回来,单线程设计下本身也没啥没用的活吧……

 

发展

针对Redis单线程问题,开源社区搞了一个叫KeyDB的项目,目的就是让Redis支持多线程。KeyDB官方宣称获得了2倍吞吐和60%延迟降低。此外还支持了Active Replication、FLASH storage、direct backup to AWS S3等企业级特性。

KeyDB给出的fork Redis搞个新的项目的理由:The Redis maintainers have continually reiterated that they do not plan to support multithreading. While we have great respect for the redis team, we feel the analysis justifying this decision is incorrect. In addition we wanted open source implementations of features currently only available in proprietary modules. We feel a fork is the best way to accelerate development in the areas of most interest to us. We plan to track the Redis repo closely and hope our projects can learn from each other.

 

商业

Redis本身作为一个产品的亮点在什么地方呢?

用作缓存时,Redis提供了很丰富的数据结构,这个很可能能极大简化一些业务负担。

设想如果要缓存一个需要不断修改的List,如果业务自己维护这么一个list,还是很麻烦的。

 

公有云产品卖点

基本上国内公有云都有这类产品。因为Redis功能不多,技术门槛相对不高,因此很多公司可能自研一个类似的产品出来。

阿里云官网上“云数据库 Redis 版”。卖点:高稳定架构(HA)、性能灵活扩展、源码级护航、智能运维。

腾讯云官网上“云数据库TecentDB for Redis”。卖点:托管部署、数据保障机制、高性能、平滑扩展、全面的日常监控、自定义告警、数据迁移、自动容灾、费用低廉。

从两家的卖点看,内核能力这块主要还是集中在HA、可扩展、高性能三点。这三个点目前看起来应该也是开源Redis的短板:

  • HA:如前述,雷同于MySQL传统的主备模式,在目前Paxos几乎成为标配技术的时代,Redis这个HA切主不一致等问题就成了短板。
  • 可扩展:集群的扩展性功能不够完备,增删节点rehash时还需要人工介入。
  • 高性能:虽然单线程处理能力比较强,但是单线程架构限制了对机器多核的利用。官方让使用多个进程实例的方式(本质上就是sharding),但这样部署起来估计比较麻烦,客户端还要感知多个服务端口。从KeyDB的测试数据(2倍吞吐和60%延迟降低)可以看出,早先单线程这个设计可能是个错误。

 

参考

给我留言