File size: 1,257 Bytes
fed8648
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from functools import wraps
from flask import current_app, jsonify
import redis
import json
from datetime import datetime

# 初始化Redis连接
redis_client = redis.Redis(
    host='localhost',
    port=6379,
    db=0,
    decode_responses=True
)

def cache_key(*args, **kwargs):
    """生成缓存key"""
    return f"inventory_system:{args}:{sorted(kwargs.items())}"

def cache(timeout=300):
    """缓存装饰器"""
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            key = cache_key(f.__name__, *args, **kwargs)
            
            # 尝试从缓存获取
            cached_result = redis_client.get(key)
            if cached_result:
                return json.loads(cached_result)
            
            # 执行原函数
            result = f(*args, **kwargs)
            
            # 存入缓存
            redis_client.setex(
                key,
                timeout,
                json.dumps(result)
            )
            
            return result
        return decorated_function
    return decorator

def clear_cache(pattern="inventory_system:*"):
    """清除指定模式的缓存"""
    for key in redis_client.scan_iter(pattern):
        redis_client.delete(key)