Redis 在 VPS 上的部署与调优
Redis 是内存数据库,快如闪电。缓存、Session、消息队列都能用。
为什么 Redis
- 快 — 内存操作,毫秒级响应
- 丰富 — 字符串、哈希、列表、集合、有序集合
- 持久化 — 数据可落盘
- 集群 — 主从、哨兵、Cluster
部署
version: "3.8"
services:
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- ./redis-data:/data
command: redis-server --appendonly yes
networks:
- app
networks:
app:
driver: bridge
--appendonly yes 开启持久化。
配置
command: >
redis-server
--maxmemory 512mb
--maxmemory-policy allkeys-lru
--appendonly yes
- maxmemory — 最大内存
- maxmemory-policy — 内存淘汰策略
- appendonly — 持久化
客户端连接
docker exec -it redis redis-cli
测试
ping
PONG
设值
set mykey hello
取值
get mykey
"hello"
常见用法
缓存
import redis
r = redis.Redis(host='redis', port=6379)
查缓存
val = r.get('user:1')
if not val:
val = db.query('SELECT * FROM users WHERE id=1')
r.setex('user:1', 3600, json.dumps(val))
Session
from flask import Flask, session
from flask_redis import FlaskRedis
app = Flask(__name__)
app.config['REDIS_URL'] = 'redis://redis:6379/0'
redis_store = FlaskRedis(app)
分布式锁
lock = r.lock('mylock', timeout=10)
if lock.acquire(blocking=False):
try:
# 临界区代码
finally:
lock.release()
监控
# 内存
INFO memory
连接数
INFO clients
命令统计
INFO commandstats
踩坑记录
坑 1:数据丢失
没开持久化。一定要加 --appendonly yes。
坑 2:内存爆炸
没设上限,加 --maxmemory 512mb。
坑 3:数据淘汰
allkeys-lvm 会删最久未用的键。根据业务选策略:
- noeviction — 不删,返回错误
- allkeys-lru — 删最少使用的
- volatile-lru — 只删有过期时间的
我的配置
command: >
redis-server
--maxmemory 1gb
--maxmemory-policy allkeys-lru
--appendonly yes
--save 900 1
--save 300 10
每 900 秒有 1 个 key 改动就持久化。
总结
Redis 是提升应用性能的神器:
- 快 — 内存操作
- 持久化 — 数据不丢
- 淘汰策略 — 内存可控
- 丰富数据类型 — 缓存、锁、队列都能做
几 MB 到 1GB 够大多数项目用。
Nginx/OpenResty Redis部署与调优
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法