কম্পিউটার

রেডিসে হ্যাশ ব্যবহার করা

রেডিসে হ্যাশ ব্যবহার করা

রেডিস-এ হ্যাশগুলি একটি একক কী-এর অধীনে সম্পর্কিত ফিল্ড-মান জোড়া সংরক্ষণ করার একটি উপায়, যেখানে ক্ষেত্র এবং মান উভয়ই স্ট্রিং। Redis সামগ্রিকভাবে ডেটা স্ট্রাকচার এবং স্ট্রাকচারের প্রতিটি ক্ষেত্রেও পরিবর্তন করার অনুমতি দেয়। এটি একটি অ্যাপ্লিকেশনের বস্তুর জন্য এটিকে একটি দুর্দান্ত (এবং খুব দ্রুত) ব্যাকিং স্টোর করে তোলে৷

CLI উদাহরণ

দুটি ক্ষেত্র সহ একটি হ্যাশ তৈরি করুন:

127.0.0.1:6379> HMSET my_hash key1 "foo" key2 "bar"
OK

হ্যাশের সাথে যুক্ত ক্ষেত্র এবং মানগুলি তালিকাভুক্ত করুন:

127.0.0.1:6379> HGETALL my_hash
1) "key1"
2) "foo"
3) "key2"
4) "bar"

ক্ষেত্রগুলির একটির মান আপডেট করুন:

127.0.0.1:6379> HSET my_hash key1 "xyzzy"
(integer) 0
127.0.0.1:6379> HGET my_hash key1
"xyzzy"

হ্যাশ থেকে একটি একক ক্ষেত্র মুছুন:

127.0.0.1:6379> HDEL my_hash key2
(integer) 1
127.0.0.1:6379> HGETALL my_hash
1) "key1"
2) "xyzzy"

হ্যাশ মুছুন:

127.0.0.1:6379> DEL my_hash
(integer) 1
127.0.0.1:6379> HGETALL my_hash
(empty list or set)

রেডিসের চমৎকার ডকুমেন্টেশনে হ্যাশের জন্য উপলব্ধ কমান্ড সম্পর্কে আরও তথ্য রয়েছে। আমি আপনার জন্য সেখান থেকে কপি/পেস্ট করব না; পরিবর্তে, আমরা তাদের সাথে একটু মজা করতে যাচ্ছি।

ডওয়েমথির অ্যারে!

ডুয়েমথি'স অ্যারে হল একটি ছোট্ট উদাহরণ রোল প্লেয়িং গেম (আরপিজি) যা লিখেছেন হোয়াই দ্য লাকি স্টিফ-এর হোয়াই’স (মর্মস্পর্শী) গাইড টু রুবি রুবি মেটাপ্রোগ্রামিং ব্যাখ্যা করতে সাহায্য করতে। এখানে, আমরা একই RPG ধারণা নিতে যাচ্ছি, এবং Redis হ্যাশ ব্যবহার করে এটি বাস্তবায়ন করতে যাচ্ছি (একটি Redis অ্যারে থেকে সামান্য সাহায্যে)।

আমরা অ্যারের প্রতিটি দানবের জন্য একটি হ্যাশ তৈরি করব, এইরকম কিছু দেখতে:

name: "AssistantViceTentacleAndOmbudsman"
life: 320
strength: 6
charisma: 144
weapon: 50

এখানে অ্যারের গভীরতায় ডুব দেওয়ার একটি উদাহরণ রয়েছে:

>>> import redis
>>> import dwemthy
>>> conn = redis.StrictRedis(host="localhost", port=6379)
>>> dw = dwemthy.Array.new(conn,
      {
        "name": "AssistantViceTentacleAndOmbudsman",
        "life": 320,
        "strength": 6,
        "charisma": 144,
        "weapon": 50
      }
    )
"[Get ready. AssistantViceTentacleAndOmbudsman has emerged!]"
>>> rabbit = dwemthy.Rabbit(dw)
>>> rabbit.sword()
"[You hit with 2 points of damage!]"
"[Your enemy hit with 10 points of damage!]"
"[Rabbit has died!]"

