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 批量操作
  • 监控内存使用
0 条评论