Guava লাইব্রেরি ক্যাশিং ব্যবস্থাপনার জন্য অত্যন্ত শক্তিশালী এবং সহজ ব্যবহারযোগ্য ফিচার সরবরাহ করে। এর মধ্যে দুটি গুরুত্বপূর্ণ ক্লাস হলো CacheLoader এবং RemovalListener। এগুলি ক্যাশের কার্যকারিতা এবং নির্ভরযোগ্যতা বাড়াতে সাহায্য করে। CacheLoader কিভাবে ডাটা লোড করে এবং RemovalListener কিভাবে ক্যাশ থেকে ডাটা অপসারণের পর ট্র্যাকিং করে, তা এখানে বিস্তারিতভাবে আলোচনা করা হলো।
CacheLoader ব্যবহার
CacheLoader একটি Guava ক্লাস যা একটি ক্যাশে নতুন ডাটা লোড করার জন্য ব্যবহার করা হয়। এটি একটি অ্যাবস্ট্রাক্ট ক্লাস যা ডাটা লোড করার জন্য কাস্টম লজিক বাস্তবায়ন করতে সহায়তা করে। CacheLoader এর সাহায্যে আপনি ক্যাশে ডাটা যোগ করার সময়, যদি ডাটা ক্যাশে না থাকে, তবে তা সিস্টেমের অন্য কোন উৎস থেকে লোড করার ব্যবস্থা করতে পারবেন।
CacheLoader এর সুবিধা:
- Lazy loading: যখনই ক্যাশে ডাটা প্রয়োজন হবে এবং তা না থাকলে, তখনই তা লোড করা হবে।
- Cache Miss Handling: ক্যাশে ডাটা না থাকলে এটি নিজে থেকেই ডাটা লোড করার ব্যবস্থা করে।
উদাহরণ
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import java.util.concurrent.ExecutionException;
public class CacheLoaderExample {
public static void main(String[] args) {
// CacheBuilder ব্যবহার করে ক্যাশ তৈরি
Cache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(100)
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) {
return "Loaded value for " + key; // ডাটা লোড করার লজিক
}
});
try {
// ক্যাশে ডাটা লোড করা
String value = cache.get("key1");
System.out.println(value); // Output: Loaded value for key1
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
এখানে, CacheLoader এর load() মেথড ডিফাইন করা হয়েছে যাতে যদি ক্যাশে নির্দিষ্ট কী না থাকে, তবে এটি ঐ কীয়ের জন্য ডাটা লোড করে।
RemovalListener ব্যবহার
RemovalListener Guava ক্যাশে থেকে কোনো উপাদান অপসারণের পর কার্যকর হয়। এটি আপনাকে ক্যাশে থেকে আইটেম অপসারণের কারণ (যেমন, মেমরি সীমা অতিক্রম, অথবা ম্যানুয়ালি ডাটা মুছে ফেলা) ট্র্যাক করতে এবং সেই অনুযায়ী একটি অ্যাকশন করতে সহায়তা করে। RemovalListener কে একটি ক্যাশের সাথে যুক্ত করা হয়, যাতে ক্যাশ থেকে ডাটা অপসারণের পর নির্দিষ্ট কাজ করা যায়।
RemovalListener এর সুবিধা:
- Data removal tracking: ক্যাশ থেকে ডাটা মুছে ফেলা হলে, এর কারণ এবং অন্যান্য তথ্য সম্পর্কে অবহিত হওয়া যায়।
- Custom actions: ক্যাশে থেকে আইটেম মুছে ফেলা হলে কাস্টম অ্যাকশন (যেমন, লগিং বা ব্যাকআপ) বাস্তবায়ন করা সম্ভব।
উদাহরণ
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
public class RemovalListenerExample {
public static void main(String[] args) {
// CacheBuilder ব্যবহার করে ক্যাশ তৈরি
Cache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(100)
.removalListener(new RemovalListener<String, String>() {
@Override
public void onRemoval(RemovalNotification<String, String> notification) {
System.out.println("Removed: " + notification.getKey() + " because " + notification.getCause());
}
})
.build();
// ক্যাশে ডাটা যোগ করা
cache.put("key1", "value1");
cache.put("key2", "value2");
// ক্যাশে আইটেম অপসারণ করা
cache.invalidate("key1"); // Output: Removed: key1 because EXPLICIT
}
}
এখানে, RemovalListener কনফিগার করা হয়েছে যাতে ক্যাশ থেকে আইটেম অপসারণের পর আমরা তার কারণ জানতে পারি। যেমন, এখানে "key1" অপসারণের কারণ ছিল EXPLICIT, অর্থাৎ ম্যানুয়ালি ডাটা মুছে ফেলা।
CacheLoader এবং RemovalListener একত্রিত ব্যবহার
আপনি CacheLoader এবং RemovalListener একই ক্যাশে ব্যবহার করতে পারেন যাতে ক্যাশে নতুন ডাটা লোড করার সময় এবং ক্যাশ থেকে ডাটা অপসারণের সময় কাস্টম লজিক প্রয়োগ করতে পারেন।
উদাহরণ
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
import java.util.concurrent.ExecutionException;
public class CacheWithRemovalListenerAndLoader {
public static void main(String[] args) {
// CacheBuilder ব্যবহার করে ক্যাশ তৈরি
Cache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(100)
.removalListener(new RemovalListener<String, String>() {
@Override
public void onRemoval(RemovalNotification<String, String> notification) {
System.out.println("Removed: " + notification.getKey() + " because " + notification.getCause());
}
})
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) {
return "Loaded value for " + key;
}
});
try {
// ক্যাশে ডাটা লোড করা
String value1 = cache.get("key1");
System.out.println(value1); // Output: Loaded value for key1
// ক্যাশে থেকে ডাটা অপসারণ করা
cache.invalidate("key1"); // Output: Removed: key1 because EXPLICIT
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
এখানে, ক্যাশে নতুন ডাটা লোড করার জন্য CacheLoader এবং ক্যাশ থেকে ডাটা অপসারণের পর তা ট্র্যাক করার জন্য RemovalListener একসাথে ব্যবহৃত হয়েছে।
Guava এর CacheLoader এবং RemovalListener ক্লাসগুলো ক্যাশ ব্যবস্থাপনা অত্যন্ত সহজ ও কার্যকরী করে তোলে। CacheLoader ডাটা লোডিংয়ের কাজটি পরিচালনা করে এবং RemovalListener ক্যাশ থেকে ডাটা অপসারণের পর কার্যকরী অ্যাকশন গ্রহণে সাহায্য করে। এই দুটি ফিচার ব্যবহার করে আপনি উন্নত ক্যাশিং মেকানিজম তৈরি করতে পারেন যা আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং নির্ভরযোগ্যতা বাড়াতে সহায়তা করবে।
Read more