一、为什么使用 Redis

商城首页访问量通常极高,若直接从数据库获取首页菜单和大广告位信息,会给数据库带来巨大压力。因此,这类高频访问数据需从缓存获取,而 Redis 是缓存技术的主流选择之一。

主流缓存技术对比:

缓存技术 核心特点
Memcached 多线程
Redis 单线程(高性能)
ehcache (逐步淘汰)

二、Redis 基础认知

2.1 什么是 Redis

Redis 是用 C 语言开发的开源高性能键值对(key-value)数据库,核心特点是将数据存储在内存中,因此存取速度极快,广泛应用于互联网项目。

2.2 Redis 下载

官方下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz

2.3 Redis 安装(Linux 环境)

2.3.1 安装依赖

Redis 基于 C 语言开发,需先安装编译环境:

yum install gcc-c++
2.3.2 编译安装
  • 解压源码包:
tar -zxvf redis-3.0.0.tar.gz -C /usr/upload/
  • 进入解压目录编译:
cd /usr/upload/redis-3.0.0
make
  • 安装到指定目录:
make install PREFIX=/usr/local/redis

三、Redis 启动与关闭

3.1 前端启动(不推荐)

启动命令
cd /usr/local/redis/bin
./redis-server
缺点

SSH 窗口关闭则 Redis 进程终止,仅适用于临时测试。

关闭方式

直接按ctrl + c终止进程。

3.2 后端启动(生产环境推荐)

  • 拷贝配置文件到安装目录:
cp /usr/upload/redis-3.0.0/redis.conf  /usr/local/redis/bin
  • 修改配置文件,将daemonizeno改为yes
daemonize yes
  • 启动 Redis:
cd /usr/local/redis/bin
./redis-server redis.conf

3.3 通用关闭方式

cd /usr/local/redis/bin
./redis-cli -p 端口号 shutdown
# 示例:关闭6379端口的Redis
./redis-cli -p 6379 shutdown

四、Redis 基本命令

4.1 连接 Redis

./redis-cli -h 127.0.0.1 -p 6379

4.2 核心基础命令

命令 作用 示例
set 设置键值对 set test 123
get 获取键值 get test → 返回 "123"
keys * 查看所有 key keys *
exists 判断 key 是否存在 exists test → 返回 1(存在)/0(不存在)
expire 设置 key 过期时间 expire test 60(60 秒过期)
ttl 查看 key 剩余有效期 ttl test → 返回剩余秒数 /-1(永不过期)/-2(已过期)
clear 清屏 clear

4.3 多数据库操作

Redis 默认提供 16 个数据库(下标 0-15),默认连接 0 号库:

  1. 切换数据库:select 数据库下标(如select 1切换到 1 号库)
  2. 清空当前库:FLUSHDB
  3. 清空所有库:FLUSHALL

注意:Redis 不支持修改数据库名称,仅能通过下标切换。

五、Redis 五大数据类型

5.1 String(字符串)

最基础类型,key-value 键值对形式:

# 赋值
set test 123
# 取值
get test
# 删除
del test
# 自增/自减
incr num  # 数值+1
decr num  # 数值-1

5.2 Hash(哈希)

键值对嵌套,适合存储对象(key-field-value):

# 赋值
hset user name zhangsan
# 取值
hget user name
# 删除
hdel user name

5.3 List(列表)

有序、可重复,基于双向链表实现:

# 左插入(头部)
lpush list a b c d
# 右插入(尾部)
rpush list 1 2 3 4
# 查看列表(0为起始,-1为末尾)
lrange list 0 -1
# 删除指定元素(0表示删除所有匹配项)
lrem list 0 d

5.4 Set(集合)

无序、不可重复:

# 添加元素
sadd set1 a b c c c d
# 查看所有元素
smembers set1
# 删除元素
srem set1 a

5.5 Zset(有序集合)

有序、不可重复,通过分数(score)排序:

# 添加元素(score+值)
zadd zset1 2 a 5 b 1 c 6 d
# 正序查看(带分数)
zrange zset1 0 -1 withscores
# 倒序查看
zrevrange zset1 0 -1
# 删除元素
zrem zset1 a

5.6 数据类型总结

数据类型 核心特点 核心操作
String 单键值对 set/get/del/incr/decr
Hash 键 - 字段 - 值 hset/hget/hdel
List 有序可重复 lpush/rpush/lrange/lrem
Set 无序不可重复 sadd/smembers/srem
Zset 有序不可重复 zadd/zrange/zrevrange/zrem

六、Redis 持久化

Redis 数据默认存储在内存,持久化可将数据同步到硬盘,避免重启 / 宕机数据丢失,支持两种方式:

6.1 RDB 持久化(默认)

原理

通过快照(snapshotting)实现,满足指定条件时自动将内存数据写入硬盘。

