Pinia 状态管理完全指南

admin
2025-11-23 05:21 阅读 1240
Vue3官方推荐的状态管理库使用教程

Redis 缓存策略详解
Redis 是高性能的内存数据库,常用于缓存、会话管理、消息队列等场景。
1. 数据类型
# String
SET user:1:name "John"
GET user:1:name
Hash
HSET user:1 name “John” age 30
HGETALL user:1
List
LPUSH queue task1 task2
RPOP queue
Set
SADD tags:post:1 “vue” “javascript”
SMEMBERS tags:post:1
Sorted Set
ZADD leaderboard 100 “player1” 200 “player2”
ZRANGE leaderboard 0 -1 WITHSCORES
2. 缓存模式
# Cache-Aside(旁路缓存)
def get_user(user_id):
# 1. 查缓存
user = redis.get(f"user:{user_id}")
if user:
return json.loads(user)
# 2. 查数据库
user = db.query(user_id)
# 3. 写缓存
redis.setex(f"user:{user_id}", 3600, json.dumps(user))
return user</code></pre>
3. 缓存问题与解决
缓存穿透(查询不存在的数据):
# 缓存空值
if not data:
redis.setex(key, 300, "")
布隆过滤器
if not bloom_filter.exists(key):
return None
缓存击穿(热点 key 过期):
# 互斥锁
def get_data(key):
data = redis.get(key)
if not data:
if redis.setnx(f"lock:{key}", 1):
redis.expire(f"lock:{key}", 10)
data = db.query(key)
redis.setex(key, 3600, data)
redis.delete(f"lock:{key}")
else:
time.sleep(0.1)
return get_data(key)
return data
缓存雪崩(大量 key 同时过期):
# 随机过期时间
ttl = 3600 + random.randint(0, 300)
redis.setex(key, ttl, value)
4. 过期策略
# 设置过期时间
SETEX key 3600 value
EXPIRE key 3600
查看剩余时间
TTL key
持久化
PERSIST key
5. 内存淘汰策略
- noeviction - 不淘汰,内存满时报错
- allkeys-lru - 淘汰最近最少使用的 key
- volatile-lru - 只淘汰设置了过期时间的 key
- allkeys-random - 随机淘汰
6. 持久化
# RDB(快照)
save 900 1
save 300 10
AOF(日志)
appendonly yes
appendfsync everysec
最佳实践
- 合理设置过期时间
- 避免大 key
- 使用 Pipeline 批量操作
- 监控内存使用
