Création d'un système de mise en cache fiable : partage de conception et d'expérience pratique du mécanisme de mise en cache Java
Introduction :
Dans la plupart des applications, la mise en cache des données est une méthode courante pour améliorer les performances du système. La mise en cache réduit l'accès à la source de données sous-jacente, améliorant ainsi considérablement le temps de réponse des applications. En Java, nous pouvons implémenter le mécanisme de mise en cache de différentes manières. Cet article présentera quelques modèles de conception de mise en cache courants et des expériences pratiques, et fournira des exemples de code spécifiques.
1. Modèle de conception de cache :
import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; public class InMemoryCache<T> { private final Map<String, CacheEntry<T>> cache; private final long expirationTime; private static class CacheEntry<T> { private final T value; private final long createTime; CacheEntry(T value) { this.value = value; this.createTime = System.currentTimeMillis(); } boolean isExpired(long expirationTime) { return System.currentTimeMillis() - createTime > expirationTime; } } public InMemoryCache(long expirationTime) { this.cache = new HashMap<>(); this.expirationTime = expirationTime; } public void put(String key, T value) { cache.put(key, new CacheEntry<>(value)); } public T get(String key) { CacheEntry<T> entry = cache.get(key); if (entry != null && !entry.isExpired(expirationTime)) { return entry.value; } else { cache.remove(key); return null; } } public static void main(String[] args) { InMemoryCache<String> cache = new InMemoryCache<>(TimeUnit.MINUTES.toMillis(30)); cache.put("key1", "value1"); String value = cache.get("key1"); System.out.println(value); } }
import java.io.*; import java.util.HashMap; import java.util.Map; public class DiskCache<T> { private final Map<String, File> cache; public DiskCache() { this.cache = new HashMap<>(); } public void put(String key, T value) { try { File file = new File("cache/" + key + ".bin"); ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file)); outputStream.writeObject(value); outputStream.close(); cache.put(key, file); } catch (IOException e) { e.printStackTrace(); } } public T get(String key) { File file = cache.get(key); if (file != null && file.exists()) { try { ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file)); T value = (T) inputStream.readObject(); inputStream.close(); return value; } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } cache.remove(key); return null; } public static void main(String[] args) { DiskCache<String> cache = new DiskCache<>(); cache.put("key1", "value1"); String value = cache.get("key1"); System.out.println(value); } }
2. Expérience pratique de la mise en cache :
3. Conclusion :
En concevant et en utilisant correctement le mécanisme de mise en cache, les performances et la vitesse de réponse de l'application peuvent être considérablement améliorées. Lors de la création d'un système de cache fiable, choisissez une stratégie de cache appropriée, effectuez régulièrement le nettoyage et l'expiration du cache et tenez compte de la cohérence du cache distribué. Cet article fournit des exemples de code spécifiques de modèles de conception de mise en cache basés sur la mémoire et le disque, dans l'espoir d'aider les lecteurs à créer des systèmes de mise en cache fiables.
Références :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!