آموزش انواع داده های Redis اولیه و نحوه استفاده از آنها در زیر یک آموزش عملی است که انواع داده های اصلی Redis را با استفاده از Redis CLI آموزش می دهد. برای یک نمای کلی از انواع داده، به مقدمه انواع داده مراجعه کنید.
کلیدها
- کلیدهای خیلی بلند ایده خوبی نیستند. به عنوان مثال یک کلید 1024 بایتی نه تنها از نظر حافظه ایده بدی است، بلکه به این دلیل که جستجوی کلید در مجموعه داده ممکن است به چندین مقایسه کلید پرهزینه نیاز داشته باشد. حتی زمانی که وظیفه تطبیق وجود یک مقدار بزرگ است، هش کردن آن (مثلاً با SHA1) ایده بهتری است، به خصوص از منظر حافظه و پهنای باند.
- کلیدهای خیلی کوتاه اغلب ایده خوبی نیستند. اگر بتوانید به جای آن بنویسید «user:1000:followers»، نوشتن «u1000flw» به عنوان کلید فایده ای ندارد. دومی خواناتر است و فضای اضافه شده در مقایسه با فضای استفاده شده توسط خود شی کلید و شی مقدار، جزئی است. در حالی که واضح است که کلیدهای کوتاه کمی حافظه کمتری مصرف می کنند، وظیفه شما یافتن تعادل مناسب است.
- سعی کنید به یک طرحواره پایبند باشید. برای مثال "object-type:id" ایده خوبی است، مانند "user:1000". نقطه یا خط تیره اغلب برای فیلدهای چند کلمه ای استفاده می شود، مانند "comment:4321:reply. to" یا "comment:4321:reply-to".
- حداکثر اندازه مجاز کلید 512 مگابایت است.
رشته های
نوع رشته Redis ساده ترین نوع مقداری است که می توانید با یک کلید Redis مرتبط کنید. این تنها نوع داده در Memcached است، بنابراین برای تازه واردان نیز بسیار طبیعی است که از آن در Redis استفاده کنند.
از آنجایی که کلیدهای Redis رشته هستند، وقتی از نوع رشته به عنوان مقدار نیز استفاده می کنیم، رشته ای را به رشته دیگری نگاشت می کنیم. نوع داده رشته ای برای تعدادی از موارد استفاده مانند ذخیره قطعات یا صفحات HTML مفید است.
بیایید با استفاده از redis-cli کمی با نوع رشته بازی کنیم (همه مثال ها از طریق redis-cli در این آموزش انجام خواهند شد).
> set mykey somevalue OK>دریافت mykey "somevalue"
همانطور که می بینید استفاده از دستورات SET و GET روشی است که یک مقدار رشته را تنظیم و بازیابی می کنیم. توجه داشته باشید که SET هر مقدار موجود را که قبلاً در کلید ذخیره شده است جایگزین می کند، در صورتی که کلید از قبل وجود داشته باشد، حتی اگر کلید با یک مقدار غیر رشته ای مرتبط باشد. بنابراین SET یک تکلیف را انجام می دهد.
مقادیر می توانند رشته ها (از جمله داده های باینری) از هر نوع باشند، به عنوان مثال می توانید یک تصویر jpeg را در یک مقدار ذخیره کنید. یک مقدار نمی تواند بزرگتر از 512 مگابایت باشد.
دستور SET گزینه های جالبی دارد که به عنوان آرگومان های اضافی ارائه می شوند. به عنوان مثال، من ممکن است از SET بخواهم که اگر کلید از قبل وجود داشته باشد، شکست بخورد، یا برعکس، فقط در صورتی موفق شود که کلید از قبل وجود داشته باشد:
> set mykey newval nx (nil)>mykey newval xx خوب را تنظیم کنید
حتی اگر رشته ها مقادیر اساسی Redis باشند ، عملیات جالبی وجود دارد که می توانید با آنها انجام دهید. به عنوان مثال ، یکی افزایش اتمی است:
> set counter 100 OK> incr counter (integer) 101> incr counter (integer) 102>پیشخوان incby 50 (عدد صحیح) 152
دستور افزایش مقدار رشته را به عنوان یک عدد صحیح تجزیه می کند ، آن را به یک افزایش می دهد و در نهایت مقدار به دست آمده را به عنوان مقدار جدید تنظیم می کند. دستورات مشابه دیگری مانند Incby ، Drec و Decrby وجود دارد. از نظر داخلی همیشه همان فرمان است ، با روشی کمی متفاوت عمل می کند.
به چه معنی است که افزایش اتمی است؟این که حتی چندین مشتری صدور در برابر همان کلید افزایش می یابد ، هرگز وارد شرایط مسابقه نمی شوند. به عنوان مثال ، هرگز اتفاق نمی افتد که مشتری 1 "10" را بخواند ، مشتری 2 "10" را همزمان می خواند ، هر دو به 11 افزایش می یابد ، و مقدار جدید را روی 11 تنظیم می کند. عملیات افزایشی انجام می شود در حالی که همه مشتری های دیگر همزمان یک فرمان را اجرا نمی کنند.
تعدادی دستورات برای کار در رشته ها وجود دارد. به عنوان مثال ، دستور GetSet یک کلید را به یک مقدار جدید تنظیم می کند و مقدار قدیمی را به عنوان نتیجه باز می گرداند. به عنوان مثال ، می توانید از این دستور استفاده کنید ، اگر سیستمی دارید که هر بار که وب سایت شما یک بازدید کننده جدید را دریافت می کند ، یک کلید redis را با استفاده از incs افزایش می دهد. ممکن است بخواهید هر ساعت یک بار این اطلاعات را بدون از دست دادن یک افزایش واحد جمع آوری کنید. می توانید کلید را بدست آورید ، مقدار جدید "0" را به آن اختصاص دهید و مقدار قدیمی را به عقب برگردانید.
امکان تنظیم یا بازیابی مقدار چندین کلید در یک دستور واحد نیز برای کاهش تأخیر مفید است. به همین دلیل دستورات MSET و MGET وجود دارد:
> mset a 10 b 20 c 30 OK>mget a b c 1) "10" 2) "20" 3) "30"
هنگامی که از MGET استفاده می شود ، Redis مجموعه ای از مقادیر را برمی گرداند.
تغییر و جستجوی فضای کلیدی
دستوراتی وجود دارد که در انواع خاصی تعریف نشده اند ، اما برای تعامل با فضای کلیدها مفید هستند و بنابراین می توان با کلیدهایی از هر نوع استفاده کرد.
به عنوان مثال ، دستور موجود 1 یا 0 را به سیگنال باز می گرداند اگر یک کلید معین در پایگاه داده وجود داشته باشد یا خیر ، در حالی که دستور DEL یک کلید و مقدار مرتبط را حذف می کند ، هر مقدار مقدار است.
> set mykey hello OK> exists mykey (integer) 1> del mykey (integer) 1>mykey (عدد صحیح) 0 وجود دارد
از مثالها همچنین می توانید ببینید که چگونه خود Del بسته به اینکه کلید حذف شده است (وجود دارد) 1 یا 0 را برمی گرداند یا خیر (چنین کلید با آن نام وجود نداشت).
بسیاری از دستورات مرتبط با فضای کلیدی وجود دارد ، اما دو مورد فوق موارد ضروری به همراه دستور نوع هستند که نوع مقدار ذخیره شده در کلید مشخص شده را برمی گرداند:
> set mykey x OK> type mykey string> del mykey (integer) 1>هیچ کدام را تایپ کنید
انقضاء کلیدی
قبل از حرکت ، ما باید به یک ویژگی مهم Redis که صرف نظر از نوع مقداری که در آن ذخیره می کنید کار کند: انقضاء کلیدی. انقضاء کلیدی به شما امکان می دهد تا یک کلید را برای یک کلید تنظیم کنید ، همچنین به عنوان "زمان زندگی" یا "TTL" شناخته می شود. هنگامی که زمان زندگی سپرده ها ، کلید به طور خودکار از بین می رود.
چند یادداشت مهم در مورد انقضاء کلیدی:
- آنها را می توان هر دو با استفاده از ثانیه یا دقت میلی ثانیه تنظیم کرد.
- با این حال وضوح زمان منقضی همیشه 1 میلی ثانیه است.
- اطلاعات مربوط به انقضا بر روی دیسک تکرار و ادامه می یابد ، زمانی که سرور redis شما متوقف می شود ، عملا می گذرد (این بدان معنی است که Redis تاریخ انقضاء یک کلید را ذخیره می کند).
برای تنظیم انقضا یک کلید از دستور EXPIRE استفاده کنید:
> set key some-value OK> expire key 5 (integer) 1> get key (immediately) "some-value">دریافت کلید (بعد از مدتی) (صفر)
کلید بین این دو تماس از بین رفت ، زیرا تماس دوم بیش از 5 ثانیه به تأخیر افتاد. در مثال بالا که ما از Expire برای تنظیم انقضا استفاده کردیم (همچنین می توان از آن استفاده کرد تا بتواند یک کلید دیگر را که قبلاً دارای یک مورد است ، تنظیم کند ، مانند ادامه می توان از آن استفاده کرد تا بتواند انقضا را حذف کند و کلید اصلی را برای همیشه پایدار کند). با این حال ما همچنین می توانیم با استفاده از سایر دستورات Redis ، کلیدهایی با انقضا ایجاد کنیم. به عنوان مثال با استفاده از گزینه های تنظیم شده:
> set key 100 ex 10 OK>کلید TTL (عدد صحیح) 9
مثال بالا یک کلید را با مقدار رشته 100 تعیین می کند ، با داشتن ده ثانیه منقضی می شود. بعداً دستور TTL برای بررسی زمان باقی مانده برای زندگی برای کلید فراخوانی می شود.
به منظور تنظیم و بررسی منقضی شدن در میلی ثانیه ، دستورات PEXPIRE و PTTL و لیست کامل گزینه های Set را بررسی کنید.
لیست
برای توضیح نوع داده لیست ، بهتر است با کمی نظریه شروع شود ، زیرا این لیست لیست اغلب توسط افراد فناوری اطلاعات به روش نادرست استفاده می شود. به عنوان مثال "لیست های پایتون" همان چیزی نیست که نام ممکن است (لیست های مرتبط) ارائه دهد ، بلکه آرایه هایی است (همان نوع داده در واقع آرایه ای نامیده می شود).
از یک دیدگاه بسیار کلی ، یک لیست فقط دنباله ای از عناصر سفارش داده شده است: 10،20،1،2،3 یک لیست است. اما خصوصیات لیستی که با استفاده از آرایه اجرا شده است با خصوصیات لیستی که با استفاده از یک لیست مرتبط اجرا شده است ، بسیار متفاوت است.
لیست های Redis از طریق لیست های مرتبط اجرا می شوند. این بدان معنی است که حتی اگر میلیون ها عنصر در داخل یک لیست داشته باشید ، عملکرد اضافه کردن یک عنصر جدید در سر یا دم لیست در زمان ثابت انجام می شود. سرعت اضافه کردن یک عنصر جدید با دستور LPUSH به سر یک لیست با ده عنصر همان اضافه کردن یک عنصر به سر لیست با 10 میلیون عنصر است.
روند نزولی چیست؟دسترسی به یک عنصر توسط شاخص در لیست های اجرا شده با یک آرایه (دسترسی به فهرست زمان ثابت) بسیار سریع است و در لیست های اجرا شده توسط لیست های مرتبط (جایی که این عملیات به مقدار کار متناسب با شاخص عنصر قابل دسترسی نیاز دارد) خیلی سریع نیست.
لیست های Redis با لیست های مرتبط اجرا می شوند زیرا برای یک سیستم پایگاه داده بسیار مهم است که بتوانید عناصر را به روشی بسیار سریع اضافه کنید. یکی دیگر از مزیت های مهم ، همانطور که در یک لحظه مشاهده خواهید کرد ، این است که لیست های Redis را می توان در زمان ثابت در طول ثابت گرفت.
هنگامی که دسترسی سریع به وسط یک مجموعه بزرگ از عناصر مهم است ، یک ساختار داده متفاوت وجود دارد که می تواند مورد استفاده قرار گیرد ، به نام مجموعه های مرتب شده. مجموعه های مرتب شده بعداً در این آموزش پوشش داده می شوند.
اولین مراحل با لیست های Redis
دستور LPush یک عنصر جدید را در یک لیست ، در سمت چپ (در سر) اضافه می کند ، در حالی که دستور RPUSH یک عنصر جدید را در یک لیست ، در سمت راست (در دم) اضافه می کند. سرانجام عصاره فرمان LRANGE از عناصر از لیست ها دامنه:
> rpush mylist A (integer) 1> rpush mylist B (integer) 2> lpush mylist first (integer) 3>lrange myList 0-1 1) "اول" 2) "A" 3) "B"
توجه داشته باشید که Lrange دو شاخص را به خود اختصاص می دهد ، اولین و آخرین عنصر دامنه برای بازگشت. هر دو شاخص می توانند منفی باشند و به Redis می گویند که از پایان شروع به شمارش کنید: بنابرای ن-1 آخرین عنصر است ، -2 عنصر پیش فرض لیست و غیره است.
همانطور که می بینید RPush عناصر را در سمت راست لیست ضمیمه می کند ، در حالی که LPush نهایی عنصر را در سمت چپ ضمیمه می کند.
هر دو دستور دستورات متغیر هستند ، به این معنی که شما می توانید چندین عنصر را در یک تماس واحد به یک لیست فشار دهید:
> rpush mylist 1 2 3 4 5 "foo bar" (integer) 9>lrange mylist 0-1 1) "اول" 2) "A" 3) "B" 4) "1" 5) "2" 6) "3" 7) "4" 8) "5" 9) "Foo Bar"
یک عمل مهم که در لیست های Redis تعریف شده است ، توانایی عناصر پاپ است. Popping Elements عملکرد هر دو بازیابی عنصر از لیست و از بین بردن آن از لیست در همان زمان است. شما می توانید عناصر را از چپ و راست پاپ کنید ، به طور مشابه چگونه می توانید عناصر را در هر دو طرف لیست فشار دهید:
> rpush mylist a b c (integer) 3> rpop mylist "c"> rpop mylist "b">rpop mylist "a"
ما سه عنصر را اضافه کردیم و سه عنصر را پر کردیم ، بنابراین در پایان این دنباله دستورات لیست خالی است و هیچ عنصر دیگری برای پاپ وجود ندارد. اگر سعی کنیم عنصر دیگری را نشان دهیم ، این نتیجه ای است که می گیریم:
>rpop myList (صفر)
Redis یک مقدار تهی را به سیگنال نشان داد که هیچ عنصر در لیست وجود ندارد.
موارد استفاده مشترک برای لیست ها
لیست ها برای تعدادی از کارها مفید هستند ، دو مورد استفاده بسیار نماینده موارد زیر است:
- آخرین به روزرسانی های ارسال شده توسط کاربران را در یک شبکه اجتماعی به یاد داشته باشید.
- ارتباط بین فرآیندها ، با استفاده از یک الگوی تولیدکننده مصرف کننده که در آن تولید کننده کالاها را به یک لیست سوق می دهد ، و یک مصرف کننده (معمولاً یک کارگر) آن موارد را مصرف می کند و اقدامات را انجام می دهد. Redis دارای دستورات لیست ویژه ای برای استفاده از این مورد قابل اطمینان تر و کارآمدتر است.
به عنوان مثال ، هر دو کتابخانه محبوب Ruby Resque و Sidekiq به منظور اجرای مشاغل پس زمینه از لیست های Redis در زیر کاپوت استفاده می کنند.
شبکه اجتماعی محبوب توییتر آخرین توییت های ارسال شده توسط کاربران را در لیست های Redis قرار می دهد.
برای توصیف یک مورد استفاده مشترک گام به گام ، تصور کنید که صفحه اصلی شما آخرین عکس های منتشر شده در یک عکس به اشتراک گذاری در شبکه اجتماعی را نشان می دهد و می خواهید دسترسی را سرعت بخشید.
- هر بار که یک کاربر عکس جدیدی ارسال می کند ، شناسه آن را در لیستی با LPush اضافه می کنیم.
- هنگامی که کاربران از صفحه اصلی بازدید می کنند ، برای دریافت آخرین 10 مورد ارسال شده از LRANGE 0 9 استفاده می کنیم.
لیست های تحت پوشش
در بسیاری از موارد استفاده ، ما فقط می خواهیم از لیست ها برای ذخیره آخرین موارد استفاده کنیم ، هر آنچه که هستند: به روزرسانی های شبکه اجتماعی ، سیاهههای مربوط یا هر چیز دیگری.
Redis به ما اجازه می دهد تا از لیست ها به عنوان یک مجموعه محصور استفاده کنیم ، فقط آخرین موارد N را به خاطر بسپاریم و قدیمی ترین موارد را با استفاده از دستور LTRIM دور می کنیم.
دستور LTRIM شبیه به LRANGE است ، اما به جای نمایش دامنه مشخص شده عناصر ، این محدوده را به عنوان مقدار لیست جدید تنظیم می کند. تمام عناصر خارج از محدوده داده شده برداشته می شوند.
یک مثال آن را روشن تر می کند:
> rpush mylist 1 2 3 4 5 (integer) 5> ltrim mylist 0 2 OK>lrange myList 0-1 1) "1" 2) "2" 3) "3"
دستور LTRIM فوق به Redis می گوید که عناصر لیست فقط از فهرست 0 تا 2 را در اختیار بگیرد ، همه چیز دیگر دور ریخته می شود. این امکان را برای یک الگوی بسیار ساده اما مفید فراهم می کند: انجام یک عملیات فشار لیست + یک عملیات لیست لیست با هم به منظور اضافه کردن یک عنصر جدید و دور کردن عناصر بیش از حد:
lpush mylist ltrim mylist 0 999
ترکیب فوق یک عنصر جدید را اضافه می کند و فقط 1000 جدیدترین عنصر را در لیست قرار می دهد. با LRANGE می توانید بدون نیاز به به یاد آوردن داده های بسیار قدیمی ، به موارد برتر دسترسی پیدا کنید.
توجه: در حالی که LRANGE از نظر فنی یک دستور O (N) است ، دسترسی به دامنه های کوچک به سمت سر یا دم لیست یک عمل زمان ثابت است.
مسدود کردن عملیات در لیست ها
لیست ها دارای یک ویژگی خاص هستند که باعث می شود آنها برای اجرای صف ها مناسب باشند و به طور کلی به عنوان یک ساختمان ساختمان برای سیستم های ارتباطی بین فرآیند: مسدود کردن عملیات.
تصور کنید که می خواهید موارد را با یک فرآیند به یک لیست فشار دهید و از یک فرآیند متفاوت استفاده کنید تا در واقع نوعی کارها را با آن موارد انجام دهید. این یک تولید کننده / مصرف کننده معمول است و می تواند به روش ساده زیر اجرا شود:
- برای فشار آوردن موارد به لیست ، تولید کنندگان با LPUSH تماس می گیرند.
- برای استخراج / پردازش موارد از لیست ، مصرف کنندگان با RPOP تماس می گیرند.
با این وجود این امکان وجود دارد که گاهی اوقات لیست خالی باشد و چیزی برای پردازش وجود ندارد ، بنابراین RPOP فقط تهی می کند. در این حالت ، یک مصرف کننده مجبور می شود مدتی صبر کند و دوباره با RPOP دوباره امتحان کند. این نظرسنجی نامیده می شود و در این زمینه ایده خوبی نیست زیرا چندین اشکال دارد:
- Redis و مشتریان را مجبور به پردازش دستورات بی فایده (تمام درخواست ها در هنگام خالی بودن لیست ، هیچ کار واقعی انجام نمی شود ، آنها فقط تهی می کنند).
- تأخیر در پردازش موارد اضافه می کند ، زیرا بعد از دریافت یک کارگر تهی ، مدتی منتظر می ماند. برای کوچکتر شدن تأخیر ، می توانیم بین تماس های RPOP کمتر صبر کنیم ، با تأثیر تقویت مشکل شماره 1 ، یعنی تماسهای بی فایده تر به Redis.
بنابراین Redis دستوراتی به نام BRPOP و BLPOP را اجرا می کند که نسخه های RPOP و LPOP قادر به مسدود کردن لیست در صورت خالی بودن لیست هستند: آنها فقط در صورت اضافه شدن یک عنصر جدید به لیست ، یا هنگامی که یک زمان مشخص شده توسط کاربر است ، به تماس گیرنده باز می گردند. رسید
این نمونه ای از تماس BRPOP است که می توانیم در کارگر از آن استفاده کنیم:
>وظایف BRPOP 5 1) "وظایف" 2) "do_something"
این بدان معنی است: "منتظر عناصر موجود در کارهای لیست باشید ، اما اگر بعد از 5 ثانیه هیچ عنصری در دسترس نباشد" برگردید.
توجه داشته باشید که می توانید از 0 به عنوان زمان برای صبر کردن برای عناصر برای همیشه استفاده کنید ، و همچنین می توانید چندین لیست و نه فقط یک را مشخص کنید تا به طور همزمان در لیست های مختلف منتظر بمانید و وقتی لیست اول یک عنصر دریافت می کند ، مطلع شوید.
چند نکته در مورد BRPOP:
- مشتری ها به روشی سفارش داده شده ارائه می شوند: اولین مشتری که منتظر لیست است ، ابتدا وقتی یک عنصر توسط برخی از مشتری ها و غیره تحت فشار قرار می گیرد ، ابتدا سرو می شود.
- مقدار بازده در مقایسه با RPOP متفاوت است: این یک آرایه دو عنصر است زیرا نام کلید را نیز شامل می شود ، زیرا BRPOP و BLPOP قادر به انتظار برای عناصر از لیست های مختلف هستند.
- در صورت دستیابی به زمان ، تهی بازگردانده می شود.
چیزهای بیشتری وجود دارد که باید در مورد لیست ها و مسدود کردن گزینه ها بدانید. ما پیشنهاد می کنیم در مورد موارد زیر بیشتر بخوانید:
- ساخت صف های ایمن تر یا صف های چرخان با استفاده از LMOVE امکان پذیر است.
- همچنین یک نوع مسدود کننده از دستور به نام BLMOVE وجود دارد.
ایجاد خودکار و حذف کلیدها
تاکنون در مثالهای ما قبل از فشار دادن عناصر ، هرگز مجبور به ایجاد لیست های خالی یا حذف لیست های خالی در هنگام دیگر عناصر داخل آن نشده ایم. این مسئولیت ردیس است که کلیدها را در هنگام خالی بودن لیست ها حذف کنید ، یا اگر کلید وجود نداشته باشد ، یک لیست خالی ایجاد کنید و ما سعی می کنیم عناصر را به آن اضافه کنیم ، به عنوان مثال با LPush.
این مخصوص لیست ها نیست ، در مورد همه انواع داده های Redis متشکل از عناصر متعدد - جریانها ، مجموعه ها ، مجموعه های مرتب شده و هش نیز صدق می کند.
در اصل می توانیم رفتار را با سه قانون خلاصه کنیم:
- هنگامی که یک عنصر را به یک نوع داده جمع اضافه می کنیم ، اگر کلید هدف وجود نداشته باشد ، قبل از اضافه کردن عنصر ، یک نوع داده جمع خالی ایجاد می شود.
- هنگامی که عناصر را از نوع داده کل حذف می کنیم ، اگر مقدار خالی باقی بماند ، کلید به طور خودکار از بین می رود. نوع داده جریان تنها استثناء این قانون است.
- تماس با یک دستور فقط خواندنی مانند LLEN (که طول لیست را برمی گرداند) یا یک دستور نوشتن حذف عناصر ، با یک کلید خالی ، همیشه نتیجه مشابهی را تولید می کند که گویی کلید دارای یک نوع کل خالی از نوع استفرمان انتظار دارد پیدا کند.
نمونه های قانون 1:
> del mylist (integer) 1>lpush mylist 1 2 3 (عدد صحیح) 3
با این حال اگر کلید وجود داشته باشد نمی توانیم عملیات را در برابر نوع اشتباه انجام دهیم:
> set foo bar OK> lpush foo 1 2 3 (error) WRONGTYPE Operation against a key holding the wrong kind of value>رشته foo را تایپ کنید
مثال قانون 2:
> lpush mylist 1 2 3 (integer) 3> exists mylist (integer) 1> lpop mylist "3"> lpop mylist "2"> lpop mylist "1">myList (عدد صحیح) 0 وجود دارد
بعد از ظهور همه عناصر ، دیگر کلید وجود ندارد.
مثال قانون 3:
> del mylist (integer) 0> llen mylist (integer) 0>lpop myList (صفر)
هش
Redis Hash دقیقاً به نظر می رسد که چگونه ممکن است انتظار داشته باشد که یک "هش" به نظر برسد ، با جفت های ارزش میدان:
> hset user:1000 useame antirez birthyear 1977 verified 1 (integer) 3> hget user:1000 useame "antirez"> hget user:1000 birthyear "1977">کاربر Hgetall: 1000 1) "نام کاربری" 2) "Antirez" 3) "Birthyear" 4) "1977" 5) "تأیید شده" 6) "1"
در حالی که هش برای نشان دادن اشیاء مفید است ، در واقع تعداد زمینه هایی که می توانید درون یک هش قرار دهید ، محدودیت عملی ندارد (غیر از حافظه موجود) ، بنابراین می توانید از روش های مختلفی در داخل کاربرد خود استفاده کنید.
فرمان HSET چندین قسمت از هش را تنظیم می کند ، در حالی که HGET یک قسمت واحد را بازیابی می کند. hmget شبیه HGET است اما مجموعه ای از مقادیر را برمی گرداند:
>کاربر hmget: 1000 نام کاربری BINTYEAR NO-SUCH-FIELD 1) "Antirez" 2) "1977" 3) (صفر)
دستوراتی وجود دارد که قادر به انجام عملیات در زمینه های فردی نیز مانند Hincrby هستند:
> hincrby user:1000 birthyear 10 (integer) 1987>کاربر Hincrby: 1000 BINTYEAR 10 (عدد صحیح) 1997
شایان ذکر است که هش های کوچک (یعنی چند عنصر با مقادیر کوچک) به روش خاصی در حافظه رمزگذاری می شوند که باعث می شود آنها بسیار حافظه کار کنند.
مجموعه
مجموعه های Redis مجموعه های بدون هماهنگ رشته ها هستند. دستور SADD عناصر جدیدی را به مجموعه اضافه می کند. همچنین اگر یک عنصر معین در حال حاضر وجود داشته باشد ، انجام تقاطع ، اتحاد یا تفاوت بین مجموعه های متعدد و غیره ، می توان تعدادی از عملیات دیگر را علیه مجموعه هایی مانند آزمایش انجام داد.
> sadd myset 1 2 3 (integer) 3>Myset Smembers 1. 3 2. 1 3. 2
در اینجا من سه عنصر را به مجموعه خود اضافه کردم و به Redis گفتم که تمام عناصر را برگرداند. همانطور که می بینید آنها طبقه بندی نشده اند - Redis رایگان است که در هر تماس عناصر را به هر ترتیب بازگرداند ، زیرا هیچ قراردادی با کاربر در مورد سفارش عنصر وجود ندارد.
Redis دستوراتی برای آزمایش عضویت دارد. به عنوان مثال ، بررسی اینکه آیا یک عنصر وجود دارد:
> sismember myset 3 (integer) 1>Sismember Myset 30 (عدد صحیح) 0
"3" عضو مجموعه است ، در حالی که "30" نیست.
مجموعه ها برای بیان روابط بین اشیاء مناسب هستند. به عنوان مثال می توانیم به راحتی از مجموعه ها برای پیاده سازی برچسب ها استفاده کنیم.
یک روش ساده برای مدل سازی این مشکل ، داشتن مجموعه ای برای هر شیئی است که می خواهیم برچسب گذاری کنیم. مجموعه شامل شناسه های برچسب های مرتبط با شی است.
یک تصویر ، برچسب زدن مقالات خبری است. اگر شناسه مقاله 1000 با برچسب های 1 ، 2 ، 5 و 77 برچسب گذاری شود ، یک مجموعه می تواند این شناسه های برچسب را با مورد خبر مرتبط کند:
>اخبار SADD: 1000: برچسب 1 2 5 77 (عدد صحیح) 4
ما همچنین ممکن است بخواهیم رابطه معکوس داشته باشیم: لیست تمام اخبار برچسب گذاری شده با یک برچسب معین:
> sadd tag:1:news 1000 (integer) 1> sadd tag:2:news 1000 (integer) 1> sadd tag:5:news 1000 (integer) 1>SADD TAG: 77: اخبار 1000 (عدد صحیح) 1
برای به دست آوردن تمام برچسب ها برای یک شیء معین بی اهمیت است:
>اخبار Smembers: 1000: برچسب ها 1. 5 2. 1 3. 77 4. 2
توجه: در مثال فرض می کنیم شما یک ساختار داده دیگری دارید ، به عنوان مثال یک هش Redis ، که برای برچسب زدن نام ، شناسه های برچسب را نقشه برداری می کند.
عملیات غیر بی اهمیت دیگری نیز وجود دارد که با استفاده از دستورات Redis مناسب هنوز هم آسان است. به عنوان مثال ممکن است لیستی از همه اشیاء با برچسب های 1 ، 2 ، 10 و 27 را با هم بخواهیم. ما می توانیم این کار را با استفاده از دستور Sinter انجام دهیم ، که تقاطع بین مجموعه های مختلف را انجام می دهد. ما میتوانیم استفاده کنیم:
>برچسب سینتر: 1: برچسب خبر: 2: برچسب خبر: 10: برچسب خبر: 27: اخبار. نتایج اینجا
علاوه بر تقاطع ، می توانید اتحادیه ها نیز انجام دهید ، تفاوت ، یک عنصر تصادفی و غیره را استخراج کنید.
دستور استخراج یک عنصر Spop نام دارد و برای مدل سازی مشکلات خاص مفید است. به عنوان مثال به منظور اجرای یک بازی پوکر مبتنی بر وب ، ممکن است بخواهید عرشه خود را با یک مجموعه نشان دهید. تصور کنید که ما از پیشوند یک بار برای (c) lubs ، (d) iamonds ، (h) گوش ، (s) pades استفاده می کنیم:
>Sadd deck C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 CJ CQ CK D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 DJ DK DK H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 HJ HQ HK S1 S2 S6 S7 S8 S5S10 SJ SQ SK (عدد صحیح) 52
حالا می خواهیم به هر بازیکن 5 کارت بدهیم. دستور SPOP یک عنصر تصادفی را حذف می کند و آن را به مشتری برمی گرداند، بنابراین در این مورد عملیات عالی است.
با این حال، اگر مستقیماً آن را در مقابل دسته خود صدا کنیم، در بازی بعدی بازی باید دوباره دسته کارت ها را پر کنیم، که ممکن است ایده آل نباشد. بنابراین برای شروع، می توانیم یک کپی از مجموعه ذخیره شده در کلید عرشه در بازی:1:deck key ایجاد کنیم.
این کار با استفاده از SUNIONSTORE انجام می شود که معمولاً اتحاد بین چندین مجموعه را انجام می دهد و نتیجه را در مجموعه دیگری ذخیره می کند. با این حال، از آنجایی که اتحاد یک مجموعه منفرد خودش است، می توانم دکم را با موارد زیر کپی کنم:
>بازی sunionstore: عرشه 1: عرشه (عدد صحیح) 52
حالا من آماده هستم تا به اولین بازیکن پنج کارت بدهم:
> spop game:1:deck "C6"> spop game:1:deck "CQ"> spop game:1:deck "D1"> spop game:1:deck "CJ">spop game:1:deck "SJ"
یک جفت جک، عالی نیست.
این زمان خوبی برای معرفی دستور set است که تعداد عناصر داخل یک مجموعه را ارائه می دهد. این اغلب در چارچوب تئوری مجموعه ها، کاردینالیته یک مجموعه نامیده می شود، بنابراین دستور Redis SCARD نامیده می شود.
>بازی اسکارد:1:عرشه (عدد صحیح) 47
کار ریاضی: 52 - 5 = 47.
هنگامی که نیاز دارید فقط عناصر تصادفی را بدون حذف آنها از مجموعه بدست آورید، دستور SRANDMEMBER مناسب برای کار وجود دارد. همچنین قابلیت بازگرداندن عناصر تکراری و غیر تکراری را دارد.
مجموعه های مرتب شده
مجموعه های مرتب شده یک نوع داده هستند که شبیه به ترکیبی بین یک مجموعه و یک هش است. مانند مجموعه ها، مجموعه های مرتب شده از عناصر رشته ای منحصر به فرد و غیر تکراری تشکیل شده اند، بنابراین به نوعی مجموعه مرتب شده نیز یک مجموعه است.
با این حال، در حالی که عناصر درون مجموعه ها مرتب نیستند، هر عنصر در یک مجموعه مرتب شده با یک مقدار ممیز شناور همراه است که امتیاز نامیده می شود (به همین دلیل است که نوع آن نیز شبیه هش است، زیرا هر عنصر به یک مقدار نگاشت می شود).
علاوه بر این، عناصر در یک مجموعه مرتب شده به ترتیب گرفته می شوند (بنابراین آنها در صورت درخواست مرتب نمی شوند، ترتیب یک ویژگی ساختار داده ای است که برای نمایش مجموعه های مرتب شده استفاده می شود). آنها طبق قانون زیر سفارش می شوند:
- If B and A are two elements with a different score, then A> B if A.score is>امتیاز B.
- If B and A have exactly the same score, then A>B اگر رشته A از نظر لغوی بزرگتر از رشته B باشد. رشته های B و A نمی توانند برابر باشند زیرا مجموعه های مرتب شده فقط دارای عناصر منحصر به فرد هستند.
بیایید با یک مثال ساده شروع کنیم، با اضافه کردن نام چند هکر منتخب به عنوان عناصر مجموعه مرتب شده، با سال تولد آنها به عنوان "امتیاز".
> zadd hackers 1940 "Alan Kay" (integer) 1> zadd hackers 1957 "Sophie Wilson" (integer) 1> zadd hackers 1953 "Richard Stallman" (integer) 1> zadd hackers 1949 "Anita Borg" (integer) 1> zadd hackers 1965 "Yukihiro Matsumoto" (integer) 1> zadd hackers 1914 "Hedy Lamarr" (integer) 1> zadd hackers 1916 "Claude Shaon" (integer) 1> zadd hackers 1969 "Linus Torvalds" (integer) 1>zadd hackers 1912 "Alan Turing" (عدد صحیح) 1
همانطور که می بینید Zadd شبیه SADD است ، اما یک آرگومان اضافی (که قبل از اضافه شدن عنصر قرار داده شده است) می گیرد که این امتیاز است. Zadd همچنین متغیر است ، بنابراین شما می توانید چندین جفت ارزش نمره را مشخص کنید ، حتی اگر این مورد در مثال بالا استفاده نشود.
با مجموعه های مرتب شده ، بازگرداندن لیستی از هکرهایی که بر اساس سال تولد خود مرتب شده اند بسیار مهم است زیرا در واقع آنها قبلاً مرتب شده اند.
توجه به اجرای: مجموعه های مرتب شده از طریق یک ساختار داده دوگانه گزارش شده حاوی لیست پرش و یک جدول هش اجرا می شوند ، بنابراین هر بار که یک عنصر را اضافه می کنیم ، عمل O (log (n)) را انجام می دهد. این خوب است ، اما وقتی ما از عناصر مرتب شده درخواست می کنیم Redis به هیچ وجه لازم نیست کار را انجام دهد ، در حال حاضر همه مرتب شده است:
>Zrange Hackers 0-1 1) "Alan Turing" 2) "Hedy Lamarr" 3) "Claude Shaon" 4) "Alan Kay" 5) "Anita Borg" 6) "Richard Stallman" 7) "Sophie Wilson" 8) "Yukihiro Matsumoto "9)" Linus Torvalds "
توجه: 0 و-1 به معنی از شاخص عنصر 0 تا آخرین عنصر است (-1 در اینجا دقیقاً همانطور که در مورد دستور LRANGE انجام می شود کار می کند).
چه می شود اگر بخواهم آنها را به شکلی برعکس ، جوانترین تا قدیمی ترین سفارش دهم؟به جای zrange از zrevrange استفاده کنید:
>Zrevrange Hackers 0-1 1) "Linus Torvalds" 2) "Yukihiro Matsumoto" 3) "سوفی ویلسون" 4) "Richard Stallman" 5) "Anita Borg" 6) "Alan Kay" 7) "Claude Shaon" 8) "هدی لامار "9)" آلن تورینگ "
با استفاده از استدلال WithScores ، می توان نمرات را نیز برگرداند:
>Zrange Hackers 0-1 WithScores 1) "Alan Turing" 2) "1912" 3) "Hedy Lamarr" 4) "1914" 5) "Claude Shaon" 6) "1916" 7) "Alan Kay" 8) "1940"9) "Anita Borg" 10) "1949" 11) "Richard Stallman" 12) "1953" 13) "Sophie Wilson" 14) "1957" 15) "Yukihiro Matsumoto" 16) "1965" 17) "Linus Torvalds"18) "1969"
در محدوده کار می کند
مجموعه های مرتب شده از این قدرتمندتر هستند. آنها می توانند در محدوده کار کنند. بیایید تمام افرادی را که در سال 1950 متولد شده اند ، بدست آوریم. ما از دستور zrangebyscore برای انجام آن استفاده می کنیم:
>ZrangeByscore Hacker s-inf 1950 1) "آلن تورینگ" 2) "هدی لامار" 3) "کلود شانون" 4) "آلن کی" 5) "آنیتا بورگ"
ما از Redis خواسته ایم تا تمام عناصر را با نمره بین Infinity منفی و 1950 بازگرداند (هر دو افراط گنجانده شده اند).
همچنین می توان دامنه عناصر را حذف کرد. بیایید تمام هکرهای متولد شده بین سالهای 1940 و 1960 را از مجموعه مرتب شده حذف کنیم:
>ZremrangeByscore Hackers 1940 1960 (Integer) 4
ZremrangeByscore شاید بهترین نام فرمان نباشد ، اما می تواند بسیار مفید باشد و تعداد عناصر حذف شده را برمی گرداند.
یکی دیگر از عملیات بسیار مفید که برای عناصر مرتب شده مرتب شده تعریف شده است ، عملیات Get-Rank است. می توان پرسید که موقعیت یک عنصر در مجموعه عناصر سفارش داده شده چیست.
>Zrank Hackers "Anita Borg" (Integer) 4
با توجه به اینکه عناصر طبقه بندی شده روشی نزولی دارند ، دستور Zrevrank نیز برای به دست آوردن رتبه در دسترس است.
نمرات لغوی شناسی
با نسخه های اخیر Redis 2. 8 ، یک ویژگی جدید معرفی شد که اجازه می دهد دامنه های واژگونی به صورت واژگونی ، با فرض اینکه عناصر در یک مجموعه مرتب شده با همان نمره یکسان درج شده اند (عناصر با عملکرد C MEMCMP مقایسه می شوند ، بنابراین تضمین می شود که هیچ وجود نداردجمع آوری ، و هر نمونه redis با همان خروجی پاسخ می دهد).
دستورات اصلی برای کار با دامنه های واژگونی عبارتند از ZrangeBylex ، ZrevrangeBylex ، ZremrangeBylex و Zlexcount.
به عنوان مثال ، بیایید دوباره لیست هکرهای معروف خود را اضافه کنیم ، اما این بار از نمره صفر برای همه عناصر استفاده می کنیم:
>Zadd Hackers 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0 "Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shaon" 0 "Linus Torvalds" 0 "Alan Turing"
به دلیل قوانین مرتب سازی مجموعه های مرتب شده ، آنها قبلاً به صورت واژگونی طبقه بندی شده اند:
>Zrange Hackers 0-1 1) "Alan Kay" 2) "Alan Turing" 3) "Anita Borg" 4) "Claude Shaon" 5) "Hedy Lamarr" 6) "Linus Torvalds" 7) "Richard Stallman" 8) "سوفی ویلسون "9)" Yukihiro Matsumoto "
با استفاده از ZrangeBylex می توانیم محدوده های واژگونی را بخواهیم:
>هکرهای Zrangebylex [B [P 1) "Claude Shaon" 2) "Hedy Lamarr" 3) "Linus Torvalds"
دامنه ها می توانند فراگیر یا منحصر به فرد باشند (بسته به شخصیت اول) ، همچنین رشته های بی نهایت و منهای بی نهایت به ترتیب با رشته های + و - مشخص می شوند. برای اطلاعات بیشتر به مستندات مراجعه کنید.
این ویژگی مهم است زیرا به ما امکان می دهد از مجموعه های مرتب شده به عنوان یک شاخص عمومی استفاده کنیم. به عنوان مثال ، اگر می خواهید عناصر را با استدلال عدد صحیح 128 بیتی امضا کنید ، تنها کاری که باید انجام دهید این است که عناصر را به یک مجموعه مرتب شده با همان نمره اضافه کنید (برای مثال 0) اما با یک پیشوند 16 بایت متشکل از 128تعداد بیت در Big Endian. از آنجا که اعداد در Big Endian ، هنگامی که به صورت واژگونی (به ترتیب بایت های خام) سفارش داده می شود نیز به صورت عددی سفارش داده می شود ، می توانید در فضای 128 بیتی دامنه بخواهید و مقدار عنصر را از پیشوند دور کنید.
اگر می خواهید این ویژگی را در زمینه نسخه ی نمایشی جدی تر ببینید ، نسخه ی نمایشی خودکار Redis را بررسی کنید.
به روزرسانی نمره: تابلوهای رهبر
فقط یک یادداشت آخر در مورد مجموعه های مرتب شده قبل از رفتن به موضوع بعدی. نمرات مجموعه های مرتب شده را می توان در هر زمان به روز کرد. فقط فراخوانی ZADD با عنصری که قبلاً در مجموعه مرتب شده گنجانده شده است، امتیاز (و موقعیت) آن را با پیچیدگی زمانی O(log(N)) به روز می کند. به این ترتیب، مجموعه های مرتب شده زمانی مناسب هستند که تعداد زیادی به روز رسانی وجود داشته باشد.
به دلیل این ویژگی، یک مورد استفاده رایج، تابلوهای رهبر است. برنامه معمولی یک بازی فیس بوک است که در آن شما توانایی دسته بندی کاربران را بر اساس امتیاز بالای آنها، به علاوه عملیات رتبه بندی، به منظور نشان دادن کاربران برتر N و رتبه کاربر در تابلوی رهبران ترکیب می کنید (به عنوان مثال، "شما بهترین امتیاز 4932 در اینجا هستید").
نقشه های بیت
بیت مپ ها یک نوع داده واقعی نیستند، بلکه مجموعه ای از عملیات بیت گرا هستند که بر روی نوع String تعریف شده اند. از آنجایی که رشته ها حباب های ایمن باینری هستند و حداکثر طول آنها 512 مگابایت است، برای تنظیم تا 2^32 بیت مختلف مناسب هستند.
عملیات بیت به دو گروه تقسیم می شود: عملیات تک بیتی با زمان ثابت، مانند تنظیم یک بیت روی 1 یا 0، یا دریافت مقدار آن، و عملیات روی گروه های بیت، به عنوان مثال شمارش تعداد بیت های تنظیم شده در یک محدوده معین از بیت ها.(به عنوان مثال، شمارش جمعیت).
یکی از بزرگترین مزیت های بیت مپ این است که اغلب در هنگام ذخیره سازی اطلاعات صرفه جویی زیادی در فضا ایجاد می کنند. به عنوان مثال، در سیستمی که کاربران مختلف با شناسه های کاربر افزایشی نشان داده می شوند، می توان یک بیت اطلاعات (مثلاً دانستن اینکه آیا کاربر می خواهد یک خبرنامه دریافت کند) از 4 میلیارد کاربر را با استفاده از تنها 512 مگابایت حافظه به خاطر بسپارد.
بیت ها با استفاده از دستورات SETBIT و GETBIT تنظیم و بازیابی می شوند:
> setbit key 10 1 (integer) 0> getbit key 10 (integer) 1>کلید getbit 11 (عدد صحیح) 0
دستور SETBIT به عنوان آرگومان اول خود عدد بیت را می گیرد و به عنوان آرگومان دوم مقدار بیت را که 1 یا 0 است می گیرد. اگر بیت آدرس داده شده خارج از طول رشته فعلی باشد، دستور به طور خودکار رشته را بزرگ می کند.
GETBIT فقط مقدار بیت را در شاخص مشخص شده برمی گرداند. بیت های خارج از محدوده ( آدرس دادن به بیتی که خارج از طول رشته ذخیره شده در کلید هدف است) همیشه صفر در نظر گرفته می شوند.
سه دستور بر روی گروهی از بیت ها وجود دارد:
- BITOP عملیات بیت عاقلانه را بین رشته های مختلف انجام می دهد. عملیات ارائه شده عبارتند از AND، OR، XOR و NOT.
- BITCOUNT شمارش جمعیت را انجام می دهد و تعداد بیت ها را روی 1 گزارش می دهد.
- BITPOS اولین بیت را با مقدار مشخص شده 0 یا 1 پیدا می کند.
هر دو BitPos و BitCount به جای اینکه برای کل طول رشته کار کنند ، قادر به کار با محدوده بایت رشته هستند. موارد زیر نمونه ای بی اهمیت از تماس Bitcount است:
> setbit key 0 1 (integer) 0> setbit key 100 1 (integer) 0>کلید bitcount (عدد صحیح) 2
موارد استفاده متداول برای مپیمپه ها عبارتند از:
- تجزیه و تحلیل زمان واقعی از همه نوع.
- ذخیره اطلاعات کارآمد اما با کارایی بالا بولی مرتبط با شناسه شی.
به عنوان مثال تصور کنید که می خواهید طولانی ترین خط بازدیدهای روزانه کاربران وب سایت خود را بدانید. شما شروع به شمارش روز از صفر می کنید ، یعنی روزی که وب سایت خود را عمومی کرده اید و هر بار که کاربر از وب سایت بازدید می کند ، کمی با SetBit تنظیم کنید. به عنوان یک فهرست کمی ، شما به سادگی زمان فعلی یونیکس را می گیرید ، جبران اولیه را کم می کنید و بر اساس تعداد ثانیه در یک روز تقسیم می شوید (به طور معمول ، 3600*24).
به این ترتیب برای هر کاربر شما یک رشته کوچک دارید که حاوی اطلاعات بازدید برای هر روز است. با استفاده از BitCount می توان به راحتی تعداد روزهایی را که یک کاربر خاص از وب سایت بازدید کرد ، دریافت کند ، در حالی که با چند تماس BitPos ، یا به سادگی واکشی و تجزیه و تحلیل طرف مشتری Bitmap ، می توان به راحتی طولانی ترین خط را محاسبه کرد.
bitmaps برای تقسیم به چندین کلید ، به عنوان مثال به دلیل تراز کردن مجموعه داده ها بی اهمیت است و به طور کلی بهتر است از کار با کلیدهای عظیم خودداری کنید. برای تقسیم یک مپ در کلیدهای مختلف به جای اینکه تمام بیت ها را در یک کلید قرار دهید ، یک استراتژی بی اهمیت فقط برای ذخیره بیت های M در هر کلید و به دست آوردن نام کلید با شماره بیت/متر و بیت نهم برای پرداختن به داخل کلید با بیت است.-ممتر م.
عبادت
Hyperloglog یک ساختار داده احتمالی است که به منظور شمارش چیزهای منحصر به فرد مورد استفاده قرار می گیرد (از نظر فنی این به تخمین کاردینال بودن یک مجموعه گفته می شود). معمولاً شمارش موارد منحصر به فرد نیاز به استفاده از مقدار حافظه متناسب با تعداد موارد مورد نظر برای شمارش دارد ، زیرا باید عناصری را که قبلاً در گذشته دیده اید به خاطر بسپارید تا چندین بار از شمارش آنها جلوگیری کنید. با این حال مجموعه ای از الگوریتم ها وجود دارد که حافظه را برای دقت تجارت می کند: شما با یک اندازه تخمین زده شده با یک خطای استاندارد به پایان می رسید ، که در صورت اجرای Redis کمتر از 1 ٪ است. جادوی این الگوریتم این است که دیگر نیازی به استفاده از مقدار حافظه متناسب با تعداد موارد شمارش شده ندارید و در عوض می توانید از یک مقدار ثابت حافظه استفاده کنید! بایت 12K در بدترین حالت ، یا اگر Hyperloglog شما (ما از این پس فقط با آنها تماس خواهیم گرفت) عناصر بسیار کمی را دیده است.
HLL در Redis ، در حالی که از نظر فنی یک ساختار داده متفاوت است ، به عنوان یک رشته Redis رمزگذاری می شوند ، بنابراین می توانید با دریافت سریال کردن HLL تماس بگیرید و آن را به سرور تنظیم کنید.
از نظر مفهومی API HLL مانند استفاده از مجموعه ها برای انجام همان کار است. شما می توانید هر عنصر مشاهده شده را در یک مجموعه قرار دهید ، و از SCARD برای بررسی تعداد عناصر موجود در این مجموعه استفاده می کنید ، که منحصر به فرد است زیرا SADD یک عنصر موجود را دوباره اضافه نمی کند.
در حالی که شما واقعاً مواردی را به HLL اضافه نمی کنید ، زیرا ساختار داده فقط حاوی وضعیتی است که شامل عناصر واقعی نیست ، API یکسان است:
- هر بار که یک عنصر جدید را می بینید ، آن را با PFADD به COUNT اضافه می کنید.
- هر بار که می خواهید تقریب فعلی عناصر منحصر به فرد اضافه شده با PFADD را بازیابی کنید ، از PFCount استفاده می کنید.
> pfadd hll a b c d (integer) 1>pfcount hll (عدد صحیح) 4
نمونه ای از مورد استفاده برای این ساختار داده ، شمارش نمایش داده های منحصر به فرد انجام شده توسط کاربران در فرم جستجو هر روز است.
Redis همچنین قادر به انجام اتحادیه HLLS است ، لطفاً برای اطلاعات بیشتر مستندات کامل را بررسی کنید.
سایر ویژگی های قابل توجه
موارد مهم دیگری در API Redis وجود دارد که در متن این سند قابل کاوش نیست ، اما ارزش توجه شما را دارند:
- می توان فضای کلیدی یک مجموعه بزرگ را به تدریج تکرار کرد.
- برای بهبود تأخیر و پهنای باند می توان سمت سرور Lua Scripts را اجرا کرد.
- Redis همچنین یک سرور زیر میخانه است.
بیشتر بدانید
این آموزش به هیچ وجه کامل نیست و فقط اصول اولیه API را پوشش داده است. برای کشف چیزهای دیگر ، مرجع فرمان را بخوانید.
با تشکر از خواندن ، و از هک کردن با Redis لذت ببرید!
در این صفحه
این یک وب سایت جامعه است که توسط Redis Ltd. © 2023 حمایت می شود. Redis و آرم مکعب علائم تجاری ثبت شده Redis Ltd. شرایط استفاده و خط مشی رازداری هستند.
حساب اسلامي...
ما را در سایت حساب اسلامي دنبال می کنید
برچسب : نویسنده : کامران فیوضات بازدید : 32 تاريخ : دوشنبه 23 مرداد 1402 ساعت: 14:21