نوشتن و خواندن مقدار
SET مقدار را مینویسد و GET مقدار همان کلید را برمیگرداند.
SET user:42:name "Nina"GET user:42:name
الگوهای انتخاب کلید، انقضا و cache invalidation برای استفادهٔ قابل اتکا از Redis. نوع String برای متن، شمارنده و دادهٔ سریالشده مناسب است. دستورها از خواندن و نوشتن پایه تا افزایش عددی، نوشتن شرطی و تعیین انقضا را پوشش میدهند؛ برای چند فرمان مرتبط، نتیجه و رفتار اتمیک را در نسخهٔ Redis خود بررسی کنید. Set مجموعهای بدون ترتیب با عضوهای یکتا است. برای عضویت، حذف تکرار، انتخاب نمونه و محاسبهٔ اجتماع یا اشتراک میان مجموعهها از فرمانهای این بخش استفاده کنید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
SET مقدار را مینویسد و GET مقدار همان کلید را برمیگرداند.
SET user:42:name "Nina"GET user:42:nameEXPIRE زمان را بر حسب ثانیه و PEXPIRE بر حسب میلیثانیه میگیرد؛ TTL و PTTL زمان باقیمانده را نشان میدهند.
SET session:abc "active"EXPIRE session:abc 300TTL session:abcSET cache:item "value" EX 60NX از بازنویسی کلید موجود جلوگیری میکند؛ برای قفلهای توزیعشده باید انقضا، توکن یکتا و آزادسازی امن را هم طراحی کنید.
SET lock:report "token-123" NX EX 30INCR و DECR مقدار عددی را یک واحد تغییر میدهند؛ INCRBY و DECRBY اندازهٔ تغییر را مشخص میکنند.
INCR page:viewsINCRBY inventory:42 5DECR inventory:42DECRBY inventory:42 3INCRBYFLOAT شمارندهٔ اعشاری را تغییر میدهد؛ فرمانهای BIT برای خواندن یا تغییر بیتهای رشته و محاسبهٔ عملگرهای بیتی کاربرد دارند.
INCRBYFLOAT cart:total 1.25GETBIT feature:flags 3SETBIT feature:flags 3 1BITCOUNT feature:flagsBITOP OR flags:combined flags:a flags:bAPPEND متن را به انتهای مقدار اضافه میکند، STRLEN طول بایتی آن را میدهد و SETRANGE بخشی از رشته را از offset مشخص جایگزین میکند.
APPEND message " Redis"STRLEN messageSETRANGE message 0 "Hello"MGET چند کلید را در یک درخواست میخواند و GETRANGE بازهای از رشته را با offsetهای شامل ابتدا و انتها برمیگرداند.
MGET user:42:name user:42:roleGETRANGE article:title 0 9MSET چند کلید را یکجا مقداردهی میکند؛ GETSET مقدار تازه را مینویسد و مقدار قبلی را برمیگرداند.
MSET setting:theme "dark" setting:locale "fa"GETSET status "ready"SADD عضوهای تازه را اضافه میکند و SCARD تعداد عضوهای یکتای مجموعه را میشمارد.
SADD tags:article:7 "redis" "database" "cache"SCARD tags:article:7SMEMBERS همهٔ اعضا را میخواند و SISMEMBER وجود یک عضو مشخص را بررسی میکند.
SMEMBERS tags:article:7SISMEMBER tags:article:7 "redis"SREM عضوها را حذف میکند؛ SMOVE یک عضو را از مجموعهٔ مبدأ به مجموعهٔ مقصد منتقل میکند.
SREM tags:article:7 "cache"SMOVE tags:article:7 tags:article:8 "redis"SUNION، SINTER و SDIFF مجموعههای موقت نتیجه میسازند؛ گونههای STORE خروجی را در کلید دیگری ذخیره میکنند.
SUNION team:design team:frontendSINTER team:design team:frontendSDIFF team:design team:frontendSINTERSTORE team:shared team:design team:frontendSUNIONSTORE team:all team:design team:frontendSDIFFSTORE team:design:only team:design team:frontendSPOP عضو را از مجموعه خارج میکند؛ SRANDMEMBER عضو تصادفی را بدون حذف برمیگرداند.
SPOP queue:pendingSRANDMEMBER featured:items 3LPUSH و RPUSH عضو را در ابتدا یا انتهای فهرست اضافه میکنند؛ نسخهٔ X فقط وقتی فهرست موجود باشد عمل میکند.
LPUSH jobs:ready "job-3" "job-2"RPUSH jobs:ready "job-4"LPUSHX jobs:ready "job-1"LRANGE بازهٔ شامل ابتدا و انتها را میخواند؛ برای همهٔ عضوها معمولاً از 0 و -1 استفاده میشود.
LRANGE jobs:ready 0 -1LLEN jobs:readyLINDEX jobs:ready 0LPOP و RPOP عضو را همزمان برمیگردانند و از فهرست حذف میکنند؛ در Redis جدید میتوان تعداد عضو را نیز تعیین کرد.
LPOP jobs:readyRPOP jobs:readyBLPOP و BRPOP تا رسیدن عضو یا پایان timeout منتظر میمانند؛ برای workerهای همزمان رفتار مصرف و بازیابی پیام را طراحی کنید.
BLPOP jobs:ready 5BRPOP jobs:retry 5LINSERT نسبت به یک pivot درج میکند، LSET عضو یک index را عوض میکند و LREM تعداد مشخصی تطبیق را حذف میکند.
LINSERT jobs:ready BEFORE "job-4" "job-3a"LSET jobs:ready 0 "job-urgent"LREM jobs:ready 1 "job-old"LTRIM فهرست را به بازه نگه میدارد؛ LMOVE یا RPOPLPUSH عضو را از یک فهرست به دیگری منتقل میکند.
LTRIM events:recent 0 99LMOVE jobs:ready jobs:processing LEFT RIGHTHSET فیلد را مینویسد، HGET آن را میخواند و HEXISTS وجود فیلد را میسنجد.
HSET user:42 name "Nina" role "editor"HGET user:42 nameHEXISTS user:42 roleHMGET چند فیلد انتخابی و HGETALL همهٔ فیلدها و مقدارها را برمیگرداند.
HMGET user:42 name roleHGETALL user:42HKEYS فقط نام فیلدها و HVALS فقط مقدارها را میدهد؛ HLEN تعداد فیلدهای hash را میشمارد.
HKEYS user:42HVALS user:42HLEN user:42HINCRBY مقدار عددی یک فیلد را افزایش میدهد و HDEL فیلدهای انتخابی را حذف میکند.
HINCRBY product:7 stock 2HDEL user:42 temporary_noteZADD عضو و score را ثبت میکند؛ ZRANGE بر اساس امتیاز صعودی، ZRANK رتبه و ZSCORE امتیاز عضو را میدهد.
ZADD leaderboard 120 "user:42" 95 "user:17"ZRANGE leaderboard 0 9 WITHSCORESZRANK leaderboard "user:42"ZSCORE leaderboard "user:42"ZCOUNT تعداد عضوهای در بازهٔ امتیاز را میشمارد و ZINCRBY امتیاز عضو را افزایش میدهد.
ZCOUNT leaderboard 100 200ZINCRBY leaderboard 10 "user:17"ZRANGE leaderboard 0 9 REV WITHSCORESZREM leaderboard "user:17"ZUNIONSTORE و ZINTERSTORE اجتماع یا اشتراک را در مقصد مینویسند؛ وزندهی و aggregate را مطابق معنی امتیازها انتخاب کنید.
ZUNIONSTORE weekly:score 2 score:games score:bonus WEIGHTS 1 2 AGGREGATE SUMZINTERSTORE active:ranking 2 score:games users:activeGEOADD مختصات longitude/latitude و نام مکان را میپذیرد؛ GEOPOS مختصات و GEODIST فاصله را با واحد مشخص برمیگرداند.
GEOADD stores 51.3890 35.6892 "tehran"GEOPOS stores "tehran"GEODIST stores "tehran" "shiraz" kmGEOSEARCH عضوها را پیرامون نقطه یا عضو جستوجو میکند؛ GEOSEARCHSTORE نتیجه را در یک Sorted Set ذخیره میکند.
GEOSEARCH stores FROMMEMBER "tehran" BYRADIUS 20 km ASC COUNT 10PFADD مقدارها را به ساختار تخمینی اضافه میکند و PFCOUNT شمارش تقریبی یک یا چند ساختار را میدهد.
PFADD visits:2025-04-01 "user:42" "user:17"PFCOUNT visits:2025-04-01PFMERGE ساختارهای ورودی را در کلید مقصد ادغام میکند؛ خروجی همچنان تخمینی است.
PFMERGE visits:week visits:day:1 visits:day:2 visits:day:3PFCOUNT visits:weekXADD رخداد را با شناسهٔ خودکار اضافه میکند؛ XRANGE بازهای از رخدادها و XREAD رخدادهای بعد از شناسه را میخواند.
XADD orders * order_id 1042 status "created"XRANGE orders - +XREAD COUNT 10 STREAMS orders 0XGROUP گروه را میسازد، XREADGROUP پیام را به consumer میدهد و XACK پردازش موفق را تأیید میکند.
XGROUP CREATE orders order-workers 0 MKSTREAMXREADGROUP GROUP order-workers worker-1 COUNT 5 STREAMS orders >XACK orders order-workers 1710000000000-0EXISTS وجود کلید، TYPE نوع داده، TTL زمان باقیمانده و SCAN پیمایش تدریجی کلیدها را نشان میدهد.
EXISTS cache:product:7TYPE cache:product:7TTL cache:product:7SCAN 0 MATCH cache:product:* COUNT 100PERSIST انقضا را حذف میکند، RENAME کلید را تغییر نام میدهد و UNLINK حذف را به شکل ناهمگام انجام میدهد.
PERSIST cache:product:7RENAME cache:old cache:newUNLINK cache:expiredPING اتصال را بررسی میکند، INFO اطلاعات وضعیت میدهد، DBSIZE تعداد کلیدهای پایگاه انتخابشده و SELECT شمارهٔ پایگاه را عوض میکند.
PINGINFO serverDBSIZESELECT 1FLUSHDB دادههای پایگاه انتخابی و FLUSHALL همهٔ پایگاهها را پاک میکند؛ CONFIG و ACL نیز تنظیمات و دسترسیها را تغییر میدهند.
# فقط برای محیط آزمایشی و پس از تأیید مقصدFLUSHDBکلیدها را namespaced و قابلفهم بسازید؛ نسخه یا نوع منبع را در نام بگنجانید.
برای دادهٔ کششده TTL تعیین کنید تا مقدار قدیمی دائمی نماند.
الگوی cache-aside را با خواندن از کش و پرکردن از منبع بهکار ببرید.
هنگام تغییر منبع، invalidation یا بازسازی کش را صریح طراحی کنید.
برای جلوگیری از stampede، درخواستهای همزمان را هماهنگ یا بازهٔ انقضا را پراکنده کنید.
مقدارها را محدود و اندازهٔ payload را کنترل کنید.
از Redis بهعنوان تنها منبع حقیقت استفاده نکنید مگر دوام داده عمداً طراحی شده باشد.
timeout، اتصال مجدد و رفتار خطای کش را طوری تنظیم کنید که سرویس در دسترس بماند.
دسترسی شبکه و رمز Redis را محدود و از افشای پورت عمومی جلوگیری کنید.
hit rate، حافظه، eviction و latency را پایش کنید.
برای کلید cache، TTL و سیاست invalidation را کنار هم طراحی کنید؛ TTL بهتنهایی تازگی داده را تضمین نمیکند.
برای operation چندمرحلهای اتمیک از primitive مناسب مثل Lua script یا transaction پشتیبانیشده استفاده کنید.
برای پیمایش کلیدها در محیط پرترافیک از SCAN بهجای KEYS استفاده کنید و حلقهٔ cursor را تا پایان کامل کنید.
پیش از FLUSHDB، FLUSHALL یا تغییر ACL و CONFIG، مقصد اتصال و اثر فرمان را دوباره تأیید کنید.