redis是什么
redis是一个高性能的分布式nosql存储框架,可以作为系统缓存方案,此外也可以作为简单的消息框架来使用。
作为一个数据存储方案。一般从以下几点来评价好坏(对于任何一个组件框架,都可以从这几点来思考:是否好用,是否可靠,性价比如何,扩展性怎么样):
- 支持的数据类型(能存什么)
- 占用空间
- 操作的完备性、性能
- 扩展性
- 事务性
- 容错性,崩溃恢复、备份机制
实现原理
- redis支持键值对方式的数据结构,支持string、list、set、map等类型的值,优化了各类数据类型的存储方案,达到了更优的内存性能;
- 数据直接在内存中进行存储及操作,实现了高效的数据存储服务;
- 通过集群化使系统的水平扩展简单可靠
- 通过持久化(RDB、AOF),实现了数据备份及数据恢复。
- 通过主备部署、哨兵,实现了自动崩溃恢复。
- 通过脚本、事务原语,实现了事务。
特征要素
数据类型
value支持string、set、list、map、bitarray、stream类型。
string,二进制安全string(不会对string做特殊编码处理)
stream,支持追加的map数据类型,可用于日志数据结构建模。支持多种操作。
集群(扩展)
redis通过将数据映射到不同的hash slots,然后将slots存储在不同的redis节点中来构建集群。当增加节点时,通过将已有的slots划分到新节点来实现扩展;当删除节点时,通过将该节点slots拷贝到其他节点,从而实现透明删除。
备份(主备、持久化)
备份可以从两个方面来讲:主备机制、持久化机制
主备是为了运行时崩溃恢复,即master挂了,切换到slave上。可以手动切换,也可以通过启用redis-sentinel来实现自动恢复。
持久化是为了数据备份、停机恢复,即历史数据的转储、停机重启数据重载。持久化有两种方案:RDB、AOF,RDB是周期性的全量数据备份(数据快照),AOF是些操作日志。RDB特点:快,便于转储、容灾恢复;AOF特点:力度相对更细,可以应付停机问题,容易理解,方便查错。一般会结合两者一起使用。
使用方式
有两种用户:使用者、管理者
使用者:就是通过redis客户端使用redis来进行存储、查询。只需要了解redis的数据类型及数据相关操作,了解script,了解事务。
管理者:管理redis,配置redis集群、主备,崩溃恢复、优化、问题排查。这需要了解redis的架构,了解它的实现机制。
使用场景
1、对数据的可靠性、一致性要求部高的高效的分布式缓存方案。(如果不做特殊配置的话,redis在特定情况下会丢失数据,做了特殊配置则性能就没那么高)。
2、简单的消息订阅中间件。(功能简单,对吞吐量、实时性、稳定性没有特殊要求,就是说消息机制在系统中的地位不是很重要,消息不需要追溯,可以丢失,吞吐量也不大,只要能发主题消息,能订阅主题消息就行)。