Chiến lược bộ nhớ đệm

Tối ưu hóa mã trong Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Cache là gì?

Cache giống như để sẵn nguyên liệu hay dùng trên quầy bếp thay vì trong tủ: lấy nhanh hơn nhưng quầy có hạn

Thường cache những gì:

  • Kết quả truy vấn cơ sở dữ liệu
  • Phản hồi API
  • Tính toán tốn kém
  • Tác vụ nặng tài nguyên khác
Tối ưu hóa mã trong Java

Cache trong bộ nhớ với Java

// In-memory cache using HashMap
public class SimpleCache<K, V> {
    private final Map<K, V> cache = new HashMap<>();

    public V get(K key) {
        return cache.get(key);
    }

    public void put(K key, V value) {
        cache.put(key, value);
    }
}
Tối ưu hóa mã trong Java

Chính sách loại bỏ cache

  • LRU (ít dùng gần đây nhất)
  • LFU (ít dùng thường xuyên nhất)
  • FIFO (vào trước, ra trước)
  • Hết hạn theo thời gian
  • Và hơn nữa!
Tối ưu hóa mã trong Java

Redis cho cache phân tán

Redis là gì:

  • Kho dữ liệu/bộ nhớ đệm trong bộ nhớ
  • Mạnh trong vai trò cache phân tán
  • Hỗ trợ nhiều cấu trúc dữ liệu
  • Nhiều thư viện Java client - ví dụ: Jedis

Ảnh chụp màn hình 2025-05-14 lúc 6:59:29 CH.png

Tối ưu hóa mã trong Java

Dùng Redis với Jedis

import redis.clients.jedis.Jedis;

// Using Jedis client
Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");

Tính năng bổ sung:

  • Tự động hết hạn mục đã cache
  • Hỗ trợ cụm (cluster)
Tối ưu hóa mã trong Java

Triển khai cache theo thời gian với Redis

public class RedisTimedCache {
    private final Jedis jedis;

    public RedisTimedCache(String host, int port) {
        this.jedis = new Jedis(host, port);
    }

    public String get(String key) {
        return jedis.get(key);
    }

    public void put(String key, String value, int timeToLiveSeconds) {
        // Sets both the value and expiration time in seconds
        jedis.setex(key, timeToLiveSeconds, value);
    }
}
Tối ưu hóa mã trong Java

Tóm tắt

  • Cache lưu kết quả đã tính để tránh tính lại
  • Hiệu quả cho tác vụ tốn kém và dữ liệu truy cập thường xuyên
  • Áp dụng chính sách loại bỏ phù hợp để quản lý bộ nhớ
  • Cân nhắc cache phân tán cho ứng dụng nhiều máy chủ (ví dụ: Redis với Jedis)
Tối ưu hóa mã trong Java

Vamos praticar!

Tối ưu hóa mã trong Java

Preparing Video For Download...