主题
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 redis2.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-uninstall2.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-cli3. 配置
3.1 配置文件位置
- Linux:默认配置文件位于
/etc/redis/redis.conf - Windows:默认配置文件位于
C:\Program Files\Redis\redis.windows.conf
bash
# 查找 Redis 配置文件
find / -name redis.conf 2>/dev/null3.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 --reload4. 常用命令
4.1 连接与管理
bash
# 连接本地 Redis
redis-cli
# 连接远程 Redis
redis-cli -h host -p port -a password
# 测试连接
PING
# 输出:PONG
# 查看服务器信息
INFO
# 查看客户端连接
CLIENT LIST4.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 # 输出:24.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-lru6. 最佳实践
- 设置密码保护:始终为 Redis 实例设置强密码
- 限制访问:通过防火墙和
bind配置限制仅允许受信任的 IP 访问 - 启用持久化:根据需求选择 RDB 或 AOF 持久化方式
- 设置内存限制:使用
maxmemory和maxmemory-policy配置内存使用策略 - 监控性能:定期使用
INFO命令检查 Redis 性能指标 - 使用连接池:在应用程序中使用 Redis 连接池管理连接
- 避免大键:将大数据拆分为多个小键,避免阻塞 Redis
- 定期备份:定期备份 Redis 数据文件