Disk Cache: nó là gì, bộ nhớ đệm đĩa iOS và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-07-11 Thời gian đọc: 7 phút

Disk Cache là một cơ chế lưu trữ tạm thời dữ liệu trên đĩa của thiết bị, cho phép các ứng dụng iOS tăng tốc truy cập lặp lại vào các tài nguyên đã tải trước đó. Theo Apple Developer Documentation, 2024, Disk Cache giảm sử dụng mạng, giảm tải pin và cho phép ứng dụng hoạt động ở chế độ ngoại tuyến. iOS cung cấp một số cơ chế bộ nhớ đệm tích hợp: URLCache cho các yêu cầu mạng, NSCache cho RAM và các triển khai tùy chỉnh thông qua thư mục Caches.

Điểm chính

  • Disk Cache — lưu trữ dữ liệu trên đĩa để tăng tốc truy cập lặp lại và giảm lưu lượng
  • URLCache — cơ chế bộ nhớ đệm yêu cầu HTTP tích hợp trong iOS
  • Thư mục Caches — thư mục Sandbox chuyên dụng cho dữ liệu tạm thời của ứng dụng
  • Vô hiệu hóa bộ nhớ đệm rất quan trọng đối với tính mới của dữ liệu — các chiến lược dựa trên thời gian, sự kiện và phiên bản
  • Hệ thống có thể xóa bộ nhớ đệm khi không đủ dung lượng đĩa — bộ nhớ đệm không được chứa dữ liệu không thể thay thế

Disk Cache trong iOS là gì?

Disk Cache là một công nghệ lưu trữ tạm thời dữ liệu trên bộ nhớ vĩnh viễn của thiết bị (bộ nhớ flash) để tăng tốc các yêu cầu tiếp theo cho cùng một dữ liệu. Không giống như bộ nhớ đệm RAM, Disk Cache giữ lại dữ liệu sau khi khởi động lại ứng dụng và thậm chí cả thiết bị.

iOS cung cấp hai cấp độ bộ nhớ đệm chính: không ổn định (NSCache, bộ nhớ) và dựa trên đĩa (URLCache, hệ thống tệp). Bộ nhớ đệm đĩa chậm hơn 10–100 lần so với bộ nhớ đệm không ổn định nhưng nhanh hơn đáng kể so với một yêu cầu mạng — sự khác biệt có thể là 2 đến 3 bậc độ lớn. Chiến lược tối ưu sử dụng bộ nhớ đệm hai cấp: bộ nhớ cho dữ liệu nóng và đĩa cho dữ liệu lạnh.

Theo Apple Performance Optimization Guide, 2023, một Disk Cache được cấu hình đúng cách sẽ giảm thời gian tải nội dung xuống 60–80% cho các lần xem lặp lại và giảm mức tiêu thụ lưu lượng xuống 40–70%. Đối với các ứng dụng giàu phương tiện (hình ảnh, video, âm thanh), bộ nhớ đệm là một yếu tố UX quan trọng.

URLCache: cơ chế bộ nhớ đệm tích hợp

URLCache là một lớp Foundation tích hợp triển khai bộ nhớ đệm kết hợp cho các yêu cầu URLSession. Nó tự động lưu phản hồi của máy chủ vào đĩa và bộ nhớ, quản lý kích thước bộ nhớ đệm và các chính sách vô hiệu hóa dựa trên các tiêu đề HTTP như Cache-Control, Expires và ETag.

swift
import Foundation

let cache = URLCache(
    memoryCapacity: 50 * 1024 * 1024,
    diskCapacity: 200 * 1024 * 1024,
    diskPath: "network-cache"
)

URLCache.shared = cache

let config = URLSessionConfiguration.default
config.urlCache = cache
config.requestCachePolicy = .returnCacheDataElseLoad

let session = URLSession(configuration: config)

Chính sách bộ nhớ đệm URLCache xác định thời điểm sử dụng dữ liệu đã lưu trong bộ nhớ đệm và thời điểm thực hiện yêu cầu mới. Các chính sách chính bao gồm: useProtocolCachePolicy (dựa trên tiêu đề máy chủ), reloadIgnoringLocalCacheData (luôn từ máy chủ), returnCacheDataElseLoad (bộ nhớ đệm trước), returnCacheDataDontLoad (chỉ bộ nhớ đệm — chế độ ngoại tuyến).

Cache-Control là một tiêu đề HTTP mà máy chủ gửi kèm với phản hồi, chỉ định max-age (thời gian sống tính bằng giây), must-revalidate (kiểm tra tính mới), no-cache (không sử dụng mà không xác minh) và no-store (không lưu vào bộ nhớ đệm). iOS tuân thủ nghiêm ngặt các tiêu đề này một cách tự động khi sử dụng URLCache với chính sách useProtocolCachePolicy.

