Redis:不只是缓存那么简单(一)
专栏Redis 修行录个人主页手握风云目录一、初识 Redis1.1. Redis 核心定义1.2. 起源与主流使用者1.3. Redis 八大核心特性1.4. 使用场景二、浅谈分布式2.1. 单机架构2.2. 分布式2.3. 数据库分离1. 应用与数据分离2. 读写分离3. 垂直分库2.4. 引入缓存冷热分离架构一、初识 Redis1.1. Redis 核心定义Redis 是基于键值对的内存型 NoSQL 数据库值支持 string、hash、list、set、zset 等多种数据结构依托内存存储实现超高读写性能同时支持数据持久化、主从复制、高可用与分布式等能力。1.2. 起源与主流使用者起源2008 年由 Salvatore Sanfilippo 为 LLOOGG 网站开发2009 年将 Redis 1.0 开源至 GitHub。使用者国内外大厂广泛应用国内新浪微博是全球最大 Redis 使用者还有阿里、腾讯、美团等国外有 Twitter、GitHub、Stack Overflow 等。1.3. Redis 八大核心特性速度极快数据全存内存、C 语言实现、单线程执行命令6.0 多线程仅处理网络 IO、代码精雕细琢官方读写性能达10 万 / 秒。丰富的键值数据结构全称 REmote Dictionary Server支持 5 种基础数据结构衍生 Bitmaps、HyperLogLog、GEO 地理定位功能。功能完备支持键过期、发布订阅、Lua 脚本、事务、流水线Pipeline等附加能力。简单稳定早期代码仅 2 万行、单线程模型简化逻辑、无系统类库依赖极少因自身 BUG 宕机。多语言客户端支持兼容 C/C、Java、PHP、Python、NodeJS 等所有主流编程语言。数据持久化提供RDB 快照和AOF 日志两种机制避免内存数据断电丢失。主从复制实现多副本数据同步是 Redis 分布式架构的基础。高可用与分布式哨兵Sentinel实现故障自动转移Redis Cluster 实现官方分布式存储。1.4. 使用场景缓存加速数据访问、降低后端数据库压力。排行榜系统依托 list、zset 实现各类榜单。计数器应用视频播放量、商品浏览数等高并发计数。社交网络点赞、粉丝、共同好友等功能。消息队列发布订阅 阻塞队列实现简易消息队列。二、浅谈分布式2.1. 单机架构单机架构是服务端系统最简初始架构将应用服务与数据库服务部署在同一台服务器上是电商系统起步阶段的基础架构形态。单机架构适用于系统上线初期此时用户访问量极少对系统性能、安全等方面没有高要求核心需求是快速将业务系统投入市场验证并快速响应业务变更同时该架构无需专业运维团队在预算与人力成本有限的场景下也能快速落地也是本科毕业设计等基础系统训练的常用架构。单机架构将应用服务与数据库服务部署在同一台单机服务器上应用服务负责处理用户、商品、交易的核心业务逻辑数据库服务存储用户表、商品表、交易表三类核心业务数据用户访问时先通过 DNS 服务将域名解析为服务器 IP 地址再由浏览器访问该 IP 对应的应用服务。单机架构使用的 Web 服务器软件有 Tomcat、Netty、Nginx、Apache 等数据库软件包含 MySQL、Oracle、PostgreSQL、SQL Server 等这些软件是支撑单机架构运行的基础组件。2.2. 分布式系统中的多个模块被部署在不同服务器上借助网络通信相互配合共同完成整体任务的系统架构形态。分布式的核心特征为系统的多个模块部署在不同服务器上并非单机集中部署跨主机模块必须依靠网络完成数据交互与协作同时会按业务或功能拆分模块让各模块各司其职、实现职责分离。其典型部署示例有 Web 服务器与数据库分别部署在不同服务器以及多台 Web 服务器分散部署并协同对外提供服务这两种情况。生活中可以将分布式类比为原本在同一办公场地的工作小组被分散到多个城市的不同工作场地通过远程配合完成工作目标。分布式与集群的核心区别在于分布式侧重物理形态强调模块分置、依靠网络通信配合完成任务而集群更在意逻辑形态核心是多台服务器为实现同一特定服务目标而协同工作。2.3. 数据库分离数据库分离是服务端高并发分布式架构中将数据库服务从耦合状态拆分、按不同维度独立部署或划分职责的架构优化手段核心是缓解数据库压力、提升系统并发承载能力与数据处理稳定性。1. 应用与数据分离应用与数据分离是服务端架构应对初期访问量上涨、单机硬件资源达到瓶颈的基础优化方案核心是将原本耦合在同一台单机服务器上的应用服务和数据库服务进行物理拆分把应用服务独立部署在应用服务器数据库服务单独部署在存储服务器应用服务通过网络访问数据库数据。这种方式无需调整软件架构改造成本极低能以最小代价初步缓解单机资源竞争问题提升系统的整体承载能力。2. 读写分离读写分离是基于数据库主从架构实现的流量分工策略主要解决应用集群化后数据库集中读写成为系统瓶颈的问题。该架构设置一个主数据库负责所有数据的增、删、改写入操作多个从数据库通过数据同步与主库保持数据一致将读请求分散路由到各个从库处理完美适配电商等读多写少的业务场景大幅分担数据库的查询压力同时保障数据的一致性实际落地中常借助 MyCat、TDDL 等数据库中间件完成读写请求的自动分离。3. 垂直分库垂直分库是应对业务数据量持续增大、单库存储与查询性能不足的进阶数据库拆分方式按照业务维度将庞大的单一数据库拆分为多个独立的小型数据库比如电商系统可拆分为用户库、商品库、交易库等并分别部署。通过降低单库数据体量能显著提升数据查询与存储性能还支持数据库的水平扩展不过该方案会大幅增加数据库运维的复杂度对 DBA 的专业能力要求较高是构建分布式数据库架构的重要环节。2.4. 引入缓存冷热分离架构引入缓存是服务端高并发分布式架构演进的关键优化手段属于冷热分离架构核心环节指将业务中高频访问的热点数据存入缓存层优先通过缓存响应读请求拦截大部分数据库访问以此降低数据库压力的架构方案。设计思路引入缓存会先按照访问频率把数据分为高频读取的热点数据和低频读取的冷数据读请求会优先查询缓存命中就直接返回结果未命中再去查询数据库同时把数据库返回的结果写入缓存并且保障缓存数据和数据库数据的最终一致性。引入缓存的核心作用能大幅减少数据库的读请求数量解决数据库的读瓶颈问题还能缩短数据读取的响应时长提升系统的响应速度让系统可以支撑更高的并发与吞吐增强整体的承载能力。引入缓存常用的技术组件分为本地缓存和分布式缓存本地缓存常用 Memcached分布式缓存则主要使用 Redis。