核心配置(redis.conf)
save 900 1  # 900秒内1个key修改则快照
save 300 10 # 300秒内10个key修改则快照
save 60 10000 # 60秒内10000个key修改则快照
dir /usr/local/redis/bin  # 快照文件存储路径
dbfilename dump.rdb # 快照文件名
优缺点
  • 优点:数据存取速度快
  • 缺点:宕机时会丢失最后一次快照后的修改(数据完整性不足)

6.2 AOF 持久化

原理

记录所有写操作命令,重启时重新执行命令恢复数据。

开启配置(redis.conf)

conf

appendonly yes # 开启AOF
appendfilename appendonly.aof # AOF文件名
appendfsync everysec # 每秒同步(默认策略)
# appendfsync always  # 每次修改都同步(最安全,性能最差)
# appendfsync no      # 不主动同步(性能最好,数据风险高)
优缺点
  • 优点:数据完整性高
  • 缺点:频繁写磁盘,降低 Redis 存取速度

七、Redis 主从复制(高可用基础)

7.1 主从复制概念

  • 一个主 Redis(master)可挂载多个从 Redis(slave)
  • 主从数据实时同步,master 写入数据自动同步到 slave
  • master 故障时,slave 可提供读服务(默认不可写)
  • 支持级联复制(一个 Redis 可同时是 master 和 slave)

7.2 主从配置

7.2.1 主 Redis 配置

无需特殊配置,保持默认即可。

7.2.2 从 Redis 配置

修改从 Redis 的redis.conf

slaveof 主RedisIP 主Redis端口
# 示例:slaveof 192.168.101.3 6379

7.3 主从复制过程

  1. slave 启动后,向 master 发送sync命令
  2. master 启动后台进程生成 RDB 快照,并缓存期间的写命令
  3. master 将 RDB 文件发送给 slave,slave 加载 RDB 恢复数据
  4. master 将缓存的写命令转发给 slave,保证数据同步

八、Redis 集群搭建(Redis-Cluster)

8.1 集群架构说明

  • 集群至少需 3 个主节点,为保证高可用,每个主节点需 1 个从节点(共 6 个节点)
  • 内置 16384 个哈希槽,key 通过crc16(key) % 16384映射到指定槽位,槽位均匀分配到各主节点
  • 节点间通过 PING-PONG 机制互联,超过半数节点检测到某节点失效则标记为故障

8.2 集群搭建环境(伪分布式)

8.2.1 安装依赖(Ruby)
yum install ruby
yum install rubygems
gem install redis-3.0.0.gem
8.2.2 准备 6 个 Redis 实例(7001-7006 端口)
  • 复制 Redis 实例(以 7001 为例):
mkdir -p /usr/local/redis-cluster
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7001
  • 重复上述操作,创建 redis-7002 至 redis-7006
  • 修改每个实例的redis.conf
    • 修改端口(7001/7002/.../7006)
    • 开启集群模式:cluster-enabled yes
    • 删除dump.rdbappendonly.aof(避免旧数据干扰)
8.2.3 编写启动 / 关闭脚本
启动脚本(start-all.sh)
#!/bin/bash
cd /usr/local/redis-cluster/redis-7001
./bin/redis-server bin/redis.conf
cd ..
cd redis-7002
./bin/redis-server bin/redis.conf
cd ..
cd redis-7003
./bin/redis-server bin/redis.conf
cd ..
cd redis-7004
./bin/redis-server bin/redis.conf
cd ..
cd redis-7005
./bin/redis-server bin/redis.conf
cd ..
cd redis-7006
./bin/redis-server bin/redis.conf
cd ..

赋予执行权限:

chmod 777 start-all.sh

关闭脚本(shutdown-all.sh)

#!/bin/bash
cd /usr/local/redis-cluster
./redis-7001/bin/redis-cli -p 7001 shutdown
./redis-7002/bin/redis-cli -p 7002 shutdown
./redis-7003/bin/redis-cli -p 7003 shutdown
./redis-7004/bin/redis-cli -p 7004 shutdown
./redis-7005/bin/redis-cli -p 7005 shutdown
./redis-7006/bin/redis-cli -p 7006 shutdown

赋予执行权限:

chmod 777 shutdown-all.sh
8.2.4 构建集群(Ruby 脚本)
cd /usr/upload/redis-3.0.0/src
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006

执行后输入yes确认配置,等待集群构建完成。

8.3 集群测试

# 连接集群(-c表示集群模式)
cd /usr/local/redis-cluster/redis-7001/bin
./redis-cli -c -p 7001
# 测试数据写入(自动路由到对应节点)
set name test
get name

8.4 集群常用命令

cluster info  # 查看集群整体信息
cluster nodes # 查看所有节点信息(主从、槽位等)

九、总结

  • Redis 核心优势是内存存储带来的高性能,适用于高频数据缓存场景。
  • 持久化需根据业务平衡性能与数据完整性(RDB/ AOF 可选)。
  • 主从复制解决单点故障,集群(Redis-Cluster)实现水平扩展,满足高并发、高可用需求。

注意:实际生产环境需根据服务器资源调整配置,做好监控与容灾预案。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