توسعه دهندگان اغلب به شوخی می گویند که برنامه نویسی دو چالش اصلی دارد:
- نام گذاری متغیرها
- باطل کردن حافظه پنهان
این شوخی دور از واقعیت نیست: مدیریت حافظه پنهان، به ویژه باطل کردن آنها، واقعاً می تواند به یک کار جدی تبدیل شود. در این مقاله، نحوه اجرای آسان قابلیت کش برچسب گذاری شده بر اساس یک سرویس کش موجود را توضیح خواهم داد.
تصور کنید ما سیستمی داریم که در آن کاربران مقالاتی را اضافه می کنند. برای هر کاربر، آماری در مورد مقالههای او در داشبورد شخصیاش نمایش میدهیم: تعداد مقالات، میانگین تعداد کلمات، فراوانی انتشار و غیره. برای افزایش سرعت سیستم، این دادهها را در حافظه پنهان ذخیره میکنیم. برای هر گزارش یک کلید کش منحصر به فرد ایجاد می شود.
این سوال مطرح می شود: چگونه می توان چنین حافظه های پنهان را هنگام تغییر داده ها باطل کرد؟ یک روش پاک کردن دستی حافظه پنهان برای هر رویداد است، به عنوان مثال، هنگامی که یک مقاله جدید اضافه می شود:
class InvalidateArticleReportCacheOnArticleCreated {
public function handle(event: ArticleCreatedEvent): void {
this-cacheService-deleteMultiple([
'user_article_report_count_' . event-userId,
'user_article_report_word_avg_' . event-userId,
'user_article_report_freq_avg_' . event-userId,
])
}
}
این روش کار می کند، اما زمانی که با تعداد زیادی گزارش و کلید سروکار دارید، دست و پا گیر می شود. این جایی است که ذخیره برچسب شده می آید …