تم تشعب هذا المشروع من مشروع Redis مفتوح المصدر مباشرة قبل الانتقال إلى تراخيص المصدر الجديدة المتاحة.
هذا الملف التمهيدي (README) هو مجرد مستند بداية سريع. يمكن العثور على مزيد من التفاصيل ضمن valkey.io
Valkey هو خادم بنية بيانات عالي الأداء يخدم في المقام الأول أعباء عمل المفاتيح/القيمة. وهو يدعم مجموعة واسعة من الهياكل الأصلية ونظام المكونات الإضافية القابل للتوسيع لإضافة هياكل بيانات جديدة وأنماط الوصول.
Makefile
يمكن تجميع Valkey واستخدامه على Linux وOSX وOpenBSD وNetBSD وFreeBSD. نحن ندعم بنيات endian الكبيرة والصغيرة، وكلاً من أنظمة 32 بت و64 بت.
قد يتم تجميعه على أنظمة مشتقة من Solaris (على سبيل المثال SmartOS) ولكن دعمنا لهذا النظام الأساسي هو أفضل جهد ولا نضمن أن يعمل Valkey بشكل جيد كما هو الحال في Linux وOSX و*BSD.
الأمر بسيط مثل:
% make
للإنشاء بدعم TLS، ستحتاج إلى مكتبات تطوير OpenSSL (مثل libssl-dev على Debian/Ubuntu).
لبناء دعم TLS باعتباره Valkey مدمجًا:
% make BUILD_TLS=yes
لإنشاء TLS كوحدة Valkey:
% make BUILD_TLS=module
لاحظ أن وضع الحارس لا يدعم وحدة TLS.
للبناء باستخدام دعم RDMA التجريبي، ستحتاج إلى مكتبات تطوير RDMA (مثل librdmacm-dev وlibibverbs-dev على Debian/Ubuntu). في الوقت الحالي، يدعم Valkey فقط RDMA كوضع وحدة اتصال. يجري:
% make BUILD_RDMA=module
للبناء بدعم systemd، ستحتاج إلى مكتبات تطوير systemd (مثل libsystemd-dev على Debian/Ubuntu أو systemd-devel على CentOS) وتشغيل:
% make USE_SYSTEMD=yes
لإلحاق لاحقة بأسماء برامج Valkey، استخدم:
% make PROG_SUFFIX="-alt"
يمكنك إنشاء ثنائي Valkey 32 بت باستخدام:
% make 32bit
بعد إنشاء Valkey، من الجيد اختباره باستخدام:
% make test
ما ورد أعلاه يجري اختبارات التكامل الرئيسية. يتم بدء اختبارات إضافية باستخدام:
% make test-unit # Unit tests
% make test-modules # Tests of the module API
% make test-sentinel # Valkey Sentinel integration tests
% make test-cluster # Valkey Cluster integration tests
يمكن العثور على المزيد حول تشغيل اختبارات التكامل في الاختبارات/README.md وبالنسبة لاختبارات الوحدة، راجع src/unit/README.md.
يحتوي Valkey على بعض التبعيات المضمنة في دليل deps
. لا يقوم make
بإعادة بناء التبعيات تلقائيًا حتى إذا تغير شيء ما في الكود المصدري للتبعيات.
عندما تقوم بتحديث التعليمات البرمجية المصدر باستخدام git pull
أو عندما يتم تعديل التعليمات البرمجية الموجودة داخل شجرة التبعيات بأي طريقة أخرى، تأكد من استخدام الأمر التالي لتنظيف كل شيء وإعادة البناء من البداية:
% make distclean
سيؤدي هذا إلى تنظيف: jemalloc، وlua، وiraris، وlinenoise، والتبعيات الأخرى.
وأيضًا إذا قمت بفرض خيارات إنشاء معينة مثل هدف 32 بت، وعدم وجود تحسينات لبرنامج التحويل البرمجي C (لأغراض تصحيح الأخطاء)، وخيارات وقت البناء المماثلة الأخرى، فسيتم تخزين هذه الخيارات مؤقتًا إلى أجل غير مسمى حتى تقوم بإصدار أمر make distclean
.
إذا كنت تحتاج بعد إنشاء Valkey بهدف 32 بت إلى إعادة بنائه بهدف 64 بت، أو العكس، فستحتاج إلى إجراء make distclean
في الدليل الجذر لتوزيع Valkey.
في حالة حدوث أخطاء في البناء عند محاولة إنشاء ثنائي 32 بت من Valkey، حاول اتباع الخطوات التالية:
make 32bit
: make CFLAGS="-m32 -march=native" LDFLAGS="-m32"
يتم تحديد مخصص ذاكرة غير افتراضي عند إنشاء Valkey عن طريق تعيين متغير البيئة MALLOC
. يتم تجميع Valkey وربطه مع libc malloc افتراضيًا، باستثناء أن jemalloc هو الإعداد الافتراضي في أنظمة Linux. تم اختيار هذا الإعداد الافتراضي لأن jemalloc أثبت أن لديه مشاكل تجزئة أقل من libc malloc.
لفرض التجميع ضد libc malloc، استخدم:
% make MALLOC=libc
للتجميع ضد jemalloc على أنظمة Mac OS X، استخدم:
% make MALLOC=jemalloc
افتراضيًا، سيتم إنشاء Valkey باستخدام وظيفة POSIX Clock_gettime كمصدر للساعة الرتيبة. في معظم الأنظمة الحديثة، يمكن استخدام ساعة المعالج الداخلية لتحسين الأداء. يمكن العثور على التحذيرات هنا: http://oliveryang.net/2015/09/pitfalls-of-TSC-usage/
لإنشاء دعم لساعة التعليمات الداخلية للمعالج، استخدم:
% make CFLAGS="-DUSE_PROCESSOR_CLOCK"
سيتم إنشاء Valkey بمخرجات ملونة سهلة الاستخدام افتراضيًا. إذا كنت تريد رؤية مخرجات أكثر تفصيلاً، فاستخدم ما يلي:
% make V=1
لتشغيل Valkey بالتكوين الافتراضي، فقط اكتب:
% cd src
% ./valkey-server
إذا كنت تريد توفير valkey.conf، فيجب عليك تشغيله باستخدام معلمة إضافية (مسار ملف التكوين):
% cd src
% ./valkey-server /path/to/valkey.conf
من الممكن تغيير تكوين Valkey عن طريق تمرير المعلمات مباشرةً كخيارات باستخدام سطر الأوامر. أمثلة:
% ./valkey-server --port 9999 --replicaof 127.0.0.1 6379
% ./valkey-server /etc/valkey/6379.conf --loglevel debug
جميع الخيارات الموجودة في valkey.conf مدعومة أيضًا كخيارات باستخدام سطر الأوامر، بنفس الاسم تمامًا.
لتشغيل خادم Valkey يدويًا باستخدام وضع TLS (بافتراض أنه تم استدعاء ./gen-test-certs.sh
بحيث تتوفر نماذج الشهادات/المفاتيح):
وضع TLS المدمج:
./src/valkey-server --tls-port 6379 --port 0
--tls-cert-file ./tests/tls/valkey.crt
--tls-key-file ./tests/tls/valkey.key
--tls-ca-cert-file ./tests/tls/ca.crt
وضع وحدة TLS:
./src/valkey-server --tls-port 6379 --port 0
--tls-cert-file ./tests/tls/valkey.crt
--tls-key-file ./tests/tls/valkey.key
--tls-ca-cert-file ./tests/tls/ca.crt
--loadmodule src/valkey-tls.so
لاحظ أنه يمكنك تعطيل TCP عن طريق تحديد --port 0
بشكل صريح. من الممكن أيضًا أن يتوفر كل من TCP وTLS في نفس الوقت، ولكن سيتعين عليك تعيين منافذ مختلفة.
استخدم valkey-cli
للاتصال بخادم Valkey:
./src/valkey-cli --tls
--cert ./tests/tls/valkey.crt
--key ./tests/tls/valkey.key
--cacert ./tests/tls/ca.crt
تحديد --tls-replication yes
يجعل النسخة المتماثلة تتصل بالنسخة الأساسية.
استخدام --tls-cluster yes
يجعل Valkey Cluster يستخدم TLS عبر العقد.
لاحظ أن Valkey Over RDMA هي ميزة تجريبية. يجوز تغييره أو إزالته في أي إصدار ثانوي أو رئيسي. حاليًا، يتم دعمه فقط على نظام التشغيل Linux.
لتشغيل خادم Valkey يدويًا باستخدام وضع RDMA:
% ./src/valkey-server --protected-mode no
--loadmodule src/valkey-rdma.so bind=192.168.122.100 port=6379
من الممكن تغيير عنوان/منفذ ربط RDMA عن طريق أمر وقت التشغيل:
192.168.122.100:6379> CONFIG SET rdma.port 6380
من الممكن أيضًا توفر كل من RDMA وTCP، ولا يوجد تعارض بين TCP(6379) وRDMA(6379)، على سبيل المثال:
% ./src/valkey-server --protected-mode no
--loadmodule src/valkey-rdma.so bind=192.168.122.100 port=6379
--port 6379
لاحظ أن بطاقة الشبكة (192.168.122.100 في هذا المثال) يجب أن تدعم RDMA. لاختبار خادم يدعم RDMA أم لا:
% rdma res show (a new version iproute2 package)
أو:
% ibv_devices
يمكنك استخدام valkey-cli للعب مع Valkey. ابدأ تشغيل مثيل خادم valkey، ثم حاول القيام بما يلي في محطة طرفية أخرى:
% cd src
% ./valkey-cli
valkey> ping
PONG
valkey> set foo bar
OK
valkey> get foo
"bar"
valkey> incr mycounter
(integer) 1
valkey> incr mycounter
(integer) 2
valkey>
لتثبيت ثنائيات Valkey في /usr/local/bin، فقط استخدم:
% make install
يمكنك استخدام make PREFIX=/some/other/directory install
إذا كنت ترغب في استخدام وجهة مختلفة.
ملاحظة : للتوافق مع Redis، نقوم بإنشاء روابط رمزية من أسماء Redis ( redis-server
، redis-cli
، وما إلى ذلك) إلى ثنائيات Valkey المثبتة بواسطة make install
. يتم إنشاء الروابط الرمزية في نفس الدليل مثل ثنائيات Valkey. تتم إزالة الروابط الرمزية عند استخدام make uninstall
. يمكن تخطي إنشاء الارتباطات الرمزية عن طريق تعيين متغير ملف التعريف USE_REDIS_SYMLINKS=no
.
سيقوم make install
بتثبيت الثنائيات في نظامك فقط، لكنه لن يقوم بتكوين البرامج النصية init وملفات التكوين في المكان المناسب. هذا ليس ضروريًا إذا كنت تريد فقط اللعب قليلاً مع Valkey، ولكن إذا كنت تقوم بتثبيته بالطريقة الصحيحة لنظام الإنتاج، فلدينا برنامج نصي يقوم بذلك لأنظمة Ubuntu وDebian:
% cd utils
% ./install_server.sh
ملاحظة : لن يعمل install_server.sh
على نظام التشغيل Mac OSX؛ إنه مصمم لنظام التشغيل Linux فقط.
سيطرح عليك البرنامج النصي بعض الأسئلة وسيقوم بإعداد كل ما تحتاجه لتشغيل Valkey بشكل صحيح كبرنامج خفي للخلفية سيبدأ مرة أخرى عند إعادة تشغيل النظام.
ستتمكن من إيقاف Valkey وتشغيله باستخدام البرنامج النصي المسمى /etc/init.d/valkey_<portnumber>
، على سبيل المثال /etc/init.d/valkey_6379
.
CMake
بالإضافة إلى بنية Makefile
التقليدية، يدعم Valkey نظام بناء بديل وتجريبي باستخدام CMake
.
لإنشاء Valkey
وتثبيته، في وضع Release
(الإصدار المحسّن)، اكتب ما يلي في جهازك الطرفي:
mkdir build-release
cd $_
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/valkey
sudo make install
# Valkey is now installed under /opt/valkey
الخيارات الأخرى التي يدعمها نظام بناء CMake
الخاص بـ Valkey:
-DBUILD_TLS=<on|off|module>
تمكين إنشاء TLS لـ Valkey-DBUILD_RDMA=<off|module>
تمكين إنشاء وحدة RDMA (وضع الوحدة فقط مدعوم)-DBUILD_MALLOC=<libc|jemalloc|tcmalloc|tcmalloc_minimal>
اختر المُخصص الذي تريد استخدامه. الافتراضي على Linux: jemalloc
، لأنظمة التشغيل الأخرى: libc
-DBUILD_SANITIZER=<address|thread|undefined>
إنشاء مع تمكين مطهر العناوين-DBUILD_UNIT_TESTS=[1|0]
عند التعيين، سينتج عن البناء valkey-unit-tests
القابلة للتنفيذ-DBUILD_TEST_MODULES=[1|0]
عند التعيين، سيتضمن البناء الوحدات الموجودة ضمن مجلد tests/modules
-DBUILD_EXAMPLE_MODULES=[1|0]
عند التعيين، سيتضمن الإصدار نماذج الوحدات الموجودة ضمن المجلد src/modules
-DCMAKE_BUILD_TYPE=<Debug|Release...>
حدد نوع البنية، راجع دليل CMake لمزيد من التفاصيل-DCMAKE_INSTALL_PREFIX=/installation/path
يتجاوز هذه القيمة لتحديد بادئة تثبيت مخصصة. الافتراضي: /usr/local
-G<Generator Name>
يقوم بإنشاء ملفات بناء لـ "اسم المولد". افتراضيًا، سيقوم CMake بإنشاء Makefile
s. يقوم CMake
بإنشاء مخرجات ملونة سهلة الاستخدام بشكل افتراضي. إذا كنت تريد رؤية مخرجات أكثر تفصيلاً، فاستخدم ما يلي:
make VERBOSE=1
أثناء مرحلة CMake
، يقوم CMake
بتخزين المتغيرات مؤقتًا في ملف محلي يسمى CMakeCache.txt
. تتم إزالة جميع المتغيرات التي تم إنشاؤها بواسطة Valkey من ذاكرة التخزين المؤقت بمجرد استهلاكها (يتم ذلك عن طريق الاتصال بـ unset(VAR-NAME CACHE)
). ومع ذلك، يتم الاحتفاظ ببعض المتغيرات، مثل مسار المترجم، في ذاكرة التخزين المؤقت. لبدء إنشاء جديد، قم بإزالة ملف ذاكرة التخزين المؤقت CMakeCache.txt
من مجلد البناء، أو قم بحذف مجلد البناء بالكامل.
من المهم إعادة تشغيل CMake
عند إضافة ملفات مصدر جديدة.
أثناء مرحلة CMake
من الإنشاء، يقوم CMake
بإنشاء ملف JSON يُسمى compile_commands.json
ويضعه ضمن مجلد الإنشاء. يتم استخدام هذا الملف بواسطة العديد من بيئات التطوير المتكاملة ومحرري النصوص لتوفير إكمال التعليمات البرمجية (عبر clangd
).
هناك تحذير بسيط وهو أن هذه الأدوات ستبحث عن compile_commands.json
ضمن المجلد العلوي لـ Valkey. الحل الشائع هو إنشاء رابط رمزي إليه:
cd /path/to/valkey/
# We assume here that your build folder is `build-release`
ln -sf $( pwd ) /build-release/compile_commands.json $( pwd ) /compile_commands.json
أعد تشغيل IDE الخاص بك وفويلا
يرجى الاطلاع على CONTRIBUTING.md. للتعرف على الأخطاء الأمنية ونقاط الضعف، يرجى مراجعة SECURITY.md.
Valkey a Series of LF Projects, LLC 2810 N Church St, PMB 57274 ويلمنجتون، ديلاوير 19802-4447