⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

基于表级哈希的查询缓存自动失效策略

实现一个细粒度的缓存失效系统,通过监控数据库表变更事件计算哈希,自动使依赖于该表的缓存键失效,无需手动清除或设置过期时间。 · 难度:入门 · +10XP

哈希驱动的失效

Django缓存常见问题是缓存雪崩或数据不一致。本教程利用django-signals的post_save/post_delete,监听模型变化后更新一个全局哈希表(存储在Redis中),键为表名,值为数据版本哈希值。每个缓存查询在存储时附带所涉及表的哈希列表,读取时对比当前哈希与存储时的哈希是否一致,若不一致则自动刷新缓存。这样即使用于手动编辑数据库,下次请求也能自动发现不一致并重新缓存。

# cache/invalidation.py
from django.core.cache import cache
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from hashlib import md5

def refresh_table_hash(sender, **kwargs): table_name = sender._meta.db_table current_hash = md5(str(time.time()).encode()).hexdigest()[:8] cache.set(f'table_hash:{table_name}', current_hash, 3600)

# connect signals for model in all_models: post_save.connect(refresh_table_hash, sender=model) post_delete.connect(refresh_table_hash, sender=model)

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0