Chiến lược bộ nhớ đệm tùy chỉnh và vô hiệu hóa

Bộ nhớ đệm tùy chỉnh cần thiết khi URLCache tích hợp không đủ — để lưu trữ hình ảnh đã xử lý, mô hình dữ liệu được tuần tự hóa hoặc kết quả tính toán. Trong những trường hợp này, các nhà phát triển xây dựng hệ thống bộ nhớ đệm riêng của họ dựa trên thư mục Caches trong Sandbox của ứng dụng.

swift
class DiskCache<T: Codable> {
    private let cacheDir: URL
    private let encoder = JSONEncoder()
    private let decoder = JSONDecoder()

    init() {
        let paths = FileManager.default
            .urls(for: .cachesDirectory,
                     in: .userDomainMask)
        cacheDir = paths[0].appendingPathComponent(
            "data-cache", isDirectory: true
        )
        try? FileManager.default
            .createDirectory(at: cacheDir,
                             withIntermediateDirectories: true)
    }

    func set(value: T, for key: String) {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        if let data = try? encoder.encode(value) {
            try? data.write(to: url)
        }
    }

    func get(for key: String) -> T? {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        guard let data = try? Data(contentsOf: url) else { return nil }
        return try? decoder.decode(T.self, from: data)
    }

    func clearAll() {
        try? FileManager.default
            .removeItem(at: cacheDir)
    }
}

Chiến lược vô hiệu hóa bộ nhớ đệm xác định thời điểm dữ liệu được lưu trữ được coi là lỗi thời: TTL (Time-To-Live) — dữ liệu có thời gian sống cố định sau khi ghi; dựa trên sự kiện — vô hiệu hóa dựa trên sự kiện (ví dụ: cập nhật dữ liệu trên máy chủ); dựa trên phiên bản — vô hiệu hóa khi thay đổi phiên bản API hoặc định dạng dữ liệu; LRU (Least Recently Used) — tự động xóa các mục ít được sử dụng nhất khi vượt quá giới hạn kích thước.

Quy tắc thực tế: TTL phù hợp với tin tức và nội dung trở nên lỗi thời một cách có thể dự đoán được. Dựa trên sự kiện phù hợp với dữ liệu do máy chủ quản lý thông qua thông báo push. Dựa trên phiên bản phù hợp với cấu hình và bộ nhớ đệm mô hình dữ liệu. LRU là lựa chọn phổ biến cho các tệp phương tiện với dung lượng đĩa hạn chế.

Hiệu suất và giới hạn của bộ nhớ đệm

Hiệu suất của Disk Cache được đo bằng tỷ lệ truy cúp (hit ratio) — tỷ lệ phần trăm các yêu cầu được đáp ứng từ bộ nhớ đệm mà không cần gọi mạng. Tỷ lệ truy cúp điển hình cho bộ nhớ đệm hình ảnh được cấu hình tốt là 70–90%, cho phản hồi API là 40–60%, cho video phát trực tuyến là 30–50%.

Loại dữ liệuTỷ lệ truy cúp điển hìnhKích thước bộ nhớ đệm khuyến nghị
Hình ảnh70–90%100–500 MB
Phản hồi API JSON40–60%10–50 MB
Video/Âm thanh30–50%500 MB — 1 GB
Phông chữ và tài nguyên90–99%5–20 MB
Nội dung web50–70%50–200 MB

Giới hạn của Disk Cache trong iOS: hệ thống có thể xóa nội dung của thư mục Caches bất cứ lúc nào khi không đủ dung lượng đĩa. Hành vi này không thể cấu hình được — iOS quyết định khi nào và tệp bộ nhớ đệm nào bị xóa. Do đó, bộ nhớ đệm không được chứa dữ liệu không thể được phục hồi từ mạng hoặc các nguồn khác.

Tác động đến bộ nhớ flash: việc ghi thường xuyên vào Disk Cache làm tăng tốc độ hao mòn của bộ nhớ flash. iOS sử dụng TRIM và wear leveling để giảm thiểu hao mòn, nhưng các nhà phát triển được khuyên tránh ghi quá nhiều: không cập nhật bộ nhớ đệm quá một lần mỗi 5 phút cho cùng một tệp; gộp các lần ghi nhỏ lại với nhau; sử dụng NSCache cho dữ liệu tạm thời không cần lưu trên đĩa.

Các phương pháp hay nhất về bộ nhớ đệm trong iOS

Bộ nhớ đệm hai cấp là kiến trúc tiêu chuẩn cho các ứng dụng iOS: bộ nhớ (NSCache) cho dữ liệu được truy cập thường xuyên và đĩa (URLCache hoặc tùy chỉnh) cho dữ liệu cần duy trì giữa các phiên. Thời gian sống trong bộ nhớ là phút, trên đĩa là giờ hoặc ngày.

