Skip to content

Redis

1. 简介

Redis 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。

2. 安装

2.1 Linux-CentOS

在 CentOS 系统上安装 Redis 可以通过多种方式,以下是两种常见的安装方法:

2.1.1 使用包管理器(推荐)

sh
# 更新包管理器
sudo yum update

# 安装 Redis
sudo yum install redis

# 启动 Redis 服务
sudo systemctl start redis

# 设置 Redis 开机自启
sudo systemctl enable redis

# 检查 Redis 服务状态
sudo systemctl status redis

2.1.2 编译安装

sh
# 安装依赖
sudo yum groupinstall "Development Tools"
sudo yum install -y tcl

# 下载 Redis 源码
wget http://download.redis.io/releases/redis-7.0.0.tar.gz

# 解压源码
tar xzf redis-7.0.0.tar.gz

# 进入源码目录
cd redis-7.0.0

# 编译
sudo make

# 安装
sudo make install

# 创建配置目录
sudo mkdir -p /etc/redis

# 复制配置文件
sudo cp redis.conf /etc/redis/

2.2 Windows

bash
# 1. 下载 Redis Windows 版本
# 推荐从 GitHub 下载:https://github.com/tporadowski/redis/releases
# 或者从阿里云盘下载:https://www.alipan.com/s/nPGuvvs3YB7

# 2. 安装 Redis
# 双击下载的 MSI 文件,按照向导完成安装

# 3. 启动 Redis 服务
# 通过服务管理器启动 Redis 服务,或者使用命令:
redis-server --service-start

# 4. 停止 Redis 服务
redis-server --service-stop

# 5. 卸载 Redis 服务
redis-server --service-uninstall

2.3 Docker

bash
# 拉取 Redis 镜像
docker pull redis

# 运行 Redis 容器
docker run --name myredis -d -p 6379:6379 redis

# 进入 Redis 容器
docker exec -it myredis /bin/bash

# 在容器中使用 Redis 客户端
redis-cli

3. 配置

3.1 配置文件位置

  • Linux:默认配置文件位于 /etc/redis/redis.conf
  • Windows:默认配置文件位于 C:\Program Files\Redis\redis.windows.conf
bash
# 查找 Redis 配置文件
find / -name redis.conf 2>/dev/null

3.2 常用配置选项

配置项说明默认值
bind设置 Redis 监听的 IP 地址127.0.0.1
port设置 Redis 监听的端口号6379
requirepass设置 Redis 访问密码
protected-mode是否启用保护模式yes
daemonize是否以守护进程方式运行no
logfile日志文件路径""(标准输出)
databases数据库数量16

3.3 配置外网访问

要允许外部访问 Redis,需要进行以下配置:

bash
# 1. 编辑配置文件
sudo vi /etc/redis/redis.conf

# 2. 修改绑定地址
# 将 bind 127.0.0.1 改为
bind 0.0.0.0

# 3. 禁用保护模式
protected-mode no

# 4. 可选:设置访问密码
requirepass your_secure_password

# 5. 重启 Redis 服务
sudo systemctl restart redis

# 6. 配置防火墙
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload

4. 常用命令

4.1 连接与管理

bash
# 连接本地 Redis
redis-cli

# 连接远程 Redis
redis-cli -h host -p port -a password

# 测试连接
PING
# 输出:PONG

# 查看服务器信息
INFO

# 查看客户端连接
CLIENT LIST

4.2 字符串命令

  • SET key value: 设置指定键的值。
  • GET key: 获取指定键的值。
  • DEL key: 删除指定的键。
  • EXISTS key: 检查指定的键是否存在。

示例:

bash
# 设置键为 "mykey" 的值为 "Hello, Redis!"
SET mykey "Hello, Redis!"

# 获取键为 "mykey" 的值
GET mykey
# 输出:Hello, Redis!

# 检查键为 "mykey" 是否存在,返回 1 表示存在,0 表示不存在
EXISTS mykey
# 输出:1

# 删除键为 "mykey"
DEL mykey

哈希命令

  • HSET key field value: 在哈希中设置字段的值。
  • HGET key field: 获取哈希中指定字段的值。
  • HMSET key field value [field value ...]: 在哈希中设置多个字段的值。
  • HMGET key field [field ...]: 获取哈希中多个字段的值。

