redis篇——基本介绍

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的基本特性和优缺点对比,并列举了一些常见的应用场景,希望能为以后的架构决策有所帮助。