Bộ nhớ đệm hình ảnh: sử dụng các thư viện chuyên dụng (Kingfisher, SDWebImage, Nuke) triển khai bộ nhớ đệm hai cấp với tự động vô hiệu hóa, quản lý bộ nhớ và ghi không đồng bộ vào đĩa. Việc triển khai bộ nhớ đệm hình ảnh tùy chỉnh đòi hỏi phải cân nhắc đến giải mã, không gian màu và tỷ lệ.

Bộ nhớ đệm và bảo mật: không lưu dữ liệu nhạy cảm (mật khẩu, token, dữ liệu cá nhân) vào đĩa mà không mã hóa. URLCache không mã hóa dữ liệu theo mặc định — sử dụng NSFileProtection hoặc mã hóa ở cấp ứng dụng cho nội dung nhạy cảm. Đối với các yêu cầu mạng được ủy quyền, sử dụng chính sách .reloadIgnoringLocalCacheData.

Giám sát bộ nhớ đệm: theo dõi tỷ lệ truy cúp, kích thước bộ nhớ đệm hiện tại và số lần ghi mỗi phút. Nếu tỷ lệ truy cúp giảm xuống dưới 30%, bộ nhớ đệm không hiệu quả và cần xem xét lại chiến lược hoặc tăng kích thước. Theo Point-Free (2024), giám sát bộ nhớ đệm là một trong những phương pháp tối ưu hóa hiệu suất ứng dụng iOS bị đánh giá thấp nhất.

Câu hỏi thường gặp

Disk Cache trong iOS là gì?

Disk Cache là công nghệ lưu trữ dữ liệu trên đĩa của thiết bị để tăng tốc truy cập lặp lại. URLCache tích hợp của iOS lưu vào bộ nhớ đệm các phản hồi HTTP và các nhà phát triển có thể tạo bộ nhớ đệm tùy chỉnh thông qua thư mục Caches.

Disk Cache khác với RAM Cache như thế nào?

RAM Cache (NSCache) lưu trữ dữ liệu trong RAM — nhanh hơn nhưng bị mất khi khởi động lại ứng dụng. Disk Cache chậm hơn nhưng duy trì giữa các phiên. Chiến lược tối ưu sử dụng cả hai cấp: bộ nhớ cho dữ liệu nóng, đĩa cho dữ liệu lạnh.

iOS có thể xóa bộ nhớ đệm của tôi không?

, hệ thống có thể xóa nội dung của thư mục Caches bất cứ lúc nào khi không đủ dung lượng đĩa. Do đó, không bao giờ lưu dữ liệu không thể phục hồi trong bộ nhớ đệm. Sử dụng thư mục Documents cho các tài liệu người dùng.

Làm thế nào để chọn kích thước bộ nhớ đệm phù hợp?

Kích thước bộ nhớ đệm phụ thuộc vào loại dữ liệu: 100–500 MB cho hình ảnh, 10–50 MB cho phản hồi API, tối đa 1 GB cho video. Theo dõi tỷ lệ truy cúp — nếu giảm xuống dưới 50%, hãy tăng kích thước bộ nhớ đệm hoặc thay đổi chiến lược vô hiệu hóa.

Làm cách nào để xóa bộ nhớ đệm trong ứng dụng iOS?

URLCache.removeAllCachedResponses() xóa bộ nhớ đệm tích hợp. Đối với bộ nhớ đệm tùy chỉnh, hãy xóa tệp khỏi thư mục Caches thông qua FileManager. Luôn cung cấp cho người dùng tùy chọn xóa bộ nhớ đệm thông qua cài đặt ứng dụng.

Tổng kết

  • Disk Cache — lưu trữ tạm thời dữ liệu trên đĩa để truy cập lặp lại nhanh hơn và giảm lưu lượng
  • URLCache — bộ nhớ đệm yêu cầu HTTP Foundation tích hợp với hỗ trợ Cache-Control
  • Thư mục Caches — thư mục Sandbox cho dữ liệu tạm thời, được hệ thống dọn dẹp khi không đủ dung lượng
  • Vô hiệu hóa được thực hiện bởi TTL, sự kiện, phiên bản hoặc LRU — lựa chọn phụ thuộc vào loại dữ liệu
  • Tỷ lệ truy cúp — chỉ số hiệu quả bộ nhớ đệm chính: 70%+ cho hình ảnh, 40–60% cho API
  • Bộ nhớ đệm hai cấp (RAM + Đĩa) — kiến trúc tiêu chuẩn cho ứng dụng iOS
  • Bảo mật — dữ liệu nhạy cảm không được lưu vào bộ nhớ đệm trên đĩa mà không mã hóa

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm