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
SameSite Cookie 属性如何防止 CSRF 攻击?SameSite Cookie 属性是防御 CSRF 攻击的重要机制,它控制 Cookie 在跨站请求中的发送行为。
## SameSite 属性概述
SameSite 是 Cookie 的一个属性,用于指示浏览器是否应该在跨站请求中发送该 Cookie。它有三个可选值:`Strict`、`Lax` 和 `None`。
## 属性值详解
### 1. SameSite=Strict
**行为**:
- 只在同站请求中发送 Cookie
- 跨站请求(包括导航)都不会发送 Cookie
**适用场景**:
- 银行、支付等高安全性应用
- 敏感操作(如转账、修改密码)
- 不需...
服务端 · 2月19日 16:47
Scrapy 的配置文件有哪些重要设置?Scrapy 提供了丰富的配置选项来控制爬虫的行为。配置文件 settings.py 是 Scrapy 项目的核心配置文件,包含了所有可用的配置项。常用的配置包括:BOT_NAME(爬虫名称)、SPIDER_MODULES(爬虫模块路径)、NEWSPIDER_MODULE(新爬虫模块)、ROBOTSTXT_OBEY(是否遵守 robots.txt)、CONCURRENT_REQUESTS(并发请求数)、DOWNLOAD_DELAY(下载延迟)、USER_AGENT(用户代理)、DEFAULT_REQUEST_HEADERS(默认请求头)、COOKIES_ENABLED(是否启用 cook...
服务端 · 2月19日 14:28
