Redis এবং Spring-এ অবজেক্ট ম্যাপিং, এবং আরও অনেক কিছু
Redis OM Spring একটি নতুন ক্লায়েন্ট লাইব্রেরি যা আপনাকে আপনার ডোমেন মডেল করতে এবং ডেটা Redis-এ পারসিস্ট করতে সাহায্য করে আপনার Spring অ্যাপ্লিকেশনগুলিতে। লাইব্রেরিটি ওপেন সোর্স Redis-এর সাথে কাজ করে কিন্তু RedisJSON ব্যবহার করার সময় অনেক অতিরিক্ত ইন্ডেক্সিং এবং কোয়েরি ক্যাপাবিলিটি প্রদান করে।
Redis, তার মডিউলগুলোর সাথে মিলে, পৃথিবীর সবচেয়ে দ্রুত ডেটা প্ল্যাটফর্মের একটি। কিন্তু এর গতি ব্যবহার করা সবসময় সহজ নয়। Redis OM Spring একটি আকর্ষণীয় ডেভেলপার এক্সপেরিয়েন্স প্রদান করে, এবং এই পোস্টে আমি আপনাকে দেখাবো আপনি এর সাথে কী বিল্ড করতে পারেন।
মটিভেশন
একজন ডেভেলপার হিসেবে, এমন একটি টেকনোলজি পাওয়া বিরল যা একসাথে শক্তিশালী এবং সিম্পল। OSS Redis একলেই আপনাকে হোস্ট করে ডেটা স্ট্রাকচার এবং সংশ্লিষ্ট কমান্ডগুলোর একটি সমুহ যা এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলির জন্য প্রয়োজনীয় অনেক ডেটা-ওরিয়েন্টেড এবং মেসেজিং টাস্ক পারফর্ম করতে।
একইভাবে, এন্টারপ্রাইজ Java ডেভেলপমেন্টের জগতে, Spring গত ১৮ বছরে বড়, ফিচার-রিচ অ্যাপ্লিকেশন বিল্ড করার জটিলতা নিয়ন্ত্রণ করেছে। এই স্পেসে, Redis Spring Data Redis দ্বারা সাপোর্ট করা হয়েছে, যা OSS Redis-র সাথে ইন্টারঅ্যাক্ট করার জন্য লো-লেভেল এবং হাই-লেভেল উভয় abstraction প্রদান করে।
Spring Data Redis ব্যবহার করার চ্যালেঞ্জগুলোর একটি হলো এটি Redis মডিউলগুলোর সাপোর্ট করে না। এখানে Redis-এ, আমরা বহু গেম-চেঞ্জিং Redis মডিউল ডেভেলপ করেছি যা Redis কোর ডেটা স্ট্রাকচারকে সমৃদ্ধ করে সার্চ, JSON ইন্ডেক্সিং এবং কোয়েরি, গ্রাফ ডেটা, টাইম সিরিজ ডেটা, এবং সার্ভার-সাইড কম্পিউটেশনের জন্য একটি কমপ্লিট ফ্রেমওয়ার্ক (Redis Gears) দিয়ে। আমরা Redis OM Spring বানালাম এই মডিউলগুলো সুবিধা নেওয়ার জন্য এবং আরও ব্রডার ক্যাপাবিলিটি প্রদান করার জন্য।
Redis OM Spring
Redis OM ক্লায়েন্ট লাইব্রেরির পরিবার লক্ষ্য করে আপনার ল্যাঙ্গুয়েজ/প্ল্যাটফর্মের জন্য ইডিোমেটিক্যালি ইমপ্লিমেন্টেড হাই-লেভেল abstraction প্রদান করা। আমরা বর্তমানে Node.js, Python, .NET, এবং Spring কমিউনিটিকে ক্যাটার করি। Redis OM Spring ডেভেলপারদের সহজে তাদের Spring Boot অ্যাপ্লিকেশনগুলিতে Redis-এর শক্তি যোগ করতে দেয়।
নির্দিষ্টভাবে, Redis OM Spring একটি রবাস্ট রিপোজিটরি এবং কাস্টম অবজেক্ট-ম্যাপিং abstraction প্রদান করে উপলব্ধ Spring Data Redis (SDR) ফ্রেমওয়ার্কের ওপর বিল্ড করা।
বর্তমান প্রিভিউ রিলিজ সকল Spring Data Redis ক্যাপাবিলিটি প্রদান করে, পлюস:
- Java থেকে JSON ম্যাপিং
- Enhanced Hash ম্যাপিং
- অটোমেটিক সার্চ ইন্ডেক্স জেনারেশন
- RediSearch দ্বারা ব্যাকড Spring Data Repositories
Java থেকে JSON ম্যাপিং
RedisJSON ব্যবহার করে Java অবজেক্টগুলো JSON ডকুমেন্ট হিসেবে Redis-এ স্টোর করতে ম্যাপ করতে, আপনি
@Documentанноটেশন ব্যবহার করতে পারেন। যেকোনো Spring Data এন্টিটি ম্যাপিং анনোশনের মতো, আপনি এটিকে ক্লাস ডিক্লেরেশনে যোগ করুন। উদাহরণস্বরূপ, কল্পনা করুন আপনি
Companyটাইপের অবজেক্টগুলো ম্যাপ করতে চান। সিম্পলি
@Documentযোগ করুন নিচে দেখানো মত:
আপনি লক্ষ্য করতে পারেন এই ক্লাসের বডিতে বেশ কিছু анনোশন আছে।
@IdSpring Data-র থেকে আসে, এবং এটি
idপ্রপার্টি ডিক্লেয়ার করে Redis কী হিসেবে যা আমাদের JSON ডকুমেন্ট স্টোর করবে।
Spring Data লাইব্রেরির পরিবারের সবচেয়ে জনপ্রিয় ফিচারগুলোর একটি হলো ডিক্লেরেটিভ Data Repositories। পরবর্তী দুটি анনোশন আপনাকে RediSearch ব্যবহার করে JSON ডকুমেন্ট ইন্ডেক্স করতে দেয়। এটি
RedisDocumentRepositoryইন্টারফেসের মাধ্যমে এক্সপোজ করা হয়েছে:
খালি রিপোজিটরি ডিক্লেরেশনই আপনার POJO-এর জন্য বেসিক CRUD ফাংশনালিটি/পেজিনেশন এবং সর্টিং পাওয়ার জন্য যথেষ্ট।
Redis OM Spring POJO ফিল্ডগুলোর ব্যবহার করে যেগুলো
@Indexedবা
@Searchableআন্নোশন করা আছে, ইন্ডেক্স স্কিমা বিল্ড করতে।
CompanyPOJO-এর কেসে, আমাদের একটি name প্রপার্টি আছে যা "searchable" হিসেবে আন্নোশন করা, যার মানে আমরা ওই ফিল্ডের ওপর ফুল-টেক্সট সার্চ ক্যাপাবিলিটি পাই। এটি স্কিমা ফিল্ড ডেফিনিশনে প্রতিফলিত হয়েছে
$.name AS name TEXT।
দूसरी পাশে, tags ফিল্ডটি "indexable" হিসেবে আন্নোশন করা, যার মানে আমরা TAG টাইপের একটি ইন্ডেক্স ফিল্ড পাই, যার মানে আমরা Companies খুঁজে বের করতে পারি ফিল্ডের সঠিক ভ্যালু দিয়ে। এটি আবার স্কিমা ফিল্ড ডেফিনিশনে প্রতিফলিত:
$.tags[*] AS tags TAG
সিম্পল ডাইনামিক কোয়েরি তৈরি করা
শायद Redis OM Spring-এর সবচেয়ে আকর্ষণীয় ফিচার হলো এর ক্ষমতা রিপোজিটরি ইমপ্লিমেন্টেশন অটোমেটিক্যালি, রানটাইমে, একটি রিপোজিটরি ইন্টারফেস থেকে তৈরি করা। উপযুক্ত ফিল্ডগুলো ইন্ডেক্স করা থাকলে, আপনি এখন নিচের সকল কোয়েরি ফুলফিল করতে পারেন কোনো অতিরিক্ত কোড লিখতে না পারেন:
রিপোজিটরি প্রক্সির দুটি উপায় আছে একটি স্টোর-স্পেসিফিক কোয়েরি মেথড নাম থেকে ডেরাইভ করতে:
- মেথড নাম থেকে সরাসরি কোয়েরি ডেরাইভ করে।
@Query
বা@Aggregation
анনোশন ব্যবহার করে ম্যানুয়ালি ডিফাইন করা কোয়েরি ব্যবহার করে।
চলুন রিপোজিটরি ইন্টারফেসে যোগ করা মেথড ডিক্লেরেশনের কয়েকটি পরীক্ষা করি।
findOneByName
Redis OM Spring মেথড নাম এবং প্যারামিটার ব্যবহার করে উপযুক্ত কোয়েরি জেনারেট করে। এটি মেথড রিটার্ন টাইপ ব্যবহার করে নির্ধারণ করে কীভাবে রেজাল্ট প্যাকেজ এবং রিটার্ন করতে হয়।
findOneByNameএকটি
Optional of Companyরিটার্ন করে।
findOneইমপ্লাই করে যে শুধু একটি রেজাল্ট রিটার্ন হবে, এমনকি যদি একাধিক রেজাল্ট থাকে। লাইব্রেরি মেথড নাম পার্স করে প্রত্যাশিত প্যারামিটারের সংখ্যা নির্ধারণ করতে। উদাহরণস্বরূপ, মেথডের
ByNameঅংশটি আমাদের বলে যে আমরা একটি সিঙ্গল প্যারামিটার এক্সপেক্ট করছি
nameনামে।
findByLocationNear
Redis OM Spring GeoJSON টাইপ সাপোর্ট করে জিওস্পেশিয়াল ডেটা স্টোর করতে। আমাদের কোয়েরিতে
nearকীওয়ার্ড ব্যবহার করলে, আমরা আমাদের কোডকে বলে দিচ্ছি একটি
Point
(org.springframework.data.geo.Point)এবং একটি
Distance (org.springframework.data.geo.Distance)টাইপ প্যারামিটার হিসেবে এক্সপেক্ট করতে।
রিপোজিটরি ব্যবহার করা
অন্য Spring Data Repositories-এর মতো, আপনি একটি রিপোজিটরি ইনজেক্ট করতে পারেন অন্য একটি Spring কম্পোনেন্টে:
সমাপনী
এটি শুধুমাত্র Redis OM Spring-এর একটি প্রিভিউ রিলিজ। এখনো অনেক কিছু বিল্ড করতে বাকি, কিন্তু এখন আপনার সাহায্য দরকার! আপনি README চেক করতে পারেন আপনার Spring অ্যাপ্লিকেশনে প্রজেক্টটি ইনস্টল করার ডিটেইলস জন্য। আমরা আপনার ফিডব্যাক, PRs, এবং ইস্যুর স্বাগত জানাই!