تثبيت Redis و Memcached: دليل طبقة التخزين المؤقت
تثبيت Redis و Memcached على Ubuntu/Debian، الأوامر الأساسية، إعدادات الاستمرارية، تكوين TTL، مقارنة Redis مقابل Memcached، وتكامل التطبيقات.
جدول المحتويات
تثبيت Redis و Memcached: دليل طبقة التخزين المؤقت
طبقة التخزين المؤقت هي مكوّن بنية تحتية حيوي يحسّن أداء تطبيقات الويب بشكل كبير. من خلال تخزين استعلامات قاعدة البيانات واستجابات API ونتائج الحسابات في الذاكرة، تتيح الاستجابة في أجزاء من الثانية للطلبات المتكررة. يتناول هذا الدليل تثبيت وتكوين وتكامل Redis و Memcached — أكثر نظامَي تخزين مؤقت استخداماً.
Redis مقابل Memcached
يوفر كلا النظامين تخزين بيانات عالي الأداء في الذاكرة، لكنهما يستهدفان حالات استخدام مختلفة:
| الميزة | Redis | Memcached |
|---|---|---|
| هياكل البيانات | String, Hash, List, Set, ZSet | String فقط |
| الاستمرارية | RDB + AOF | لا يوجد |
| النسخ المتماثل | Master-Replica + Cluster | لا يوجد |
| Pub/Sub | نعم | لا |
| Lua scripting | نعم | لا |
| تعدد الخيوط | جزئي (I/O) | كامل |
| كفاءة الذاكرة | متوسطة | عالية |
يُوصى بـ Redis للمشاريع الجديدة. بفضل هياكل البيانات الغنية ودعم الاستمرارية والنسخ المتماثل، يغطي حالات استخدام أكثر بكثير. يُفضَّل Memcached فقط عند الحاجة إلى تخزين مؤقت بسيط للسلاسل وأقصى أداء متعدد الخيوط.
تثبيت Redis على Ubuntu/Debian
التثبيت من مستودع الحزم
# تحديث قائمة الحزم
apt update
# تثبيت Redis
apt install -y redis-server
# التحقق من حالة الخدمة
systemctl status redis-server
# تفعيل التشغيل التلقائي
systemctl enable redis-server
التثبيت من المستودع الرسمي لـ Redis (أحدث إصدار)
# تثبيت الأدوات المطلوبة
apt install -y curl gpg
# إضافة مفتاح GPG لـ Redis
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# إضافة المستودع
echo 'deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '$(lsb_release -cs)' main' | tee /etc/apt/sources.list.d/redis.list
# التحديث والتثبيت
apt update
apt install -y redis
التحقق من إصدار Redis
redis-server --version
# الإخراج: Redis server v=7.x.x ...
redis-cli --version
# الإخراج: redis-cli 7.x.x
تثبيت Redis على CentOS/AlmaLinux/Rocky Linux
# تفعيل مستودع EPEL
dnf install -y epel-release
# تثبيت Redis
dnf install -y redis
# تشغيل الخدمة وتفعيلها
systemctl start redis
systemctl enable redis
# التحقق من الحالة
systemctl status redis
تكوين Redis
ملف التكوين الأساسي
# تعديل ملف التكوين
nano /etc/redis/redis.conf
# عنوان الاستماع (localhost فقط)
bind 127.0.0.1
# المنفذ (الافتراضي 6379)
port 6379
# حماية بكلمة مرور
requirepass كلمةمرورRedisقوية123!
# الحد الأقصى لاستخدام الذاكرة
maxmemory 512mb
# سياسة الإخلاء عند امتلاء الذاكرة
maxmemory-policy allkeys-lru
# التشغيل كخدمة خلفية
daemonize yes
# ملف السجل
logfile /var/log/redis/redis-server.log
# عدد قواعد البيانات
databases 16
تطبيق التكوين
systemctl restart redis-server
# التحقق من التكوين
redis-cli -a كلمةمرورRedisقوية123! ping
# الإخراج: PONG
الأوامر الأساسية لـ Redis
الاتصال والعمليات الأساسية
# الاتصال بـ Redis CLI
redis-cli
# الاتصال بكلمة مرور
redis-cli -a كلمةمرورRedisقوية123!
# الاتصال بخادم بعيد
redis-cli -h 192.168.1.100 -p 6379 -a كلمةالمرور
# اختبار الاتصال
PING
# الاستجابة: PONG
# تعيين قيمة نصية
SET مستخدم:1:اسم 'أحمد محمد'
# قراءة القيمة
GET مستخدم:1:اسم
# تعيين قيمة مع TTL (بالثواني)
SETEX جلسة:abc123 3600 'بيانات_المستخدم'
# التحقق من الوقت المتبقي
TTL جلسة:abc123
# حذف القيمة
DEL مستخدم:1:اسم
# التحقق من وجود المفتاح
EXISTS مستخدم:1:اسم
# سرد جميع المفاتيح (استخدم بحذر في الإنتاج)
KEYS *
# البحث بنمط معين
KEYS مستخدم:*
أوامر Hash
# تعيين hash
HSET مستخدم:1 اسم 'أحمد' email 'ahmed@example.com' عمر 30
# قراءة حقل hash
HGET مستخدم:1 اسم
# قراءة جميع حقول hash
HGETALL مستخدم:1
# حذف حقل hash
HDEL مستخدم:1 عمر
# التحقق من وجود حقل hash
HEXISTS مستخدم:1 email
أوامر List
# إضافة عنصر للقائمة (يساراً)
LPUSH مهام 'مهمة1' 'مهمة2'
# إضافة عنصر للقائمة (يميناً)
RPUSH مهام 'مهمة3'
# الحصول على عنصر من القائمة (يساراً)
LPOP مهام
# طول القائمة
LLEN مهام
# نطاق القائمة
LRANGE مهام 0 -1
أوامر Set و Sorted Set
# إضافة عنصر إلى set
SADD وسوم 'redis' 'cache' 'nosql'
# سرد أعضاء set
SMEMBERS وسوم
# إضافة إلى sorted set بنقاط
ZADD لوحة_المتصدرين 1500 'لاعب1' 2300 'لاعب2' 800 'لاعب3'
# سرد مرتب (تصاعدي)
ZRANGE لوحة_المتصدرين 0 -1 WITHSCORES
# سرد مرتب (تنازلي)
ZREVRANGE لوحة_المتصدرين 0 2 WITHSCORES
إعدادات استمرارية Redis
لقطة RDB (قاعدة بيانات Redis)
يكتب RDB لقطة من مجموعة البيانات بأكملها على القرص على فترات محددة:
# /etc/redis/redis.conf
# الحفظ عند تغيير واحد في 900 ثانية
save 900 1
# الحفظ عند 10 تغييرات في 300 ثانية
save 300 10
# الحفظ عند 10000 تغيير في 60 ثانية
save 60 10000
# اسم ملف RDB
dbfilename dump.rdb
# مجلد RDB
dir /var/lib/redis
AOF (ملف الإلحاق فقط)
يُلحق AOF كل عملية كتابة بملف سجل، مما يوفر استمرارية أكثر موثوقية:
# تفعيل AOF
appendonlyfile yes
# اسم ملف AOF
appendfilename 'appendonly.aof'
# سياسة المزامنة
# always: عند كل كتابة (الأكثر أماناً، الأبطأ)
# everysec: كل ثانية (موصى به)
# no: اترك للنظام (الأسرع، الأقل أماناً)
appendsync everysec
# عتبة إعادة كتابة AOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
يُوصى باستخدام كل من RDB و AOF في بيئة الإنتاج. يوفر RDB إعادة تشغيل سريعة، بينما يقلل AOF من فقدان البيانات.
تثبيت Memcached
التثبيت على Ubuntu/Debian
# تحديث قائمة الحزم
apt update
# تثبيت Memcached
apt install -y memcached libmemcached-tools
# التحقق من حالة الخدمة
systemctl status memcached
# تفعيل التشغيل التلقائي
systemctl enable memcached
التثبيت على CentOS/AlmaLinux
# تثبيت Memcached
dnf install -y memcached
# تشغيل الخدمة وتفعيلها
systemctl start memcached
systemctl enable memcached
تكوين Memcached
# تعديل ملف التكوين
nano /etc/memcached.conf
# حد الذاكرة (ميغابايت)
-m 256
# عنوان الاستماع
-l 127.0.0.1
# المنفذ
-p 11211
# الحد الأقصى للاتصالات
-c 1024
# عدد الخيوط (بناءً على أنوية المعالج)
-t 4
# الحجم الأقصى للكائن (بايت)
-I 1m
# إعادة تشغيل الخدمة
systemctl restart memcached
# اختبار الاتصال
echo 'stats' | nc 127.0.0.1 11211
الأوامر الأساسية لـ Memcached
# الاتصال عبر telnet
telnet 127.0.0.1 11211
# تعيين قيمة (مفتاح، علامة، TTL ثواني، حجم بايت)
set جلسة:xyz 0 3600 12
بيانات_المستخدم
# الحصول على قيمة
get جلسة:xyz
# حذف قيمة
delete جلسة:xyz
# عرض الإحصائيات
stats
# مسح جميع البيانات
flush_all
تكامل التطبيقات
PHP مع Redis
# تثبيت امتداد PHP Redis
apt install -y php-redis
systemctl restart php8.x-fpm
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('كلمةمرورRedisقوية123!');
// الكتابة في التخزين المؤقت
$redis->setex('مستخدم:1', 3600, json_encode(['اسم' => 'أحمد', 'email' => 'ahmed@example.com']));
// القراءة من التخزين المؤقت
$بيانات = $redis->get('مستخدم:1');
if ($بيانات) {
$مستخدم = json_decode($بيانات, true);
} else {
// الجلب من قاعدة البيانات والتخزين المؤقت
$مستخدم = جلب_من_قاعدة_البيانات(1);
$redis->setex('مستخدم:1', 3600, json_encode($مستخدم));
}
Node.js مع Redis
# تثبيت حزمة ioredis
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'كلمةمرورRedisقوية123!'
});
// الكتابة في التخزين المؤقت
await redis.setex('منتج:42', 1800, JSON.stringify({ اسم: 'لابتوب', سعر: 999 }));
// القراءة من التخزين المؤقت
const بيانات = await redis.get('منتج:42');
if (بيانات) {
const منتج = JSON.parse(بيانات);
console.log(منتج);
}
// مسح التخزين المؤقت
await redis.del('منتج:42');
Python مع Redis
# تثبيت حزمة redis-py
pip install redis
import redis
import json
r = redis.Redis(
host='127.0.0.1',
port=6379,
password='كلمةمرورRedisقوية123!',
decode_responses=True
)
# الكتابة في التخزين المؤقت
r.setex('مقال:5', 7200, json.dumps({'عنوان': 'دليل Redis', 'محتوى': '...'}))
# القراءة من التخزين المؤقت
بيانات = r.get('مقال:5')
if بيانات:
مقال = json.loads(بيانات)
إدارة الخدمات
# إدارة خدمة Redis
systemctl start redis-server
systemctl stop redis-server
systemctl restart redis-server
systemctl status redis-server
# عرض سجلات Redis
journalctl -u redis-server -f
tail -f /var/log/redis/redis-server.log
# الحصول على معلومات Redis عبر CLI
redis-cli INFO server
redis-cli INFO memory
redis-cli INFO stats
# إدارة خدمة Memcached
systemctl start memcached
systemctl stop memcached
systemctl restart memcached
systemctl status memcached
الخلاصة
Redis و Memcached حلول تخزين مؤقت قوية تحسّن أداء التطبيقات بشكل ملحوظ. تجعل هياكل البيانات الغنية وميزات الاستمرارية في Redis منه مثالياً لمعظم السيناريوهات، بينما يمكن تفضيل Memcached لاحتياجات التخزين المؤقت البسيطة عالية الأداء. يعمل كلا النظامين بسلاسة على خوادم REXE.
مقالات ذات صلة
تثبيت MySQL و MariaDB: دليل الإدارة الأساسية
تثبيت MySQL و MariaDB على Linux خطوة بخطوة، mysql_secure_installation، إنشاء قواعد البيانات والمستخدمين، أوامر SQL الأساسية، تكوين الوصول عن بُعد وضبط الأداء.
دليل تثبيت PostgreSQL وإدارته الأساسية
تثبيت PostgreSQL على Ubuntu/Debian وRHEL/CentOS، إنشاء المستخدمين وقواعد البيانات، أوامر SQL الأساسية، إعداد الاتصال عن بُعد واستراتيجيات النسخ الاحتياطي. دليل خطوة بخطوة.
تثبيت phpMyAdmin والوصول الآمن
دليل خطوة بخطوة لتثبيت phpMyAdmin على Apache وNginx، وإعداد SSL، وإدارة المستخدمين، وتقييد IP، وتعزيز الأمان.