Redis یا ردیس یک Data Store سریع و عمدتاً مبتنی بر حافظه است که برای کشینگ، شمارنده، صف، Pub/Sub و نگهداری ساختارهای داده استفاده میشود. Redis فقط «کش» نیست، اما بسیاری از پروژهها از آن به عنوان کش اشتراکی بهره میبرند.
ساختارهای داده ردیس
| ساختار | سناریو |
|---|---|
| String | کش پاسخ، نرخ درخواست |
| Hash | فیلدهای پروفایل |
| List | صف ساده |
| Set | برچسبهای یکتا |
| Sorted Set | رتبهبندی |
| Stream | جریان پیام و Consumer Group |
دستورات پرکاربرد Redis CLI
| دستور | کاربرد | مثال |
|---|---|---|
PING | بررسی اتصال | PING |
SET | ذخیره مقدار و TTL | SET cart:42 "3" EX 120 |
GET | خواندن مقدار | GET cart:42 |
DEL | حذف کلید | DEL cart:42 |
EXISTS | بررسی وجود کلید | EXISTS cart:42 |
EXPIRE | اعمال مدت اعتبار | EXPIRE cart:42 300 |
TTL | زمان باقیمانده تا انقضا | TTL cart:42 |
INCR | افزایش اتمیک شمارنده | INCR views:product:42 |
DECR | کاهش شمارنده | DECR stock:sku:2 |
MGET | خواندن چند کلید | MGET key:1 key:2 |
MSET | ثبت چند مقدار | MSET a 1 b 2 |
HSET | ثبت فیلد هش | HSET user:42 name "Sam" |
HGETALL | خواندن فیلدهای هش | HGETALL user:42 |
LPUSH | افزودن به لیست از ابتدا | LPUSH jobs "task1" |
RPOP | خارج کردن از انتهای لیست | RPOP jobs |
SADD | افزودن به Set | SADD tags:42 php |
SMEMBERS | نمایش اعضای Set | SMEMBERS tags:42 |
ZADD | افزودن به Sorted Set | ZADD leaderboard 25 user:42 |
ZRANGE | خواندن اعضا در ترتیب | ZRANGE leaderboard 0 -1 |
XADD | افزودن رخداد به Stream | XADD orders * order_id 42 |
XREAD | خواندن رخداد Stream | XREAD COUNT 5 STREAMS orders 0 |
SCAN | پیمایش تدریجی کلیدها | SCAN 0 MATCH cart:* COUNT 100 |
INFO | مشاهده آمار سرویس | INFO memory |
DBSIZE | شمارش کلیدهای DB انتخابی | DBSIZE |
TYPE | نوع داده یک کلید | TYPE cart:42 |
PERSIST | حذف زمان انقضا | PERSIST cart:42 |
روش اجرا و چند مثال
redis-cli PING
redis-cli SET product:42 "in-stock" EX 120
redis-cli GET product:42
redis-cli INCR views:product:42
redis-cli SCAN 0 MATCH product:* COUNT 100
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('product:42', 'active', ex=120)
print(r.get('product:42'))
// Laravel, when the Redis connection is configured
Redis::setex('product:42', 120, 'active');
$status = Redis::get('product:42');
ردیس در مقایسه با پایگاه داده و بروکر پیام
برای داده دائمی و رابطههای پیچیده معمولاً دیتابیس اصلی را با ردیس جایگزین نمیکنیم. برای صفهای پیچیده باید نیاز به Ack، Retry، Consumer Group و تضمین تحویل مشخص شود. Redis Streams با List تفاوت دارد و Kafka برای ذخیره رخدادهای پایدار و پخش مجدد در مقیاس بزرگ طراحی متفاوتی دارد.
نکته فنی
KEYS روی فضای کلید بزرگ میتواند مسدودکننده باشد. در محیط عملیاتی از SCAN استفاده کنید. از دستور FLUSHALL روی داده واقعی استفاده نکنید.
اصطلاحات مرتبط: کشینگ، کش استمپید، صف، مسیج بروکر، دیستریبیوتد لاک، ریت لیمیتر.