انتشار Redis 7.0 DBMS که متعلق به کلاس سیستم های NoSQL است منتشر شد. Redis عملکردهایی را برای ذخیره دادههای کلید/مقدار ارائه میکند که با پشتیبانی از فرمتهای دادههای ساختاریافته مانند لیستها، هشها و مجموعهها، و همچنین توانایی اجرای کنترلکنندههای اسکریپت سمت سرور در Lua، تقویت شده است. کد پروژه تحت مجوز BSD ارائه شده است. ماژولهای اضافی که قابلیتهای پیشرفتهای را برای کاربران شرکتی ارائه میدهند، مانند RediSearch، RedisGraph، RedisJSON، RedisML، RedisBloom، تحت مجوز اختصاصی RSAL از سال ۲۰۱۹ عرضه شدهاند. پروژه GoodFORM که اخیراً دچار رکود شده است، تلاش کرد تا توسعه نسخه های باز این ماژول ها را تحت مجوز AGPLv2019 ادامه دهد.
برخلاف سیستمهای ذخیرهسازی درون حافظه مانند Memcached، Redis تضمین میکند که دادهها به طور مداوم روی دیسک ذخیره میشوند و تضمین میکند که پایگاه داده در صورت خرابی دست نخورده باقی میماند. کد منبع پروژه تحت مجوز BSD توزیع شده است. کتابخانه های کلاینت برای اکثر زبان های معروف از جمله Perl، Python، PHP، Java، Ruby و Tcl در دسترس هستند. Redis از تراکنشهایی پشتیبانی میکند که به شما امکان میدهد گروهی از دستورات را در یک مرحله اجرا کنید، از ثبات و سازگاری (دستورات سایر درخواستها نمیتوانند تداخلی ایجاد کنند) در اجرای مجموعهای از دستورات، و در صورت بروز مشکل، به شما امکان میدهد به عقب برگردید. تغییر می کند. تمام داده ها به طور کامل در حافظه رم ذخیره می شوند.
دستوراتی مانند افزایش/کاهش، لیست استاندارد و عملیات مجموعه (اتحاد، تقاطع)، تغییر نام کلید، انتخاب های متعدد و توابع مرتب سازی برای مدیریت داده ها ارائه شده است. دو حالت ذخیرهسازی پشتیبانی میشود: همگامسازی دورهای دادهها با دیسک و نگهداری گزارش تغییرات روی دیسک. در حالت دوم، ایمنی کامل همه تغییرات تضمین شده است. امکان سازماندهی تکثیر داده های master-slave در چندین سرور وجود دارد که در حالت غیر مسدود کننده انجام می شود. حالت پیام «انتشار/اشتراک» نیز موجود است که در آن کانالی ایجاد میشود و پیامهای آن با اشتراک به مشتریان توزیع میشود.
تغییرات کلیدی در Redis 7.0:
- پشتیبانی از عملکردهای سمت سرور اضافه شده است. برخلاف اسکریپتهای پشتیبانی شده قبلی در زبان Lua، توابع به برنامه متصل نیستند و هدفشان اجرای منطق اضافی است که قابلیتهای سرور را گسترش میدهد. توابع به طور جدانشدنی با داده ها و در رابطه با پایگاه داده پردازش می شوند و نه با برنامه کاربردی، از جمله تکرار و ذخیره شدن در ذخیره سازی دائمی.
- نسخه دوم ACL پیشنهاد شده است که به شما امکان می دهد دسترسی به داده ها را بر اساس کلیدها کنترل کنید و به شما امکان می دهد مجموعه قوانین مختلفی را برای دسترسی به دستورات با قابلیت اتصال چندین انتخابگر (مجموعه مجوزها) به هر کاربر تعریف کنید. هر کلید را می توان با یک مرجع خاص شناسایی کرد، به عنوان مثال، می توانید دسترسی را فقط به خواندن یا نوشتن زیرمجموعه خاصی از کلیدها محدود کنید.
- یک پیادهسازی پارتیشن بندی شده (تخت شده) از پارادایم توزیع پیام Publish-Subscribe که در یک خوشه اجرا میشود، ارائه میشود، که در آن یک پیام به یک گره خاص که یک کانال پیام به آن متصل است، ارسال میشود و پس از آن این پیام به گرههای باقیمانده هدایت میشود. در خرده مشتریان می توانند با عضویت در یک کانال، هم با اتصال به گره اصلی و هم به گره های فرعی بخش، پیام ها را دریافت کنند. کنترل با استفاده از دستورات SSUBSCRIBE، SUNSUBSCRIBE و SPUBLISH انجام می شود.
- پشتیبانی از پردازش دستورات فرعی در اکثر زمینه ها اضافه شده است.
- دستورات جدید اضافه شده:
- ZMPOP، BZMPOP.
- LMPOP، BLMPOP.
- SINTERCARD، ZINTERCARD.
- SPUBLISH, SSUBSCRIBE, SUNSubSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- انقضا، PEXPIRETIME.
- EVAL_RO، EVALSHA_RO، SORT_RO.
- FUNCTION *، FCALL، FCALL_RO.
- مدارک فرمان، فهرست فرمان.
- هیستوگرام تاخیر.
- SHARDS خوشه، پیوندهای خوشه، DELSLOTSRANGE خوشه، ADDSLOTSRANGE خوشه.
- مشتری بدون اخراج.
- ACL DRYRUN.
- امکان پردازش چندین پیکربندی به طور همزمان در یک تماس CONFIG SET/GET فراهم شده است.
- گزینه های "-json"، "-2"، "-scan"، "-functions-rdb" به ابزار redis-cli اضافه شده اند.
- به طور پیشفرض، دسترسی مشتری به تنظیمات و دستوراتی که بر امنیت تأثیر میگذارند غیرفعال است (برای مثال، دستورات DEBUG و MODULE غیرفعال هستند، تغییر تنظیمات با پرچم PROTECTED_CONFIG ممنوع است). redis-cli دیگر دستورات حاوی داده های حساس را به فایل تاریخچه خروجی نمی دهد.
- بخش بزرگی از بهینه سازی ها با هدف افزایش عملکرد و کاهش مصرف حافظه معرفی شده اند. به عنوان مثال، هنگام فعال کردن حالت کلاستر، هنگام انجام عملیات کپی در نوشتن، و هنگام کار با هش ها و کلیدهای zset، مصرف حافظه به طور قابل توجهی کاهش یافته است. منطق بهبود یافته برای شستشوی داده ها روی دیسک (تماس fsync). تعداد بسته های شبکه و تماس های سیستمی هنگام ارسال پاسخ به مشتری کاهش یافته است. راندمان تکرار بهبود یافته است.
- آسیبپذیری CVE-2022-24735 در محیط اجرای اسکریپتهای Lua برطرف شده است، که به شما امکان میدهد کد Lua خود را جایگزین کرده و به اجرای آن در زمینه کاربر دیگری، از جمله کاربری با امتیازات بالاتر، دست پیدا کنید.
- آسیبپذیری CVE-2022-24736 برطرف شد، که به فرآیند سرور redis به دلیل عدم ارجاع نشانگر NULL از کار میافتد. این حمله از طریق بارگذاری اسکریپت های Lua که مخصوص طراحی شده اند انجام می شود.
منبع: opennet.ru