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 够大多数项目用。