1. redis概述
1.1 简介
redis是一个开源的、内存型的、支持多种数据结构的存储系统,常用来做缓存、数据库、消息代理,除此之外,它还支持数据持久化存储,支持集群化的协同方式,项目地址:https://github.com/antirez/redis
在很多项目中,都有redis的身影,它扮演着多样的角色,发挥了重要的作用。架构师的职责之一就是技术选型,了解redis的原理、特点、优势和不足,是成为架构师必不可少的一环。
1.2 redis功能
redis提供了如下功能:
- 提供了基于key-value的查询/存储/watch/过期等功能
- 支持String/Hash/List/Set/Zset等类型的存储结构。
- 支持数据持久化操作。
- 提供Pub/Sub的机制
- 支持集群模式、支持主从节点数据复制等
redis具有丰富的功能,还提供了各种语言的API,入门门槛较低,可以低成本的嵌入到各类项目中。
1.3 应用场景
这里简单说一下redis的几个应用场景。
缓存系统
redis具有非常优秀的读写性能,常用作缓存cache系统,用来提高系统负载能力和响应速度。
分布式锁
redis支持setnx操作(即key不存在的情况下设置value),这种特性常用来做分布式锁的实现。
配置中心
redis提供key/value的查询、存储机制,也提供了watch机制,可以很方便的实现一个配置中心。
消息系统
redis的Pub/Sub功能用作简单的消息系统
分布式场景
redis不仅支持数据持久化,还支持集群化的协同方式,这些特性很好的支持了分布式设计的一些要求(支持扩容和高可用)。
排行榜、热搜、秒杀等
redis内置一些数据结构,可以很方便的解决各式各样的热点数据访问问题。
2. redis优点
2.1 高性能
redis是基于内存型的数据存储系统,所以读写性能非常优秀,读写qps能达到10w左右(写稍微慢一些)。
2.2 高可用
redis支持数据持久化和集群化的操作方式,通过搭建redis集群和实现数据迁移,来提高可用性。
2.3 易用性
redis对外暴露的接口非常简单,不经提供了客户端工具,还支持了多种语言的client api,接入成本很低。
2.4 支持丰富的数据数据结构
redis的value,除了常规的string之外,还支持List/Set/Zset等数据结构,丰富的数据类型能支持更加多样的存储和查询场景。比如秒杀系统、排行榜等
2.5 支持事务级、原子级操作
redis支持事务级操作,即将多个命令打包一起执行,还支持原子性操作。
3 redis劣势
3.1 成本高昂
成本高昂是redis的最大痛点,一方面redis强依赖于RAM,设计大容量的缓存系统,需要很多台机器;另一方面redis也消耗CPU资源,无法进行混部(消耗CPU、低内存占用的服务),导致redis只能独占机器,成本高昂。
3.2 持久化做的不好(影响性能)
RDB和AOF两种持久化方式各有优缺点。
3.3 存在内存碎片问题
3.4 key的索引较为简单,无法支持scan等查询操作
4. 总结
技术选型是架构师必备的技能之一,应对复杂的业务场景,结合公司当前所处的情况,如何更好的解决问题、实现需求,非常考验一个架构师的功底。
本文简单的介绍了redis的基本特性和优缺点对比,并列举了一些常见的应用场景,希望能为以后的架构决策有所帮助。