Redis 的主从复制、哨兵模式和集群模式有什么区别?如何选择?Redis 提供了三种集群方案:主从复制、哨兵模式和集群模式,它们各有不同的适用场景和特点。
## 1. 主从复制(Master-Slave Replication)
**工作原理**:
主从复制是指将一个 Redis 节点作为主节点(Master),其他节点作为从节点(Slave)。主节点负责写操作,从节点负责读操作。主节点将数据变更同步到从节点。
**特点**:
- **读写分离**:主节点处理写操作,从节点处理读操作,提高系统吞吐量
- **数据备份**:从节点是主节点的完整副本,提供数据冗余
- **故障恢复**:主节点故障时,需要手动将从节点提升为主节点
**配置方式*...
服务端 · 2月19日 13:29
Redis 的 RDB 和 AOF 持久化有什么区别?如何选择?Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append Only File),它们各有优缺点,也可以同时使用。
## RDB 持久化
**工作原理**:
RDB 是在指定的时间间隔内生成数据集的时间点快照。Redis 会 fork 一个子进程,将内存中的数据写入到一个临时文件中,然后用这个临时文件替换旧的 RDB 文件。
**优点**:
1. **文件紧凑**:RDB 文件是压缩的二进制文件,体积小,适合备份和灾难恢复
2. **恢复速度快**:RDB 文件的恢复速度比 AOF 快,因为不需要重新执行命令
3. **对性能影响小**:RDB...
服务端 · 2月19日 13:28
Redis 支持哪些数据结构?它们的使用场景和底层实现是什么?Redis 支持多种数据结构,每种数据结构都有其特定的使用场景和底层实现:
## 1. String(字符串)
**底层实现**:使用 SDS(Simple Dynamic String)实现,类似于 C 语言的字符串,但增加了长度信息和空间预分配。
**使用场景**:
- 缓存用户信息、配置信息
- 计数器(INCR、DECR 命令)
- 分布式锁
- Session 存储
**常用命令**:SET、GET、INCR、DECR、MGET、MSET、SETEX 等
## 2. Hash(哈希)
**底层实现**:当元素较少时使用 ziplist(压缩列表),当元素较多时使用 ...
服务端 · 2月19日 13:28
Redis 是什么?它有哪些主要特点?Redis 是一个基于内存的键值存储数据库,它的主要特点包括:
1. **高性能**:Redis 将所有数据存储在内存中,读写速度极快,单机可以达到每秒 10 万次以上的操作。
2. **丰富的数据结构**:Redis 支持多种数据类型,包括 String(字符串)、Hash(哈希)、List(列表)、Set(集合)、ZSet(有序集合)、Bitmap(位图)、HyperLogLog(基数统计)、Geo(地理位置)等。
3. **持久化支持**:Redis 提供了两种持久化方式:
- RDB(Redis Database):在指定的时间间隔内生成数据集的时间点快照
- ...
服务端 · 2月19日 13:28
Redis 如何进行安全配置?有哪些安全最佳实践?Redis 的安全配置是保护 Redis 服务器免受攻击的重要措施,需要从多个维度进行安全加固。
## 1. 网络安全
### 绑定监听地址
**问题描述**:
Redis 默认绑定所有网络接口,容易被攻击者扫描和攻击。
**解决方案**:
```bash
# 配置文件 redis.conf
bind 127.0.0.1 10.0.0.1
# 只监听本地和内网接口
# 避免绑定 0.0.0.0
```
### 使用防火墙
**问题描述**:
Redis 端口对外开放,容易被攻击者访问。
**解决方案**:
```bash
# 使用 iptables 限制访问
iptabl...
服务端 · 2月19日 13:51
Redis 如何进行监控和运维?有哪些关键指标和工具?Redis 的监控和运维是保证 Redis 稳定运行的重要环节,需要从多个维度进行监控和管理。
## 1. Redis 监控指标
### 基础指标
**内存使用情况**:
```bash
# 查看内存使用情况
INFO memory
# 关键指标
used_memory:1024000 # 已使用内存
used_memory_human:1.00M # 已使用内存(人类可读)
used_memory_rss:2048000 # 操作系统分配的内存
used_memory_rss_human:2.00M # 操...
服务端 · 2月19日 13:50
Redis 的过期策略和内存淘汰机制是什么?如何选择合适的策略?Redis 的过期策略和内存淘汰机制是 Redis 内存管理的核心内容,对于保证 Redis 的稳定性和性能至关重要。
## 1. 过期策略
Redis 有三种过期策略:定时删除、惰性删除和定期删除。
### 定时删除(Timed Expiration)
**工作原理**:
在设置 key 的过期时间时,创建一个定时器,当过期时间到达时,立即删除 key。
**优点**:
- 内存友好:过期 key 会被及时删除,不会占用内存
- 保证过期 key 不会占用内存
**缺点**:
- CPU 不友好:如果有过期 key,需要创建大量的定时器,消耗 CPU 资源
- 影响性能:定...
服务端 · 2月19日 13:32
Redis 缓存穿透、缓存击穿、缓存雪崩有什么区别?如何解决?Redis 缓存策略是使用 Redis 作为缓存时的核心问题,需要解决缓存穿透、缓存击穿、缓存雪崩等问题,同时需要设计合理的缓存更新策略。
## 1. 缓存穿透
**问题描述**:
缓存穿透是指查询一个不存在的数据,由于缓存中没有这个数据,请求会直接打到数据库。如果大量这样的请求,会对数据库造成巨大压力。
**解决方案**:
**方案一:缓存空对象**
```java
public User getUserById(Long id) {
User user = redis.get("user:" + id);
if (user != null) {
...
服务端 · 2月19日 13:30
Redis 有哪些常见的应用场景?如何实现这些场景?Redis 凭借其高性能和丰富的数据结构,在实际项目中有着广泛的应用场景。以下是 Redis 的主要应用场景及实现方式。
## 1. 缓存
### 应用场景
- **热点数据缓存**:缓存频繁访问的数据,减轻数据库压力
- **查询结果缓存**:缓存复杂查询的结果,提高查询性能
- **页面缓存**:缓存页面渲染结果,减少服务器计算
### 实现方式
```java
// 读取缓存
public User getUserById(Long id) {
String key = "user:" + id;
User user = redis.get(key);
...
服务端 · 2月19日 13:49
Redis 的底层实现原理是什么?包括哪些核心数据结构和机制?Redis 的底层实现原理是理解 Redis 高性能的关键,主要包括数据结构、网络模型、内存管理等核心内容。
## 1. SDS(Simple Dynamic String)
**基本概念**:
SDS 是 Redis 中字符串的底层实现,是对 C 语言字符串的封装。
**SDS 结构**:
```c
struct sdshdr {
int len; // 字符串长度
int free; // 剩余可用空间
char buf[]; // 字节数组
};
```
**SDS 优势**:
1. **O(1) 时间复杂度获取字符...
服务端 · 2月19日 13:33
