Redis 缓存实战:网站性能翻倍的秘密
## 缓存的意义
你的网站每次请求都要查数据库、渲染模板,大量重复计算。如果 1000 个用户看同一篇文章,你做了 1000 次相同的数据库查询。加一层缓存,第一次查完存起来,后面 999 次直接返回,性能提升立竿见影。
## 快速部署 Redis
```yaml
services:
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
ports:
- "127.0.0.1:6379:6379"
volumes:
- ./data:/data
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
```
## PHP 中使用 Redis
```php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'article:' . $articleId;
$article = $redis->get($cacheKey);
if ($article === false) {
$article = $db->query("SELECT * FROM articles WHERE id = ?", [$articleId]);
$redis->setex($cacheKey, 3600, serialize($article));
}
return unserialize($article);
```
## Python 中使用 Redis
```python
import redis, json
r = redis.Redis(host='localhost', port=6379, db=0)
def get_article(article_id):
cache_key = f'article:{article_id}'
cached = r.get(cache_key)
if cached:
return json.loads(cached)
article = db.query(f"SELECT * FROM articles WHERE id={article_id}")
r.setex(cache_key, 1800, json.dumps(article))
return article
```
## 常见问题与解决
**缓存穿透**:查询不存在的数据,缓存没有,每次都打 DB。解决:缓存空值,设置短过期时间。
**缓存击穿**:热点 key 过期瞬间大量请求打 DB。解决:加互斥锁,只让一个请求去加载数据。
**缓存雪崩**:大量 key 同时过期。解决:给过期时间加随机偏移。
## Redis 不只是缓存
除了缓存,Redis 还能做:Session 存储、分布式锁、消息队列(Stream)、计数器/排行榜、地理位置(GEO)。
装一个 Redis,你的网站性能至少翻一倍。
💬 暂无评论