خريطة تجزئة متجر الذاكرة

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

خرائط التجزئة، مثل الخرائط المرتبة، تتيح لك تخزين البيانات في الذاكرة كأزواج من المفتاح والقيمة. على عكس الخرائط المرتبة، فإنها لا تحافظ على ضمانات الترتيب. هذه بنية بيانات مفيدة للحالات التي تتطلب تخزين بيانات بسيط والوصول السريع، مثل الجرد المشترك، دور المزادات الفعلية، والمزيد. تقوم خرائط التجزئة تلقائيًا بإدارة تقسيم البيانات الخاصة بك وهي مفيدة جدًا إذا كان لديك أكثر من 1,000 مفتاح. بالنسبة لمساحات المفاتيح الأصغر، نوصي بـ الخرائط المرتبة.

الحدود

تحتوي خرائط التجزئة على حد لحجم المفتاح يبلغ 128 حرفًا وحد لحجم القيمة يبلغ 32 كيلوبايت.

بخلاف ذلك، تستخدم خرائط التجزئة نفس حدود طلبات واجهة برمجة التطبيقات و حصة الذاكرة مثل بنى بيانات متاجر الذاكرة الأخرى.

الحصول على خريطة تجزئة

للحصول على خريطة تجزئة، قم باستدعاء MemoryStoreService:GetHashMap() مع اسم لخريطة التجزئة. الاسم عالمي داخل اللعبة، لذا يمكنك الوصول إلى نفس خريطة التجزئة في أي نص برمجي باستخدام هذا الاسم.

الحصول على خريطة تجزئة
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")

بعد الحصول على خريطة التجزئة، يمكنك استدعاء أي من الوظائف التالية لقراءة أو كتابة البيانات فيها:

الوظيفةالإجراء
MemoryStoreHashMap:SetAsync()إضافة مفتاح جديد أو استبدال القيمة إذا كان المفتاح موجودًا بالفعل.
MemoryStoreHashMap:GetAsync()قراءة مفتاح معين.
MemoryStoreHashMap:ListItemsAsync()قائمة العناصر في خريطة التجزئة.
MemoryStoreHashMap:UpdateAsync()تحديث قيمة مفتاح بعد استعادته من خريطة التجزئة.
MemoryStoreHashMap:RemoveAsync()إزالة مفتاح من خريطة التجزئة.

للحصول على وثائق مفصلة حول كل وظيفة، انظر MemoryStoreHashMap.

إضافة أو استبدال البيانات

لإضافة مفتاح جديد أو لاستبدال قيمة مفتاح في خريطة التجزئة، قم باستدعاء MemoryStoreHashMap:SetAsync() مع اسم المفتاح، وقيمته، وزمن انتهاء الصلاحية بالثواني. يقوم النظام تلقائيًا بتنظيف البيانات بمجرد انتهاء صلاحية المفتاح. الحد الأقصى لزمن انتهاء الصلاحية هو 3,888,000 ثانية (45 يومًا).

إضافة بيانات إلى خريطة تجزئة
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("تمت الإضافة بنجاح.")
end

الحصول على البيانات

يمكنك إما الحصول على قيمة مرتبطة بمفتاح معين أو الحصول على أزواج متعددة من المفاتيح والقيم في خريطة التجزئة.

الحصول على البيانات بمفتاح واحد

للحصول على قيمة مرتبطة بمفتاح واحد من خريطة التجزئة، قم باستدعاء MemoryStoreHashMap:GetAsync() مع اسم المفتاح.

الحصول على مفتاح معين من خريطة التجزئة
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("تمت الإضافة بنجاح.")
end
local item
local getSuccess, getError = pcall(function()
item = hashMap:GetAsync("User_1234")
end)
if getSuccess then
print(item)
else
warn(getError)
end

الحصول على البيانات مع أزواج مفاتيح وقيم متعددة

للحصول على جميع أزواج المفاتيح والقيم من خريطة التجزئة كعملية واحدة، قم باستدعاء MemoryStoreHashMap:ListItemsAsync() مع حجم الصفحة المرغوب. تسرد هذه الدالة جميع المفاتيح الموجودة بشكل متقطع. على سبيل المثال، تقوم عينات التعليمات البرمجية التالية باسترداد ما يصل إلى 32 عنصرًا من خريطة التجزئة.

إدراج العناصر في خريطة التجزئة
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- الحصول على قائمة العناصر، 32 عنصرًا في كل مرة
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- الحصول على الصفحة الحالية
local entries = pages:GetCurrentPage()
-- تكرار جميع أزواج المفاتيح والقيم في الصفحة
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
end
-- التحقق مما إذا تم الوصول إلى الصفحة الأخيرة
if pages.IsFinished then
break
else
print("----------")
-- الانتقال إلى الصفحة التالية
pages:AdvanceToNextPageAsync()
end
end
end

