一篇文章带你了解Redis的安装与使用

1.1 Redis 简介

1.1.1 Redis 是什么?

RedisRemote Dictionary Server)是一个开源的基于内存、支持多种数据结构的高性能 Key-Value 数据库,由 Salvatore Sanfilippo(又名 antirez) 于 2009 年创建,后由 Redis Labs(现 Redis Inc.)接手维护。
Redis 的最大特点就是:数据全部存储在内存中,磁盘只用于持久化,因此读写速度极快,常被称为 "内存数据库"。


1.1.2 Redis 的核心特性

特性

说明

基于内存,持久化

Redis 所有数据都在内存中进行操作,且支持将数据同步到磁盘(RDB / AOF)。

丰富的数据类型

支持字符串、哈希、列表、集合、有序集合、位图、HyperLogLog、地理位置、流等结构。

原子性操作

所有单条 Redis 命令都是原子操作,多条命令可用事务(MULTI/EXEC)或 Lua 脚本实现原子性。

高性能

每秒可执行数十万次读写操作,适用于高并发场景。

多语言支持

提供官方/社区驱动支持几乎所有主流语言(Python、Java、C#、Go、C++、PHP、Node.js 等)。

多种部署方式

支持单机、主从(Replication)、哨兵(Sentinel)和集群(Cluster)部署模式。

Pub/Sub 模式

内建发布/订阅系统,可以用于构建轻量级的消息通知系统。


1.1.3 Redis 的数据类型

类型

描述

示例用途

String(字符串)

最基本的类型,支持整数、浮点数、字符串

缓存、计数器、令牌桶等

Hash(哈希)

类似 Python 字典,field -> value 映射

用户信息存储

List(列表)

有序链表,支持两端插入、弹出

消息队列、任务队列

Set(集合)

无序、不重复元素集合

标签、抽奖系统

Sorted Set(有序集合)

带分数的集合,可按分数排序

排行榜、积分系统

Bitmap(位图)

使用位进行存储

活跃用户统计、签到系统

HyperLogLog

统计不同元素个数,近似但高效

UV(独立访客)统计

Geo(地理)

存储经纬度和搜索范围

附近的人、地图应用

Stream(流)

类似 Kafka 的消息流结构

日志收集、数据管道


1.1.4 Redis 应用场景

Redis 的速度与数据结构优势使它广泛应用于以下场景:

场景

用法

缓存系统

将热点数据缓存在 Redis 中,减轻数据库压力,提高响应速度(如:用户信息缓存、商品详情缓存)

计数器系统

实现点赞、阅读数、访问量等功能,使用字符串的自增操作

排行榜系统

使用有序集合(Sorted Set)构建游戏积分榜、电商销量榜等

Session 管理

Web 应用的会话信息存储在 Redis 中,支持分布式架构

消息队列

使用 List(RPUSH + LPOP)或 Stream 构建异步任务队列

分布式锁

利用 SETNX、Lua 脚本或 Redlock 算法实现高可靠分布式锁

发布/订阅系统

基于 Redis 的 Pub/Sub 构建简易消息通知服务

实时数据分析

使用位图、HyperLogLog、流等结构进行高性能数据统计


1.1.5 Redis 的架构设计简述

  • 单线程模型:Redis 使用单线程模型处理客户端请求(主线程),避免了线程上下文切换带来的性能开销。数据操作都是原子的。
  • IO 多路复用:内部使用 epoll(Linux)等机制来处理大量并发请求,保证高吞吐。
  • 持久化机制
    • RDB(快照方式):定期将内存数据快照写入磁盘,恢复快。
    • AOF(日志方式):记录每一条写命令,可以实现更高的数据安全性。
  • 复制机制:一主多从,支持数据同步,增强可用性。
  • 哨兵机制:自动监控 Redis 实例的健康状态,实现自动故障转移。
  • 集群机制:Redis Cluster 实现水平扩展,分布式存储,适合大规模数据和高并发场景。

1.1.6 Redis 与其他数据库的对比

比较项

Redis

MySQL

MongoDB

Memcached

类型

内存数据库

关系型数据库

文档型数据库

内存缓存

数据结构

多种结构

表结构

BSON 文档

仅字符串

持久化

RDB / AOF

支持

支持

不支持

查询能力

键值查询,支持部分复杂操作

SQL

灵活文档查询

键值查询

并发处理

单线程+IO复用

多线程

多线程

多线程

分布式

Cluster 支持

需借助中间件

原生支持

不支持

应用场景

缓存、计数器、排行榜等

主数据存储

JSON存储、日志等

临时缓存

1.2 Redis 下载与安装

1.2.1 Redis 下载

Redis 的官方源码托管在 GitHub,也可以从官网下载最新稳定版本。

官网:https://redis.io

中文网:Redis中文网
GitHub 仓库https://github.com/redis/redis

Redis安装包分为windows版和Linux版:

你可以使用如下命令下载源码:

wget http://download.redis.io/releases/redis-7.2.1.tar.gz

替换版本号可获取其他版本。

1.2.2 Redis 安装( Linux )

  1. 解压源码
tar -xzf redis-7.2.1.tar.gz
cd redis-7.2.1
  1. 编译 Redis

Redis 使用 make 工具编译:

make
make test   # 可选步骤:运行测试用例
  1. 安装 Redis 到系统路径
make install

默认会安装以下几个可执行文件到 /usr/local/bin

  • redis-server:Redis 服务端
  • redis-cli:命令行客户端
  • redis-benchmark:性能测试工具
  • redis-check-rdb:检查 RDB 文件
  • redis-check-aof:检查 AOF 文件

注意:Redis 7.x 版本之后对 GCC 要求较高,请确保使用较新版本的 GCC 编译器(推荐 GCC 9+)。

1.2.3 Redis 安装( Windows)

Redis的Windows版属于绿色软件,直接解压即可使用

1.3 Redis 服务启动与停止(Windows 版)

虽然 Redis 官方并不再维护 Windows 原生版本,但社区提供了稳定版本,依然可以在 Windows 上开发和测试。


1.3.1 Redis 在 Windows 上的启动方式

启动 Redis 服务端:
redis-server.exe redis.windows.conf

你也可以直接运行 redis-server.exe 来启动默认配置(但推荐加载配置文件)。

启动后会看到日志输出如下:

[xxx] Ready to accept connections

表示服务已成功启动。

注意:
  • 如果你双击 redis-server.exe 启动,会看到黑色窗口,请不要关闭,否则 Redis 服务也会关闭。
  • 如需后台运行,可以通过将其安装为 Windows 服务(见下方扩展)。

1.3.2 Redis 客户端连接命令(Windows)

Redis 提供命令行客户端工具 redis-cli.exe

连接本地 Redis:

redis-cli.exe

连接远程 Redis:

redis-cli.exe -h <host> -p <port> -a <password>

例子:

redis-cli.exe -h 127.0.0.1 -p 6379

连接后将进入交互模式:

127.0.0.1:6379> set name one
OK
127.0.0.1:6379> get name
"one"

1.3.3 修改 Redis 配置文件(Windows)

Redis 的配置文件在 Windows 版本中名为 redis.windows.conf,是一个普通的文本文件,你可以用记事本或 VS Code 打开它。

以下是几个常用的配置项说明(建议修改):

配置项

功能

示例

port

设置监听端口

port 6379

requirepass

设置 Redis 访问密码

requirepass yourpassword

daemonize

Windows 无效

不修改

bind

绑定 IP(Windows 中无效)

无需设置

appendonly

是否开启 AOF 持久化

appendonly yes

dir

持久化文件保存目录

dir ./data/

修改配置后,重新用该配置文件启动 Redis:

redis-server.exe redis.windows.conf

1.3.4 Redis 客户端图形工具

Another Redis Desktop Manager

官网:Another Redis Desktop Manager | A faster, better and more stable redis desktop manager [GUI client], compatible with Linux, Windows, Mac. What's more, it won't crash when loading massive keys.

1.4 Redis 服务启动与停止(Linux 端)

环境准备说明

默认你已经:

  • 安装了 Redis(一般通过源码编译或 yum install redis 安装)
  • 配置文件路径通常为:/etc/redis.conf
  • Redis 命令工具位于 /usr/local/bin/usr/bin

1.4.1 Redis 服务启动命令

方法一:使用命令直接启动 Redis

最基本的启动 Redis 命令如下:

redis-server /etc/redis.conf

或者使用默认配置(不推荐):

redis-server
方法二:作为系统服务启动

如果你通过系统包管理工具安装(如 yum / apt),Redis 会注册为系统服务:

# 启动 Redis 服务
sudo systemctl start redis

# 设置开机自启
sudo systemctl enable redis

# 查看运行状态
sudo systemctl status redis

# 停止 Redis 服务
sudo systemctl stop redis

# 重启 Redis 服务
sudo systemctl restart redis

有些发行版服务名可能是 redis-serverredis_6379,可以用 systemctl list-units | grep redis 查看。


1.4.2 客户端连接命令

Redis 提供了命令行工具 redis-cli,用于连接 Redis 服务。

连接本地 Redis:
redis-cli

连接成功后会进入交互式终端:

127.0.0.1:6379> set name redis
OK
127.0.0.1:6379> get name
"redis"
连接远程 Redis:
redis-cli -h <hostname> -p <port> -a <password>

例如:

redis-cli -h 192.168.1.100 -p 6379 -a 123456

1.4.3 修改 Redis 配置文件

Redis 的主配置文件通常在:

/etc/redis.conf

或者你自己安装的目录下,如:

/usr/local/redis/redis.conf
常用配置项解释:

配置项

描述

示例

port

Redis 监听端口

port 6379

bind

绑定主机 IP

bind 127.0.0.1

(仅本地)或 0.0.0.0

(全部IP)

requirepass

设置访问密码

requirepass yourpassword

daemonize

是否后台运行

daemonize yes

(Linux 上建议开启)

dir

数据持久化文件存储目录

dir /var/lib/redis

appendonly

开启 AOF 持久化

appendonly yes

修改配置文件后重启 Redis:
sudo systemctl restart redis

或者(如果是手动启动的):

pkill redis-server
redis-server /etc/redis.conf

扩展:使用后台运行方式启动 Redis(daemonize)

在实际部署中,我们希望 Redis 能后台运行。

修改配置文件:

daemonize yes

然后运行:

redis-server /etc/redis.conf

此时你可以用:

ps -ef | grep redis

来查看后台进程是否存在。

如果不想用 systemd 启动,也可以用 nohup

nohup redis-server /etc/redis.conf > /var/log/redis.log 2>&1 &

总结命令一览(Linux)

操作

命令

启动 Redis(配置文件)

redis-server /etc/redis.conf

启动 Redis(系统服务)

sudo systemctl start redis

停止 Redis

sudo systemctl stop redis

查看状态

sudo systemctl status redis

启动客户端

redis-cli

连接远程 Redis

redis-cli -h IP -p PORT -a 密码

修改配置

编辑 redis.conf

文件

后台运行 Redis

配置 daemonize yes

或使用 nohup

2. Redis 数据类型

Redis 一大优势就是支持多种灵活且高效的数据结构,不仅仅是简单的键值对存储。

2.1 五种常用数据类型介绍

类型

英文名

说明

常用应用场景

字符串

String

最基本的数据类型,存储文本或数字

缓存、计数器、会话信息等

哈希

Hash

键值对集合,适合存储对象

用户信息、配置项

列表

List

链表结构,有序可重复

消息队列、任务列表

集合

Set

无序不重复元素集合

标签系统、去重功能

有序集合

Sorted Set

每个元素有一个分数,自动排序

排行榜、带权重排序


2.2 各种数据类型特点

类型

特点

优点

缺点

String

存储最灵活的数据类型(可以是整数、浮点、JSON)

操作简单、效率高

单值结构,不适合复杂结构

Hash

类似 Python 字典,支持字段操作

占用内存小,结构清晰

适合小量字段,不宜嵌套

List

有序、允许重复,支持栈和队列操作

支持从两端插入/删除,适合消息队列

长列表插入/查询性能下降

Set

元素唯一,无序集合

自动去重,快速查找/交集/差集

无序,不支持排序

ZSet

有序集合,按分数排序

排行榜、分页支持、按权重统计

写入比 Set 更耗资源(维护排序)


3. Redis 常用命令

3.1 字符串操作命令

# 设置字符串键值
SET key value

# 获取键对应的值
GET key

# 设置带过期时间的键(单位秒)
SETEX key seconds value

# 自增 / 自减
INCR key
DECR key

# 追加字符串内容
APPEND key value

# 设置多个键值对
MSET key1 val1 key2 val2 ...

# 获取多个键的值
MGET key1 key2 ...

# 设置值并返回旧值
GETSET key new_value

常见场景:缓存用户信息、登录状态、计数器等。


3.2 哈希操作命令(Hash)

# 设置哈希字段值
HSET user:1 name "Tom"

# 获取字段值
HGET user:1 name

# 设置多个字段值
HMSET user:1 name "Tom" age 20

# 获取多个字段
HMGET user:1 name age

# 获取所有字段和值
HGETALL user:1

# 判断字段是否存在
HEXISTS user:1 age

# 删除字段
HDEL user:1 age

# 获取字段数
HLEN user:1

# 自增字段(数字类型)
HINCRBY user:1 age 1

常见场景:存储对象型数据如用户信息、商品配置等。


3.3 列表操作命令(List)

# 从左/右推入元素(插入)
LPUSH mylist value
RPUSH mylist value

# 从左/右弹出元素(删除)
LPOP mylist
RPOP mylist

# 获取指定范围内元素(分页)
LRANGE mylist start stop

# 获取列表长度
LLEN mylist

# 设置指定索引的值
LSET mylist index value

# 删除指定值的元素
LREM mylist count value

# 截取保留指定范围(修剪列表)
LTRIM mylist start stop

常见场景:消息队列、时间线、评论列表等。


3.4 集合操作命令(Set)

# 添加元素
SADD myset value1 value2

# 移除元素
SREM myset value

# 判断是否存在
SISMEMBER myset value

# 获取所有元素
SMEMBERS myset

# 获取元素数量
SCARD myset

# 随机获取元素
SRANDMEMBER myset [count]

# 求交集、并集、差集
SINTER set1 set2
SUNION set1 set2
SDIFF set1 set2

常见场景:标签系统、共同好友、兴趣匹配、权限控制。


3.5 有序集合操作命令(Sorted Set / ZSet)

# 添加元素,带分数(score)
ZADD rank 100 "Tom" 200 "Jerry"

# 获取元素分数
ZSCORE rank "Tom"

# 增加分数
ZINCRBY rank 10 "Tom"

# 按分数排序返回元素
ZRANGE rank 0 -1 WITHSCORES

# 按分数从高到低排序
ZREVRANGE rank 0 -1 WITHSCORES

# 获取指定成员排名(从 0 开始)
ZRANK rank "Tom"
ZREVRANK rank "Tom"

# 按分数范围查询
ZRANGEBYSCORE rank 50 150

# 删除元素
ZREM rank "Tom"

常见场景:排行榜(如游戏分数)、热度值统计、动态权重排序。


3.6 通用命令(适用于所有类型)

# 检查键是否存在
EXISTS key

# 删除键
DEL key

# 设置键过期时间(秒)
EXPIRE key 60

# 查看剩余时间(秒)
TTL key

# 查看类型
TYPE key

# 获取所有键(慎用,线上不推荐)
KEYS *

# 重命名键
RENAME key new_key

# 持久化键(移除过期时间)
PERSIST key

建议KEYS 命令在生产环境慎用,可使用 SCAN 替代(更安全)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值