কম্পিউটার টিউটোরিয়াল

Redis 습득하기: 궁극의 데이터 구조 서버에 대한 초보자 가이드

Redis-এর গতি এবং ফ্লেক্সিবিলিটি এটিকে ডেভেলপারদের জন্য একটি অত্যন্ত শক্তিশালী টুল করে তোলে এবং এটি বিভিন্নভাবে ব্যবহার করা যায়। যদিও Redis-কে প্রায়শই একটি কী-ভ্যালু স্টোর বলা হয়, এটি আরও ভালোভাবে বর্ণনা করা যায় একটি ডেটা স্ট্রাকচার সার্ভার হিসেবে, কারণ এটি ৫টি ভিন্ন ডেটা স্ট্রাকচার টাইপ সাপোর্ট করে, অর্থাৎ:

  • Strings (স্ট্রিংস)
  • Hashes (হ্যাশেস)
  • Lists (লিস্টস)
  • Sets (সেটস)
  • Sorted sets (সর্টেড সেটস)

প্রতিটি স্ট্রাকচার টাইপের শেয়ার্ড কমান্ডস রয়েছে সেইসাথে কিছু কমান্ড যা একটি নির্দিষ্ট স্ট্রাকচার টাইপের জন্য স্পেসিফিক।

এই পরিচিতি Redis কীভাবে ব্যবহার করবেন তার বেসিক্স এবং বিভিন্ন ডেটা স্ট্রাকচারের একটি ওভারভিউ কভার করবে। আমরা কিছু বেসিক কমান্ড কভার করব, যদিও মনে রাখবেন Redis-র ১৬০টির বেশি কমান্ড রয়েছে লেখার সময়ে এবং আপনি চমৎকার ডকুমেন্টেশন পাবেন redis.io/commands-এ।

Redis শুরু করা

ObjectRocket for Redis দ্বারা প্রদত্ত একটি ইনস্ট্যান্স ব্যবহার করুন বা লোকালি Redis ইনস্টল করুন।

লোকালি ইনস্টল করতে, ডাউনলোড, এক্সট্রাক্ট এবং কম্পাইল করুন কোড:

$ wget https://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

লোকাল ইনস্ট্যান্স শুরু করুন:

$ src/redis-server

Redis ব্যবহার করা

এখন আপনি বিল্ট-ইন ক্লায়েন্ট ব্যবহার করে Redis-র সাথে ইন্টারঅ্যাক্ট করার জন্য প্রস্তুত। ObjectRocket for Redis ইনস্ট্যান্সের জন্য redis-cli শুরু করুন হোস্টনেম, পোর্ট, এবং পাসওয়ার্ডের সাথে:

$ redis-cli -h my-host -p 1234 -a mypassword

আপনি যদি একটি লোকাল ইনস্ট্যান্স ব্যবহার করেন, হোস্ট হলো localhost, ডিফল্ট পোর্ট ৬৩৭৯, এবং ডিফল্টভাবে কোনো পাসওয়ার্ড নেই।

$ redis-cli

GET এবং SET

সবচেয়ে সিম্পল লেভেলে, Redis কে একটি কী-ভ্যালু স্টোর হিসেবে বর্ণনা করা যায়। SET foo bar কমান্ড ইস্যু করলে আপনি foo-এর ভ্যালু bar-এ সেট করেন। উদাহরণস্বরূপ, আপনি যা अभी শুরু করেছেন সেই redis-cli থেকে নিচের কমান্ড ইস্যু করুন:

redis> SET foo bar
OK

এখন GET কমান্ড দিয়ে foo-এর ভ্যালু পড়ুন।

redis> GET foo
"bar"

EXPIRE এবং TTL

আপনি কীগুলিকে একটি নির্দিষ্ট পরিমাণ সময়ে এক্সপায়ার হতে সেট করতে পারেন EXPIRE কমান্ড ব্যবহার করে। TTL রিপোর্ট করে কী এক্সপায়ার হওয়ার আগে باقی সময়।

redis> SET foo bar
OK
redis> EXPIRE foo 120
(integer) 1
redis> TTL foo
(integer) 113

Lists (লিস্টস)

