Redis:不只是缓存那么简单(一)

专栏:Redis 修行录

个人主页:手握风云

目录

[一、初识 Redis](#一、初识 Redis)

[1.1. Redis 核心定义](#1.1. Redis 核心定义)

[1.2. 起源与主流使用者](#1.2. 起源与主流使用者)

[1.3. Redis 八大核心特性](#1.3. Redis 八大核心特性)

[1.4. 使用场景](#1.4. 使用场景)

二、浅谈分布式

[2.1. 单机架构](#2.1. 单机架构)

[2.2. 分布式](#2.2. 分布式)

[2.3. 数据库分离](#2.3. 数据库分离)

[1. 应用与数据分离](#1. 应用与数据分离)

[2. 读写分离](#2. 读写分离)

[3. 垂直分库](#3. 垂直分库)

[2.4. 引入缓存(冷热分离架构)](#2.4. 引入缓存(冷热分离架构))


一、初识 Redis

1.1. Redis 核心定义

Redis 是基于键值对的内存型 NoSQL 数据库,值支持 string、hash、list、set、zset 等多种数据结构,依托内存存储实现超高读写性能,同时支持数据持久化、主从复制、高可用与分布式等能力。

1.2. 起源与主流使用者

  1. 起源:2008 年由 Salvatore Sanfilippo 为 LLOOGG 网站开发,2009 年将 Redis 1.0 开源至 GitHub。
  2. 使用者:国内外大厂广泛应用,国内新浪微博是全球最大 Redis 使用者,还有阿里、腾讯、美团等;国外有 Twitter、GitHub、Stack Overflow 等。

1.3. Redis 八大核心特性

  1. 速度极快: 数据全存内存、C 语言实现、单线程执行命令(6.0 多线程仅处理网络 IO)、代码精雕细琢,官方读写性能达10 万 / 秒
  2. **丰富的键值数据结构:**全称 REmote Dictionary Server,支持 5 种基础数据结构,衍生 Bitmaps、HyperLogLog、GEO 地理定位功能。
  3. **功能完备:**支持键过期、发布订阅、Lua 脚本、事务、流水线(Pipeline)等附加能力。
  4. **简单稳定:**早期代码仅 2 万行、单线程模型简化逻辑、无系统类库依赖,极少因自身 BUG 宕机。
  5. **多语言客户端支持:**兼容 C/C++、Java、PHP、Python、NodeJS 等所有主流编程语言。
  6. 数据持久化: 提供RDB 快照AOF 日志两种机制,避免内存数据断电丢失。
  7. **主从复制:**实现多副本数据同步,是 Redis 分布式架构的基础。
  8. **高可用与分布式:**哨兵(Sentinel)实现故障自动转移,Redis Cluster 实现官方分布式存储。

1.4. 使用场景

  1. 缓存:加速数据访问、降低后端数据库压力。
  2. 排行榜系统:依托 list、zset 实现各类榜单。
  3. 计数器应用:视频播放量、商品浏览数等高并发计数。
  4. 社交网络:点赞、粉丝、共同好友等功能。
  5. 消息队列:发布订阅 + 阻塞队列实现简易消息队列。

二、浅谈分布式

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。

相关推荐
yuweiade2 小时前
docker desktop安装redis
redis·docker·容器
色空大师3 小时前
网站搭建实操(三)后台管理-2-forum-core)
java·redis·网站·搭建网站
皙然3 小时前
Redis 持久化机制超详细详解(RDB+AOF 双方案 + 生产实战)
数据库·redis·bootstrap
镜花水月linyi4 小时前
Redis 为什么快?
redis·后端
java1234_小锋4 小时前
Java高频面试题:怎么实现Redis的高可用?
java·开发语言·redis
野犬寒鸦4 小时前
高并发利器:SingleFlight优化指南(Java版实现与项目实战)
服务器·开发语言·redis·后端·面试
深蓝轨迹5 小时前
解决Redis排序后MySQL查询乱序问题:从原因到落地(通用版)
数据库·redis·笔记·mysql·bug
XDHCOM5 小时前
Redis本地化实现策略与应用问题解析,如何配置Redis本地化,常见问题解决
数据库·redis·缓存
霖霖总总5 小时前
[Redis小技巧29]从 Setnx 到 Redlock:Redis 分布式锁的演进之路与生产级实践
数据库·redis·分布式