Redis入门学习教程,从入门到精通,Redis 概述:知识点详解(1)

Redis 作为目前最流行的 NoSQL 数据库之一,是后端开发和技术架构中的核心组件。

Redis 概述:知识点详解

1.1 NoSQL 数据库

1.1.1 什么是 NoSQL?

NoSQL(Not Only SQL)是对不同于传统关系型数据库(RDBMS)的数据库管理系统的统称。随着互联网的发展,数据量爆炸式增长,传统关系型数据库在应对高并发、海量数据以及灵活的数据模型时显得力不从心,从而推动了 NoSQL 的兴起。

1.1.2 NoSQL 与关系型数据库的主要区别

特性 关系型数据库 (RDBMS) NoSQL 数据库
数据模型 表格模型,数据以行和列的形式存储,关系通过外键定义。 模型多样,主要包括键值对、文档、列族、图等。
模式 固定模式,需要预先定义表结构(Schema),修改困难。 动态模式,可以灵活地存储不同结构的数据,非常适合半结构化和非结构化数据。
扩展性 主要支持垂直扩展,即通过提升单机硬件性能来增加处理能力。 专为水平扩展设计,可以通过增加普通服务器节点来分担负载,成本更低。
事务与一致性 严格遵循 ACID 原则,保证强一致性。 遵循 BASE 原则(基本可用、软状态、最终一致性),以保证高性能和高可用性。
查询语言 使用结构化查询语言(SQL)。 不同数据库有不同的查询方式,如 MongoDB 使用 MQL,Redis 使用命令。

1.1.3 NoSQL 数据库的四大核心类型

  1. 键值存储 :数据以 Key-Value 的形式存储。性能极高,常用于缓存、会话管理。代表产品:Redis、Amazon DynamoDB
  2. 文档数据库 :数据以 JSON 或 BSON 格式的文档存储,支持嵌套结构。适合内容管理、用户画像等。代表产品:MongoDB、CouchDB
  3. 列族存储 :数据按列族存储,适合大规模数据分析、时序数据。代表产品:Apache HBase、Cassandra
  4. 图数据库 :数据以节点和边(关系)的形式存储。适用于社交网络、推荐系统、欺诈检测。代表产品:Neo4j

1.2 Redis 简介

1.2.1 什么是 Redis?

Redis(Remote Dictionary Server)是一个开源(BSD 许可)、基于内存存储的数据结构服务器。它可以用作数据库高速缓存消息队列代理

1.2.2 Redis 的核心特点

  • 基于内存,性能极高:数据主要存储在内存中,读写速度极快,每秒可处理数十万甚至百万级请求。
  • 丰富的数据结构:不仅仅支持简单的 Key-Value,还支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)、位图(Bitmap)、HyperLogLog、地理空间(GEO)等。
  • 持久化机制:虽然数据在内存中,但 Redis 提供了 RDB(快照)和 AOF(追加日志)两种方式将数据持久化到磁盘,以防数据丢失。
  • 高可用与分布式
    • 主从复制:实现数据的多副本备份。
    • 哨兵模式:提供高可用性,自动进行故障转移。
    • Redis Cluster:支持分布式部署,实现数据自动分片和水平扩展。
  • 丰富的功能:支持事务、Lua 脚本、发布订阅(Pub/Sub)、管道(Pipeline)等。

1.2.3 Redis 的主要应用场景

  • 缓存系统:减轻后端数据库的压力,如页面缓存、热点数据缓存。
  • 会话存储:在分布式系统中集中管理用户登录会话信息。
  • 实时排行榜/计数器:利用有序集合和原子自增操作,实现点赞数、阅读量、游戏排名等。
  • 消息队列:利用列表或 Stream 数据类型实现简单的任务调度和异步处理。
  • 分布式锁 :利用 SETNX 命令实现分布式系统中的资源互斥访问。

1.2.4 Redis 的优势与局限性

  • 优势:极致性能、数据结构丰富、生态完善、支持持久化。
  • 局限性
    • 内存成本高:数据量受限于物理内存,成本比磁盘数据库高。
    • 持久化开销 :RDB 持久化时的 fork 操作可能造成短暂延迟;AOF 的 always 模式会显著降低写入性能。
    • 复杂查询能力弱:不支持表关联、分组等复杂查询。
    • 最终一致性:在主从异步复制下,可能存在短暂的数据不一致。

1.3 Redis 组件安装

1.3.1 安装方式概览

在 Linux 环境中,Redis 的安装主要有两种方式:

  1. 包管理器安装 :简单快捷,适合学习和快速部署。
    • Debian/Ubuntusudo apt update && sudo apt install redis-server
    • Red Hat/CentOSsudo yum install redis
  2. 源码编译安装 :可以指定版本和安装路径,适合定制化需求。
    • 步骤:下载源码包 -> 解压 -> make -> make install

1.3.2 安装后的初步检查

  • 检查服务状态sudo systemctl status redis(或 redis-server)。
  • 查看版本redis-server --version
  • 连接测试 :使用客户端连接 redis-cli,执行 ping 命令,返回 PONG 表示成功。