Redis-এর একটি التمييزকারী বৈশিষ্ট্য হলো একটি কী-এর ভ্যালু ডেটা স্ট্রাকচার হতে পারে, শুধু ভ্যালু নয়।

একটি লিস্ট তৈরি করতে LPUSH বা RPUSH ব্যবহার করুন। যদি একটি লিস্ট ইতিমধ্যে থাকে, LPUSH দেয়া ভ্যালুটি লিস্টের শুরুতে যোগ করবে এবং RPUSH এটিকে শেষে যোগ করবে।

redis> LPUSH cities "San Francisco"
(integer) 1
redis> RPUSH cities "Austin"
(integer) 2
redis> LRANGE cities 0 -1
1. "San Francisco"
2. "Austin"
redis> SORT cities alpha
1. "Austin"
2. "San Francisco"
redis> LPOP cities
"San Francisco"
redis> LRANGE cities 0 -1
1. "Austin"

SORT কমান্ড ALPHA আর্গুমেন্টের সাথে লেক্সিকোগ্রাফিক্যালি অ্যাসেন্ডিং অর্ডারে সর্ট করে। ডিসেন্ডিং অর্ডারে সর্ট করতে, SORT কমান্ডের সাথে DESC আর্গুমেন্ট অ্যাপেন্ড করুন।

RPOP কমান্ড লিস্টের শেষ থেকে একটি এলিমেন্ট পপ করে। LPOP লিস্টের শুরু থেকে একটি এলিমেন্ট পপ করে।

Sets (সেটস)

সেটস লিস্টের মত, ছাড়া প্রতিটি এলিমেন্ট শুধু একবার ঘটতে পারে। নিচের উদাহরণে আমরা US স্টেটস একটি ছোট সেট তৈরি করব। SADD কমান্ড সেটে একটি আইটেম যোগ করে, যদি আইটেমটি ইতিমধ্যে সেটে না থাকে। যদি আইটেমটি না থাকে, এটি যোগ হয় এবং ১ রিটার্ন হয়; অন্যথায়, ০ রিটার্ন হয়। SMEMBERS সেটের সব আইটেম রিটার্ন করে। SCARD সেটের এলিমেন্টের সংখ্যা রিটার্ন করে। SREM লিস্ট থেকে একটি আইটেম রিমুভ করে।

redis> SADD states "Vermont"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
redis> SADD states "Texas"
(integer) 1
redis> SCARD states
(integer) 2
redis> SADD states "Vermont"
(integer) 0
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
redis> SADD states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
3. "California"
redis> SREM states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"

Hashes (হ্যাশেস)

হ্যাশেস ব্যবহার করে, আপনি প্রতিটি কী-তে ফিল্ডে স্ট্রিং ভ্যালু অ্যাসাইন এবং ম্যাপ করতে পারেন। কয়েকটি ফিল্ড সহ একটি হ্যাশ খুব কম স্পেসে স্টোর হয়, তাই আপনি মিলিয়ন মিলিয়ন অবজেক্ট একটি ছোট Redis ইনস্ট্যান্সে স্টোর করতে পারেন। নিচের উদাহরণে, user:1-এর নাম "john racker" সেট করা হয় HSET কমান্ড ব্যবহার করে। HGET কমান্ড user-এর নাম ভ্যালু পেতে ব্যবহার হয়। HGETALL নির্দিষ্ট কী-র সাথে সম্পর্কিত সব কী এবং ভ্যালু রিটার্ন করে।

redis> HSET user:1 name "john racker"
(integer) 1
redis> HGET user:1 name
"joe racker"
redis> HSET user:1 company "objectrocket"
(integer) 1
redis> HGET user:1 company
"ObjectRocket"
redis> HSET user:1 city "austin"
(integer) 1
redis> HGET user:1 city
"austin"
redis> HGETALL user:1
1. "name"
2. "john racker"
3. "company"
4. "objectrocket"
5. "city"
6. "austin"

SORTED SETS (সর্টেড সেটস)

