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可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。