1.4 Redis 服务配置

1.4.1 配置文件 redis.conf

Redis 的配置主要通过修改 redis.conf 文件实现。常见的文件位置有 /etc/redis/redis.conf/usr/local/etc/redis/redis.conf

1.4.2 核心配置项解析

配置项 说明 示例 参考资料
bind 监听IP地址。默认 127.0.0.1 只允许本地访问。生产环境可设为内网IP。 bind 0.0.0.0
port 监听端口。默认 6379 port 6379
daemonize 是否以守护进程方式后台运行。 daemonize yes
logfile 日志文件存放路径。 logfile /var/log/redis/redis-server.log
databases 设置数据库的数量,默认16个。 databases 16
save RDB持久化规则,如 save 900 1 表示15分钟内至少有1个key改变就触发快照。 save 900 1
appendonly 是否开启AOF持久化。 appendonly yes
maxmemory 设置Redis能使用的最大内存。建议不超过物理内存的70%。 maxmemory 2gb
maxmemory-policy 内存达到上限后的淘汰策略。常用 allkeys-lru(从所有key中淘汰最近最少使用的)。 maxmemory-policy volatile-lru
requirepass 设置访问密码。 requirepass your_strong_password

1.4.3 配置生效

修改配置文件后,必须重启 Redis 服务才能使更改生效:

bash 复制代码
sudo systemctl restart redis-server
# 或
sudo /etc/init.d/redis-server restart

重启后可通过 redis-cli infoconfig get * 验证配置是否已加载。

1.5 Redis 基础认证

Redis 通过简单的密码认证机制提供一层安全防护。

1.5.1 设置密码

  1. 通过配置文件(永久有效) :在 redis.conf 中取消注释或添加 requirepass yourpassword,然后重启服务。
  2. 通过命令行动态设置(重启后失效) :在 redis-cli 中执行 CONFIG SET requirepass yourpassword

1.5.2 使用密码连接 Redis

  1. 登录时指定密码

    bash 复制代码
    redis-cli -h 127.0.0.1 -p 6379 -a yourpassword
  2. 登录后认证

    bash 复制代码
    $ redis-cli
    redis 127.0.0.1:6379> AUTH yourpassword
    OK

1.5.3 注意事项

  • 密码以明文形式传输,认证层旨在提供基本保护,应结合防火墙(如设置 iptables)限制非信任IP访问。
  • 避免使用过于简单的密码,因为Redis查询速度极快,外部用户可以快速尝试暴力破解。

1.6 redis-benchmark

1.6.1 工具简介

redis-benchmark 是 Redis 官方自带的性能测试工具,用于模拟 N 个客户端同时发送 M 个请求,以此衡量 Redis 服务器的读写吞吐量。

1.6.2 常用参数选项

参数 作用 默认值 示例
-h 指定Redis服务器主机 127.0.0.1 -h 192.168.1.100
-p 指定Redis服务器端口 6379 -p 6380
-a 指定认证密码 -a mypassword
-c 指定并发连接数 50 -c 200
-n 指定总请求数 100000 -n 1000000
-d 指定SET/GET操作的数据大小(字节) 2 -d 100
-r 使用随机Key。-r 10000 表示在 key:000000000000key:000000009999 范围内随机 -r 10000
-q 静默模式,只显示每秒请求数 -q
--csv 以CSV格式输出结果,便于导入分析 --csv
-t 仅运行以逗号分隔的测试命令列表 -t set,get
-P 开启管道模式,一次发送 numreq 条请求 1 -P 10

1.6.3 基准测试实践示例

  1. 基础性能测试

    bash 复制代码
    redis-benchmark -q -n 100000 -c 50

    这条命令会测试100次请求、50个并发下的所有默认命令,并以安静模式输出每秒请求数。

  2. 测试特定命令及随机Key

    bash 复制代码
    redis-benchmark -t set,get -r 100000 -n 200000 -d 256 -q

    在20万次总请求中,测试 setget 命令,使用10万个随机key,value大小为256字节,模拟更真实的缓存场景。

  3. 测试管道模式对性能的提升

    bash 复制代码
    redis-benchmark -t set -P 8 -n 100000 -q

    通过 -P 8 启用管道,一次流水线发送8条命令,可以显著减少网络往返时间(RTT),从而观察QPS的提升。

相关推荐
xixihaha13243 小时前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
red_redemption3 小时前
自由学习记录(135)
学习
夕除4 小时前
Mysql--07
数据库·mysql
数据最前线4 小时前
5个瞬间,盘点国产数据库的2025年
数据库
jiankeljx4 小时前
Redis-配置文件
数据库·redis·oracle
xixihaha13244 小时前
Python游戏中的碰撞检测实现
jvm·数据库·python
Schengshuo4 小时前
SQL 中 COUNT 的用法详解
数据库·sql
顶点多余4 小时前
Mysql--后端与前端关系
数据库·mysql
mygljx4 小时前
【MySQL 的 ONLY_FULL_GROUP_BY 模式】
android·数据库·mysql