تحديث البيانات

لاسترداد قيمة مفتاح من خريطة التجزئة وتحديثه، قم باستدعاء MemoryStoreHashMap:UpdateAsync() مع اسم المفتاح، ودالة رد الاتصال لتحديث المفتاح، وزمن انتهاء الصلاحية بالثواني.

بالنسبة لمعظم الألعاب، يمكن لخوادم متعددة تحديث نفس المفتاح في نفس الوقت وتغيير القيمة. حيث أن UpdateAsync() يعدل دائمًا القيمة الأخيرة قبل التحديث، يجب عليك استخدامه لقراءة أحدث قيمة كمدخل لدالة رد الاتصال الخاصة بك.

على سبيل المثال، عينة التعليمات البرمجية التالية تقوم بتحديث عدد الموارد لمورد في جرد مشترك. تضمن UpdateAsync() أن جميع مساهمات اللاعبين ستدخل في هذا الجرد المشترك، حتى إذا تمت هذه المساهمات بشكل متزامن. في هذه الدالة، يتم أيضًا فرض حد أقصى لعدد الموارد يبلغ 500.

تحديث عدد الموارد لمورد في جرد مشترك
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("ResourceInventory")
local function contributeResources(itemResource, addedCount)
local success, newResourceCount = pcall(function()
return hashMap:UpdateAsync(itemResource, function(resource)
resource = resource or {count = 0}
resource.count = resource.count + addedCount
-- التأكد من عدم تجاوز الحد الأقصى لعدد الموارد
if resource.count > 500 then
resource.count = 500
end
return resource
end, 1200)
end)
if success then
print(newResourceCount)
end
end

تكون زمن الاستجابة لـ UpdateAsync() مشابهة لـ GetAsync() و SetAsync() ما لم يكن هناك تنافس.

عند حدوث تنافس، تعيد النظام تلقائيًا المحاولة حتى يحدث أحد هذه الثلاثة: تنجح العملية، ترجع دالة رد الاتصال nil، أو يتم الوصول إلى الحد الأقصى لعدد المحاولات. إذا وصل النظام إلى الحد الأقصى لعدد المحاولات، فإنه يُرجع تعارضًا.

إزالة البيانات

يمكنك استخدام MemoryStoreHashMap:RemoveAsync() لإزالة مفتاح واحد من خريطة التجزئة وحذف جميع البيانات في خريطة تجزئة متجر الذاكرة.

إزالة مفتاح

لإزالة مفتاح من خريطة التجزئة، قم باستدعاء MemoryStoreHashMap:RemoveAsync() مع اسم المفتاح.

إزالة مفتاح من خريطة التجزئة
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
local setSuccess, _ = pcall(function()
return hashMap:SetAsync("User_1234", 1000, 30)
end)
if setSuccess then
print("تمت الإضافة بنجاح.")
end
local removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync("User_1234")
end)
if not removeSuccess then
warn(removeError)
end

حذف جميع البيانات

لحذف جميع البيانات في خريطة التجزئة، قم بإدراج جميع العناصر باستخدام MemoryStoreHashMap:ListItemsAsync()، ثم أزلها باستخدام MemoryStoreHashMap:RemoveAsync().

حذف جميع البيانات في خريطة التجزئة
local MemoryStoreService = game:GetService("MemoryStoreService")
local hashMap = MemoryStoreService:GetHashMap("HashMap1")
-- الحصول على قائمة العناصر، 32 عنصرًا في كل مرة
local success, pages = pcall(function()
return hashMap:ListItemsAsync(32)
end)
if success then
while true do
-- الحصول على الصفحة الحالية
local entries = pages:GetCurrentPage()
local removeSuccess = true
local removeError = nil
-- تكرار جميع أزواج المفاتيح والقيم في الصفحة
for _, entry in ipairs(entries) do
print(entry.key .. " : " .. tostring(entry.value))
removeSuccess, removeError = pcall(function()
hashMap:RemoveAsync(entry.key)
end)
if not removeSuccess then
warn(removeError)
end
end
-- التحقق مما إذا تم الوصول إلى الصفحة الأخيرة
if pages.IsFinished then
print("تم الانتهاء من حذف جميع البيانات.")
break
else
print("----------")
-- الانتقال إلى الصفحة التالية
pages:AdvanceToNextPageAsync()
end
end
end
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.