সর্টেড সেটস সেটসের মত যে নন-রিপিটিং স্ট্রিংস কলেকশন, তবে প্রতিটি মেম্বার একটি স্কোরের সাথে অ্যাসোসিয়েটেড। সর্টেড সেটস তাদের স্কোর অনুযায়ী অ্যাসেন্ডিং-এ সর্টেড থাকে। একই এলিমেন্ট শুধু একবার এক্সিস্ট করে, কোনো রিপিটেড এলিমেন্ট অনুমোদিত নয়, যদিও স্কোর রিপিট হতে পারে।

এই উদাহরণে আমরা ১০/২৩/২০১৪ তারিখ পর্যন্ত ইংলিশ প্রিমিয়ার লিগের শীর্ষ ৫ টিমের পয়েন্টস টোটাল যোগ করব:

redis> ZADD EPL 22 "chelsea"
(integer) 1
redis> ZADD EPL 17 "man city"
(integer) 1
redis> ZADD EPL 16 "southampton"
(integer) 1
redis> ZADD EPL 13 "liverpool"
(integer) 1
redis> ZADD EPL 13 "west ham"
(integer) 1
redis> ZRANK EPL "chelsea"
(integer) 3
redis> ZRANK EPL "liverpool"
(integer) 0
redis> ZRANK EPL "arsenal"
(nil)

এরপর আমরা টিমগুলো র‍্যাঙ্ক করব পয়েন্টস টোটালের ভিত্তিতে ZRANGE ব্যবহার করে:

redis> ZRANGE EPL 0 -1
1) "liverpool"
2) "west ham"
3) "southampton"
4) "man city"
5) "chelsea"
redis> ZRANGE EPL 2 3
1) "southampton"
2) "man city"

মনে রাখুন, সেটস অ্যাসেন্ডিং অর্ডারে সর্টেড থাকে, তাই টিমদের র‍্যাঙ্ক তাদের পয়েন্টস টোটালের ভিত্তিতে দেখতে হলে আমাদের ZREVRANGE ব্যবহার করতে হবে

redis> ZREVRANGE EPL 0 -1
1) "chelsea"
2) "man city"
3) "southampton"
4) "west ham"
5) "liverpool"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "man city"
4) "17"
5) "southampton"
6) "16"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"

এরপর, Southampton একটি গেম খেলে এবং জিতেছে, ৩ পয়েন্ট পেয়েছে। আমরা ZINCRBY ব্যবহার করব স্কোর ইনক্রিমেন্ট করার জন্য, এবং ZREVRANGE দেখব কীভাবে Southampton দ্বিতীয় স্থানে চলে এসেছে লিগে। আমরা ZREVRANK ও ব্যবহার করতে পারি Southampton-এর র‍্যাঙ্ক দেখতে। নোট: র‍্যাঙ্ক ০-বেসড, মানে সবচেয়ে উচ্চ স্কোর যে মেম্বারের (Chelsea) তার র‍্যাঙ্ক ০।

redis> ZINCRBY EPL 3 "southampton"
"19"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "southampton"
4) "19"
5) "man city"
6) "17"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"
redis> ZREVRANK EPL "southampton"
(integer) 1
redis> ZREVRANGEBYSCORE EPL 25 (15
1) "chelsea"
2) "southampton"
3) "man city"

আগামি সপ্তাহগুলোতে আমরা Redis-র গভীরে যাব এবং এই চমৎকার ডেভেলপার টুলের কিছু ইউজ কেস নিয়ে আলোচনা করব। আপনার যদি Redis চালানোর বা আপনি কীভাবে আপনার অ্যাপ্লিকেশন স্ট্যাকে Redis ব্যবহার করছেন সেটি বলতে চান সংক্রান্ত কোনো প্রশ্ন থাকে, আমাদের একটি লাইন ড্রপ করুন।

  1. স্টারডকের সেরা কাস্টোমাইজেশন অ্যাপস দিয়ে উইন্ডোজ ১১ রূপান্তর করুন

  2. সারফেস পেন মাস্টার করুন: একটি সমৃদ্ধ হলিডে গাইড

  3. Android Messages for Web মাস্টার করুন: দ্রুত সেটআপ ও টিপস

  4. Xen ভার্চুয়ালাইজেশনের সাথে শুরু: একটি কম্প্রিহেনসিভ বিগিনার্স গাইড