Bình luận

NVMH Blog - Website chia sẻ thủ thuật, tài liệu, phần mềm, tin tức công nghệ!

Backend Performance Best Practices - Caching

Mục lục

Sử Dụng Các Cơ Chế Lưu Trữ Tạm

Hiệu năng backend của các ứng dụng web có thể được cải thiện đáng kể khi các cơ chế lưu trữ tạm hiệu quả, như HTTP, server/client và CDN được triển khai đúng cách. Lưu trữ tạm có thể giảm đáng kể tải trọng trên máy chủ, giảm thiểu nỗ lực cần thiết để tạo phản hồi cho yêu cầu của người dùng.

Ví dụ, khi một người dùng truy cập lại một trang web đã được truy cập trước đó, các cơ chế lưu trữ tạm sẽ truy xuất thông tin đã lưu nhanh hơn so với việc máy chủ tạo lại nó. Quá trình này hiệu quả làm giảm độ trễ, lượng băng thông sử dụng và sức mạnh xử lý, tăng tốc độ tải trang và góp phần mang lại trải nghiệm người dùng mượt mà hơn. Các bộ nhớ cache dựa trên CDN cũng giúp phục vụ các tài nguyên tĩnh cho người dùng từ vị trí gần nhất có thể, giảm độ trễ mạng.

Áp Dụng Các Mẫu Lưu Trữ Tạm Phù Hợp

Để đạt hiệu năng backend tối ưu trong các ứng dụng web, việc triển khai phương pháp lưu trữ tạm phù hợp, như cache aside, ghi-thông qua (write-through), hoặc đọc-thông qua (read-through), là rất quan trọng. Điều này có ý nghĩa cơ bản vì nó làm giảm tải trọng trên cơ sở dữ liệu, truy xuất dữ liệu nhanh hơn và giảm thời gian độ trễ, dẫn đến thời gian phản hồi nhanh hơn.

Chẳng hạn, hãy xem xét một trang thương mại điện tử có lượng truy cập cao, nơi hàng trăm nghìn chi tiết sản phẩm cần được truy xuất đồng thời. Nếu một mẫu lưu trữ tạm phù hợp như cache đọc-thông qua được áp dụng tại đây, nó sẽ xử lý việc truy xuất dữ liệu từ cơ sở dữ liệu khi bộ nhớ cache trống, đảm bảo rằng ứng dụng luôn nhận được dữ liệu, cải thiện hiệu suất và trải nghiệm người dùng tổng thể.

Các Chiến Lược Vô Hiệu Hóa Cache Hiệu Quả

Trong lĩnh vực hiệu năng backend, việc áp dụng các chiến lược vô hiệu hóa cache phù hợp là rất quan trọng. Việc quản lý cache hiệu quả giảm áp lực lên các máy chủ web bằng cách lưu và hiển thị dữ liệu đã truy xuất hoặc tính toán trước đó. Tuy nhiên, thách thức phát sinh khi dữ liệu cache như vậy trở nên lỗi thời hoặc 'cũ'. Nếu không được giải quyết, người dùng có thể nhận được thông tin không chính xác hoặc lỗi thời. Các chiến lược vô hiệu hóa cache tốt đảm bảo rằng hệ thống liên tục làm mới hoặc loại bỏ cache lỗi thời, giữ cho dữ liệu nhất quán và chính xác.

Ví dụ, sử dụng các chiến lược dựa trên thời gian, một hệ thống có thể vô hiệu hóa cache sau một khoảng thời gian nhất định, về cơ bản tạo ra một chế độ bảo trì tự động. Tương tự, với phương pháp ghi-thông qua, một ứng dụng sẽ cập nhật cache ngay lập tức khi có thay đổi, đảm bảo người dùng luôn nhận được dữ liệu mới nhất.

Ví dụ với Django

Caching Trang Chi Tiết Sản Phẩm

from django.views.decorators.cache import cache_page
from django.utils.decorators import method_decorator

class ProductDetailView(View):
    @method_decorator(cache_page(60 * 15))  # Cache trong 15 phút
    def get(self, request, product_id):
        product = Product.objects.get(id=product_id)
        return render(request, 'product_detail.html', {'product': product})

Cache Aside Pattern

from django.core.cache import cache

def get_product(product_id):
    # Thử lấy từ cache trước
    cache_key = f'product_{product_id}'
    product = cache.get(cache_key)

    if product is None:
        # Nếu không có trong cache, lấy từ database
        product = Product.objects.get(id=product_id)

        # Lưu vào cache để lần sau truy xuất nhanh hơn
        cache.set(cache_key, product, timeout=3600)  # Cache 1 giờ

    return product

Cache Invalidation Chiến Lược

class ProductService:
    def update_product(self, product_id, new_data):
        # Cập nhật database
        product = Product.objects.get(id=product_id)
        for key, value in new_data.items():
            setattr(product, key, value)
        product.save()

        # Vô hiệu hóa cache ngay lập tức
        cache_key = f'product_{product_id}'
        cache.delete(cache_key)

        # Hoặc sử dụng write-through pattern
        cache.set(cache_key, product, timeout=3600)

Caching Truy Vấn Phức Tạp

def get_popular_products():
    cache_key = 'popular_products'

    # Thử lấy từ cache
    popular_products = cache.get(cache_key)

    if popular_products is None:
        # Nếu cache trống, thực hiện truy vấn phức tạp
        popular_products = Product.objects.filter(
            sales__gte=100
        ).order_by('-sales')[:10]

        # Lưu vào cache
        cache.set(cache_key, list(popular_products), timeout=60 * 60)

    return popular_products
Đọc thêm:
Không phải bug nào cũng xấu, có bug giúp ta tỉnh ra

Đăng nhận xét

Hãy để lại bình luận theo chủ đề bài viết, đánh dấu Thông báo cho tôi để nhận thông báo qua email khi bình luận của bạn được trả lời.
Nhập URL Ảnh hoặc Đoạn Mã, hoặc Trích Dẫn, sau đó nhấn nút mà bạn muốn để phân tích. Sao chép kết quả phân tích rồi dán vào ô bình luận.


image quote pre code
YUZU ENTERTAINMENT

Đăng ký kênh YouTube của chúng tôi nữa nhé