Redis 简明教程 —— 从安装到高级应用实战

📅 2026/6/21 2:48:18
Redis 简明教程 —— 从安装到高级应用实战
Redis 简明教程 —— 从安装到高级应用实战实操环境:华为云 FlexusX x2e.8u.16g / Ubuntu 24.04.4 LTS / Redis 7.0.15实操时间:2026-06-20节点:ecs-ff10-0003 (120.46.199.108)声明:本文所有命令输出均为真实实操截图,非模拟数据。目录一、Redis 安装介绍1.1 Redis 简介1.2 Redis 的安装1.3 Redis 的启动二、Redis 数据类型2.1 Redis Strings2.2 Redis Lists2.3 Redis Hashes2.4 Redis Sets2.5 Redis 有序集合(Sorted Sets)三、Redis 系统管理3.1 适合全体类型的常用命令3.2 Redis 时间相关命令3.3 Redis 设置相关命令3.4 查询信息四、Redis 高级应用4.1 安全性4.2 主从复制4.3 事务处理4.4 持久化机制4.5 虚拟内存的使用(已废弃→现代替代方案)一、Redis 安装介绍1.1 Redis 简介Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对(key-value)数据库,由 Salvatore Sanfilippo 用 C 语言编写。它不是简单的键值存储——它支持多种数据结构,并提供持久化、主从复制、事务、Lua 脚本等高级特性。核心特点:特性说明纯内存操作数据存储在内存中,读写速度极快(单机 QPS 可达 10 万+)丰富数据类型Strings、Lists、Hashes、Sets、Sorted Sets、Bitmaps、HyperLogLog、Streams持久化支持 RDB(快照)和 AOF(追加日志)两种持久化方式主从复制支持 Master-Slave 架构,实现读写分离和数据冗余单线程模型核心命令单线程执行,避免锁竞争,配合 I/O 多路复用实现高并发原子操作所有命令原子执行,支持事务(MULTI/EXEC)Redis vs Memcached 对比:维度RedisMemcached数据类型丰富(String/List/Hash/Set/ZSet 等)仅 String持久化RDB + AOF无集群原生 Cluster + Sentinel客户端分片线程模型单线程 + I/O 多路复用多线程单 Key 大小512MB1MB适用场景缓存 + 数据库 + 消息队列纯缓存1.2 Redis 的安装在 Ubuntu 24.04 上通过 apt 安装 Redis:# 更新包列表apt-getupdate-qq# 安装 Redis Server 和 CLI 工具DEBIAN_FRONTEND=noninteractiveapt-getinstall-yredis-server redis-tools实操输出:Setting up redis-server (5:7.0.15-1ubuntu0.24.04.4) ... Created symlink /etc/systemd/system/redis.service → /usr/lib/systemd/system/redis-server.service. Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /usr/lib/systemd/system/redis-server.service. Processing triggers for man-db (2.12.0-4build1) ... --- install done ---验证安装版本:redis-server--versionredis-cli--versionRedis server v=7.0.15 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=e53ff17674aa6190 redis-cli 7.0.15安装后目录结构:路径说明/usr/bin/redis-server服务端二进制文件/usr/bin/redis-cli命令行客户端/usr/bin/redis-benchmark基准测试工具/etc/redis/redis.conf配置文件/var/lib/redis/数据持久化目录(dump.rdb、appendonlydir/)/var/log/redis/redis-server.log日志文件/lib/systemd/system/redis-server.servicesystemd 服务单元1.3 Redis 的启动Redis 有三种启动方式:方式一:systemd 服务启动(推荐生产环境)# 启动服务systemctl start redis-server# 设置开机自启systemctlenableredis-server# 查看服务状态systemctl status redis-server实操输出:● redis-server.service - Advanced key-value store Loaded: loaded (/usr/lib/systemd/system/redis-server.service; enabled; preset: enabled) Active: active (running) since Sat 2026-06-20 12:11:43 CST; 6s ago Docs: http://redis.io/documentation, man:redis-server(1) Main PID: 10462 (redis-server) Status: "Ready to accept connections" Tasks: 5 (limit: 18060) Memory: 3.4M (peak: 4.3M) CPU: 41ms CGroup: /system.slice/redis-server.service └─10462 "/usr/bin/redis-server 127.0.0.1:6379"方式二:直接命令行启动(适合开发调试)# 使用默认配置启动redis-server# 指定端口启动(如启动从节点)redis-server--port6380--slaveof127.0.0.16379--daemonizeyes方式三:指定配置文件启动redis-server /etc/redis/redis.conf连接验证:redis-cli PINGPONG基准测试:redis-benchmark-q-n1000-c10-tSET,GET,INCR,LPUSH,RPUSH,SADD,ZADD,HSETSET: 76923.08 requests per second, p50=0.071 msec GET: 83333.34 requests per second, p50=0.071 msec INCR: 76923.08 requests per second, p50=0.071 msec LPUSH: 76923.08 requests per second, p50=0.071 msec RPUSH: 76923.08 requests per second, p50=0.071 msec SADD: 76923.08 requests per second, p50=0.071 msec HSET: 76923.08 requests per second, p50=0.071 msec ZADD: 76923.08 requests per second, p50=0.071 msec7 万+ QPS,延迟 p50 仅 0.071ms。这就是 Redis 的性能。二、Redis 数据类型Redis 不是简单的 key-value 存储——它支持 5 种核心数据类型,每种都有针对性的命令集和适用场景。┌──────────────────────────────────────────────────────────────────┐ │ Redis 5 大核心数据类型 │ ├──────────────┬─────────────────────┬─────────────────────────────┤ │ 数据类型 │ 底层实现 │ 典型应用场景 │ ├──────────────┼─────────────────────┼─────────────────────────────┤ │ String │ SDS / int / embstr │ 缓存、计数器、分布式锁 │ │ List │ quicklist │ 消息队列、最新列表 │ │ Hash │ hashtable / ziplist│ 对象存储、用户信息 │ │ Set │ hashtable / intset │ 标签、共同好友、去重 │ │ Sorted Set │ skiplist + hash │ 排行榜、延时队列、分页 │ └──────────────┴─────────────────────┴─────────────────────────────┘2.1 Redis StringsString 是 Redis 最基本的数据类型,一个 key 对应一个值。虽然是"字符串"类型,但它可以存储字符串、整数、浮点数,甚至二进制数据(图片、视频),最大容量 512MB。基本读写redis-cli SET name'zhangsan'redis-cli SET age20redis-cli SET score88.5redis-cli GET name redis-cli GET age redis-cli GET scoreOK OK OK zhangsan 20 88.5数值操作(INCR / DECR)String 类型的整数值支持原子递增递减,这是 Redis 实现计数器的核心能力:SET counter100INCR counter# 递增 1INCRBY counter10# 递增 10DECR counter# 递减 1DECRBY counter5# 递减 5GET counterOK (integer) 101 (integer) 111 (integer) 110 (integer) 105 "105"原子性:INCR/DECR 是原子操作,多客户端并发执行不会产生竞争条件。这是用 Redis 实现分布式计数器的基础。字符串追加与长度SET greeting'Hello'APPEND greeting' World'# 追加字符串,返回追加后的总长度GET greeting STRLEN greeting# 获取字符串长度OK (integer) 11 "Hello World" (integer) 11批量操作MSET k1 v1 k2 v2 k3 v3# 批量设置MGET k1 k2 k3# 批量获取OK 1) "v1" 2) "v2" 3) "v3"过期时间SET tempkey'will expire'EX30# 30 秒后自动过期TTL tempkey# 查看剩余生存时间(秒)TYPE tempkeyOK (integer) 30 string浮点数递增SET pi3.14INCRBYFLOAT pi0.001# 浮点数递增GET piOK "3.141" "3.141"内部编码优化Redis 会根据值的内容自动选择最优编码,节省内存:SET num12345OBJECT ENCODING num# 整数 → int 编码SET str'hello world'OBJECT ENCODING str# 短字符串 → embstr 编码OK "int" OK "embstr"编码方式触发条件说明int值为整数且 ≤ long 范围直接存为 long,8 字节embstr字符串 ≤ 44 字节SDS 与 redisObject 连续分配,一次 mallocraw字符串 44 字节SDS 与 redisObject 分开分配,两次 malloc2.2 Redis ListsList 是有序的字符串列表,按插入顺序排序,支持在头部(LPUSH)和尾部(RPUSH)插入元素。底层用 quicklist(双向链表 + ziplist 的混合体)实现。入队与出队DEL