উবুন্টুতে রেডিস ইনস্টল


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

রেডিস

রেডিসের আছে ৭ ধরনের ডেটা স্টোর করার সুবিধা। এগুলো হচ্ছে, স্ট্রিং, সেট, সর্টেড সেট, লিস্ট, হ্যাশ, বিটম্যাপ এবং হাইপারলগলগ। এর আছে অত্যন্ত চমৎকার ডকুমেন্টেশন এবং বিশাল হেল্পফুল কমিউনিটি।

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

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

প্রথমেই রেডিস কম্পাইল করার জন্য আপনার পিসিতে কিছু ডিপেন্ডেন্সি লাগবে। সেগুলি ইনস্টল করতে পারবেন নিচের কমান্ডের মাধ্যমে-

sudo apt-get install build-essential
sudo apt-get install tcl8.5

এরপর আমরা রেডিসের অফিশিয়াল সাইট http://redis.io থেকে রেডিসের লেটেস্ট ভার্সনের সোর্স কোড ডাউনলোড করবো। আপনি চাইলে নিচের কমান্ডের সাহায্যেও ডাউনলোড করতে পারেন-

wget http://download.redis.io/releases/redis-3.0.2.tar.gz

এবার ডাউনলোড করা ফাইলটি আনটার করে নিন-

tar xzf redis-3.0.2.tar.gz

এবার রেডিসকে কম্পাইল এবং ইনস্টল করার জন্য নিচের কমান্ডগুলো দিন-

make
make test
sudo make install

রেডিসকে যদি আপনার সিস্টেমে গ্লোবালি ইনস্টল করতে চান তাহলে টার্মিনালে নিচের কমান্ড দুইটি লিখুন-

cd utils
sudo ./install_server.sh

আপনি যদি রেডিসকে একটি সার্ভিস হিসেবে ইনস্টল করতে চান, অর্থাৎ আপনার পিসি স্টার্ট হবার সাথে সাথেই রেডিস সার্ভারকে চালু করতে চান তাহলে নিচের কমান্ডটি টার্মিনালে লিখুন-

sudo update-rc.d redis_6379 defaults

ব্যাস, আপনার পিসিতে রেডিস ইনস্টল করা হয়ে গেছে। টেস্ট করার জন্য টার্মিনালে লিখুন-

redis-cli

আপনি আউটপুট হিসেবে রেডিস কনসোল দেখতে পারবেন-

127.0.0.1:6379>

তো শুরু করে দিন রেডিস ব্যবহার করা। হ্যাপি কোডিং…

লারাভেল ৫.১ এ কাস্টম পেজিনেশন


লারাভেলের ইলোকোয়েন্ট বা কোয়েরি বিল্ডার ব্যবহার করে আপনি খুব সহজেই পেজিনেশন তৈরি করতে পারেন। নিচে উদাহরন দেখুন-

public function show()
{
    $people = People::paginate(5);
    return view('poeple.list', compact('people'));
}

আর পেজিনেশন লিঙ্কগুলো ভিউ পেজে শো করতে হয় এভাবে-

{!! $people->render() !!}

কিন্তু আমরা সবসময় ইলোকোয়েন্ট বা কোয়েরি বিল্ডার ব্যবহার নাও করতে পারি। সেক্ষেত্রে পেজিনেশনের দরকার হলে সেটি করতে হবে এভাবে-

public function index()
{
    $people = collect([
        [
            'name'    => 'Milon',
            'website' => 'http://milon.im'
        ],
        [
            'name'    => 'Sadek',
            'website' => 'http://sadek.im'
        ],
        //many other items...
        [
            'name'    => 'Ashik',
            'website' => 'http://ashik.im'
        ]
    ]);

    $perPage     = 5;
    $currentPage = \Input::get('page') ?: 1;
    $pagedData   = $people->slice($currentPage * $perPage, $perPage)->all();
    $people  = new Illuminate\Pagination\LengthAwarePaginator($pagedData, count($people), $perPage, $currentPage);

    return view('people.list', compact('people'));
}

এখানে প্রথমে একটা বড় এ্যারে কে ‌‌collect() হেল্পার মেথডের সাহায্যে লারাভেলের কালেকশন ক্লাসের অবজেক্টে পরিনত করা হয়েছে। এরপর $perPage এ ঠিক করা হয়েছে প্রতি পেজে কয়টা ডেটা শো করবে। এরপর কারেন্ট পেজ কোনটা সেটা নির্ধারন করা হয়েছে ইউআরএলের GET প্যারামিটার থেকে। যদি কোন গেট প্যারামিটার না থাকে তবে আমরা ডিফল্টভাবে $currentPage = 1 ধরে নেই।

এরপর ডেটাকে স্লাইস করে নিতে হয়। এই স্লাইস মেথড কিভাবে কাজ করে সেটা লারাভেলের কালেকশনের ডকুমেন্টেশন দেখে নিতে পারেন। পরবর্তীতে এই ডেটাকে LengthAwarePaginator ক্লাসের ইন্সট্যান্স বানাতে হয়। LengthAwarePaginator ব্যবহার না করে আপনি চাইলে Paginator ক্লাসও ব্যবহার করতে পারেন। এ দুটির মধ্যে পার্থক্য হচ্ছে LengthAwarePaginator ক্লাসটিতে আপনার কালেকশনে মোট কয়টি ডেটা আছে সেটা পাঠাতে হয় কিন্তু Paginator এ সেটা পাঠাতে হয় না।

বাকি ভিউ আপনি নিচের মত করে রেন্ডার করতে পারেন-

<div class="container">
    <table class="table table-bordered">
        <tr>
            <th>Name</th>
            <th>Website</th>
        </tr>

        @foreach($collection as $data)
            <tr>
                <td>{{ $data['name'] }}</td>
                <td>{{ $data['website'] }}</td>
            </tr>
        @endforeach
    </table>
        
    {!! $collection->render() !!}
</div>

হ্যাপি কোডিং…