示例:

bash
# 将哈希 "myhash" 中字段 "name" 的值设置为 "Alice"
HSET myhash name "Alice"

# 获取哈希 "myhash" 中字段 "name" 的值
HGET myhash name
# 输出:Alice

# 批量设置哈希 "myhash" 中多个字段的值
HMSET myhash age 20 gender female

# 批量获取哈希 "myhash" 中多个字段的值
HMGET myhash name age gender
# 输出:["Alice", "20", "female"]

4.3 列表命令

bash
# 将一个或多个值推入列表的左侧
LPUSH key value [value ...]

# 将一个或多个值推入列表的右侧
RPUSH key value [value ...]

# 从列表的左侧弹出一个值
LPOP key

# 从列表的右侧弹出一个值
RPOP key

# 获取列表指定范围内的元素
LRANGE key start stop

# 示例
LPUSH mylist "world" "hello"
RPUSH mylist "Redis"
LPOP mylist  # 输出:hello
RPOP mylist  # 输出:Redis
LRANGE mylist 0 -1  # 输出:["world"]

4.4 集合命令

bash
# 将一个或多个成员添加到集合中
SADD key member [member ...]

# 获取集合中的所有成员
SMEMBERS key

# 检查成员是否在集合中
SISMEMBER key member

# 获取集合的大小
SCARD key

# 示例
SADD myset "apple" "banana"
SMEMBERS myset  # 输出:["apple", "banana"]
SISMEMBER myset "apple"  # 输出:1
SCARD myset  # 输出:2

4.5 有序集合命令

bash
# 将一个或多个成员添加到有序集中
ZADD key score member [score member ...]

# 获取有序集中指定范围的成员
ZRANGE key start stop [WITHSCORES]

# 获取有序集中指定分数范围的成员
ZRANGEBYSCORE key min max [WITHSCORES]

# 获取成员的分数
ZSCORE key member

# 示例
ZADD mysortedset 90 "Alice" 80 "Bob"
ZRANGE mysortedset 0 -1 WITHSCORES  # 输出:["Bob", "80", "Alice", "90"]
ZRANGEBYSCORE mysortedset 80 90  # 输出:["Bob", "Alice"]
ZSCORE mysortedset "Alice"  # 输出:"90"

4.6 哈希命令

bash
# 设置哈希字段的值
HSET key field value

# 获取哈希字段的值
HGET key field

# 设置多个哈希字段的值
HMSET key field1 value1 field2 value2

# 获取多个哈希字段的值
HMGET key field1 field2

# 获取哈希的所有字段和值
HGETALL key

# 示例
HSET myhash name "Alice"
HMSET myhash age 20 gender female
HGETALL myhash  # 输出:["name", "Alice", "age", "20", "gender", "female"]

5. 配置文件示例

conf
# Redis 配置文件示例

# 监听地址和端口
bind 0.0.0.0  # 监听所有 IP 地址
port 6379

# 连接设置
tcp-backlog 511
timeout 0
tcp-keepalive 300

# 日志设置
logfile "/var/log/redis/redis.log"
loglevel notice

# 数据库设置
databases 16

# 快照持久化设置
save 900 1  # 900秒内有1个键变更则保存
save 300 10  # 300秒内有10个键变更则保存
save 60 10000  # 60秒内有10000个键变更则保存
stop-writes-on-bgsave-error yes

# AOF 持久化设置
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no

# 安全设置
requirepass "your_secure_password"

# 其他设置
maxclients 10000
maxmemory 2gb
maxmemory-policy allkeys-lru

6. 最佳实践

  1. 设置密码保护:始终为 Redis 实例设置强密码
  2. 限制访问:通过防火墙和 bind 配置限制仅允许受信任的 IP 访问
  3. 启用持久化:根据需求选择 RDB 或 AOF 持久化方式
  4. 设置内存限制:使用 maxmemorymaxmemory-policy 配置内存使用策略
  5. 监控性能:定期使用 INFO 命令检查 Redis 性能指标
  6. 使用连接池:在应用程序中使用 Redis 连接池管理连接
  7. 避免大键:将大数据拆分为多个小键,避免阻塞 Redis
  8. 定期备份:定期备份 Redis 数据文件

7. 学习资源

最近更新