এবং এখানে পুরো কোডটি রয়েছে, যদি আপনি অনুসরণ করতে চান:dwemthy.py

কোড হাইলাইট

প্রথমত, যখন কোনো ব্যবহারকারী প্রদত্ত ফ্যাক্টরি পদ্ধতিতে অ্যারে তৈরি করে, তখন আমরা আমাদের ডেটা স্ট্রাকচার সেটআপ করব এবং নতুন dwemthy.Array অবজেক্ট ফেরত দেব:

class Array(object):
    list_key = "dwemethys_array"

    ...

    @classmethod
    def new(cls, conn, *bad_guys):
        """ Create a new set of problems for our hero to boomerang! """

        conn.delete(cls.list_key)

        # Give each bad guy a cozy spot in the array!
        for bad_guy in bad_guys:
            key = uuid.uuid4()
            conn.hmset(key, bad_guy)
            conn.rpush(cls.list_key, key)

        dw_list = cls(conn)
        dw_list.next_enemy()
        return dw_list

এখানে conn.hmset খারাপ লোকের জন্য একটি হ্যাশ তৈরি করে। একবার এটি হয়ে গেলে, আমরা খারাপ লোকের কীটিকে একটি রেডিস তালিকায় ঠেলে দিই, যা এখানে একটি সাধারণ সারি হিসাবে ব্যবহার করা হচ্ছে৷

যখন সমস্ত খারাপ লোক সেট আপ করা হয়, তখন আমরা নিশ্চিত করি যে অ্যারের মাথায় থাকা একটি Array.next_enemy() পদ্ধতির সাথে প্রস্তুত:

class Array(object):    
    list_key = "dwemethys_array"

    ...

    def next_enemy(self):
        """ Bring out the next enemy for our rabbit to face! """

        # We're moving on!
        if self.current != None:
            self.conn.delete(self.current)

        enemy_key = self.conn.lpop(self.list_key)

        if enemy_key is None:
            # Like a boss!
            print "[Whoa.  You decimated Dwemthy's List!]"
        else:
            # Get the new enemy ready!
            self.current = enemy_key
            print "[Get ready. {} has emerged!]".format(self["name"])

শেষ লাইনে স্ব[“নাম”] অ্যারে অবজেক্টে __setitem__ এবং __getitem__ পদ্ধতি সংজ্ঞায়িত করে করা হয়। এটি আমাদের অ্যারেটিকে বেশিরভাগই একটি পাইথন ডিক্ট হিসাবে বিবেচনা করার অনুমতি দেয় এবং বর্তমান খারাপ লোকের ক্ষেত্রে ক্ষেত্রগুলি সহজে আনা এবং পরিবর্তন করার অনুমতি দেয়:

class Array(object):

    ...

    def __setitem__(self, key, value): 
        self.conn.hset(self.current, key, value)

    def __getitem__(self, key):
        value = self.conn.hget(self.current, key)

        # hashes only store strings!
        if key != "name":
            return int(value)

        return value

উপসংহার

রেডিস যে অগণিত উপায়ে আমাদের হ্যাশগুলিকে সংশোধন করার অনুমতি দেয় তা ডেভেলপারদের সমস্যাগুলির একটি বড় সেট সমাধান করতে এটি ব্যবহার করতে সক্ষম করে। আশা করি এই পোস্টটি আপনাকে আপনার নিজস্ব প্রকল্পে ব্যবহার করার জন্য ধারণা দিয়েছে৷


  1. জাভাস্ক্রিপ্ট অবজেক্টের অ্যারের অ্যারের পদ্ধতি ব্যবহার করছেন?

  2. কিভাবে C++ এ STL ব্যবহার করে একটি অ্যারে রিভার্স করবেন?

  3. শীর্ষ পাঁচটি রেডিস ব্যবহারের ক্ষেত্রে

  4. শীর্ষ 5 Redis ব্যবহারের ক্ষেত্রে