Este proyecto se bifurcó del proyecto Redis de código abierto justo antes de la transición a sus nuevas licencias disponibles de código abierto.
Este archivo README es solo un documento de inicio rápido. Se pueden encontrar más detalles en valkey.io
Valkey es un servidor de estructura de datos de alto rendimiento que atiende principalmente cargas de trabajo clave/valor. Admite una amplia gama de estructuras nativas y un sistema de complementos extensible para agregar nuevas estructuras de datos y patrones de acceso.
Makefile
Valkey se puede compilar y utilizar en Linux, OSX, OpenBSD, NetBSD, FreeBSD. Admitimos arquitecturas big endian y little endian, y sistemas de 32 y 64 bits.
Puede compilarse en sistemas derivados de Solaris (por ejemplo, SmartOS), pero nuestro soporte para esta plataforma es nuestro mejor esfuerzo y no se garantiza que Valkey funcione tan bien como en Linux, OSX y *BSD.
Es tan simple como:
% make
Para compilar con soporte TLS, necesitará bibliotecas de desarrollo OpenSSL (por ejemplo, libssl-dev en Debian/Ubuntu).
Para crear compatibilidad con TLS como Valkey integrado:
% make BUILD_TLS=yes
Para construir TLS como módulo Valkey:
% make BUILD_TLS=module
Tenga en cuenta que el modo centinela no es compatible con el módulo TLS.
Para compilar con soporte RDMA experimental, necesitará bibliotecas de desarrollo RDMA (por ejemplo, librdmacm-dev y libibverbs-dev en Debian/Ubuntu). Por ahora, Valkey solo admite RDMA como modo de módulo de conexión. Correr:
% make BUILD_RDMA=module
Para compilar con soporte systemd, necesitará las bibliotecas de desarrollo systemd (como libsystemd-dev en Debian/Ubuntu o systemd-devel en CentOS) y ejecutar:
% make USE_SYSTEMD=yes
Para agregar un sufijo a los nombres de los programas Valkey, use:
% make PROG_SUFFIX="-alt"
Puedes construir un binario Valkey de 32 bits usando:
% make 32bit
Después de construir Valkey, es una buena idea probarlo usando:
% make test
Lo anterior ejecuta las principales pruebas de integración. Se inician pruebas adicionales utilizando:
% 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
Puede encontrar más información sobre cómo ejecutar las pruebas de integración en tests/README.md y para pruebas unitarias, consulte src/unit/README.md.
Valkey tiene algunas dependencias que se incluyen en el directorio deps
. make
no reconstruye automáticamente las dependencias incluso si cambia algo en el código fuente de las dependencias.
Cuando actualice el código fuente con git pull
o cuando el código dentro del árbol de dependencias se modifique de cualquier otra manera, asegúrese de usar el siguiente comando para limpiar realmente todo y reconstruir desde cero:
% make distclean
Esto limpiará: jemalloc, lua, Hiredis, linenoise y otras dependencias.
Además, si fuerza ciertas opciones de compilación como destino de 32 bits, sin optimizaciones del compilador de C (para fines de depuración) y otras opciones de tiempo de compilación similares, esas opciones se almacenan en caché indefinidamente hasta que emita un comando make distclean
.
Si después de compilar Valkey con un destino de 32 bits necesita reconstruirlo con un destino de 64 bits, o al revés, debe realizar un make distclean
en el directorio raíz de la distribución de Valkey.
En caso de errores de compilación al intentar compilar un binario de Valkey de 32 bits, intente los siguientes pasos:
make 32bit
: make CFLAGS="-m32 -march=native" LDFLAGS="-m32"
La selección de un asignador de memoria no predeterminado al compilar Valkey se realiza configurando la variable de entorno MALLOC
. Valkey se compila y vincula con libc malloc de forma predeterminada, con la excepción de jemalloc que es el valor predeterminado en los sistemas Linux. Se eligió este valor predeterminado porque se ha demostrado que jemalloc tiene menos problemas de fragmentación que libc malloc.
Para forzar la compilación contra libc malloc, use:
% make MALLOC=libc
Para compilar contra jemalloc en sistemas Mac OS X, use:
% make MALLOC=jemalloc
De forma predeterminada, Valkey compilará utilizando la función POSIX clock_gettime como fuente de reloj monótono. En la mayoría de los sistemas modernos, el reloj interno del procesador se puede utilizar para mejorar el rendimiento. Las precauciones se pueden encontrar aquí: http://oliveryang.net/2015/09/pitfalls-of-TSC-usage/
Para construir con soporte para el reloj de instrucciones interno del procesador, use:
% make CFLAGS="-DUSE_PROCESSOR_CLOCK"
Valkey construirá con una salida coloreada fácil de usar de forma predeterminada. Si desea ver un resultado más detallado, utilice lo siguiente:
% make V=1
Para ejecutar Valkey con la configuración predeterminada, simplemente escriba:
% cd src
% ./valkey-server
Si desea proporcionar su valkey.conf, debe ejecutarlo usando un parámetro adicional (la ruta del archivo de configuración):
% cd src
% ./valkey-server /path/to/valkey.conf
Es posible modificar la configuración de Valkey pasando parámetros directamente como opciones usando la línea de comando. Ejemplos:
% ./valkey-server --port 9999 --replicaof 127.0.0.1 6379
% ./valkey-server /etc/valkey/6379.conf --loglevel debug
Todas las opciones en valkey.conf también se admiten como opciones usando la línea de comando, con exactamente el mismo nombre.
Para ejecutar manualmente un servidor Valkey con modo TLS (suponiendo que se invocó ./gen-test-certs.sh
para que haya disponibles certificados/claves de muestra):
Modo integrado 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
Modo de módulo 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
Tenga en cuenta que puede deshabilitar TCP especificando --port 0
explícitamente. También es posible tener TCP y TLS disponibles al mismo tiempo, pero tendrás que asignar puertos diferentes.
Utilice valkey-cli
para conectarse al servidor Valkey:
./src/valkey-cli --tls
--cert ./tests/tls/valkey.crt
--key ./tests/tls/valkey.key
--cacert ./tests/tls/ca.crt
Especificar --tls-replication yes
hace que una réplica se conecte al principal.
El uso de --tls-cluster yes
hace que Valkey Cluster use TLS en todos los nodos.
Tenga en cuenta que Valkey Over RDMA es una función experimental. Puede cambiarse o eliminarse en cualquier versión menor o mayor. Actualmente, sólo es compatible con Linux.
Para ejecutar manualmente un servidor Valkey con modo RDMA:
% ./src/valkey-server --protected-mode no
--loadmodule src/valkey-rdma.so bind=192.168.122.100 port=6379
Es posible cambiar la dirección/puerto de enlace de RDMA mediante el comando de tiempo de ejecución:
192.168.122.100:6379> CONFIG SET rdma.port 6380
También es posible tener disponibles tanto RDMA como TCP, y no hay conflicto entre TCP(6379) y RDMA(6379), por ejemplo:
% ./src/valkey-server --protected-mode no
--loadmodule src/valkey-rdma.so bind=192.168.122.100 port=6379
--port 6379
Tenga en cuenta que la tarjeta de red (192.168.122.100 de este ejemplo) debe admitir RDMA. Para probar un servidor que soporta RDMA o no:
% rdma res show (a new version iproute2 package)
O:
% ibv_devices
Puedes usar valkey-cli para jugar con Valkey. Inicie una instancia de valkey-server, luego en otra terminal intente lo siguiente:
% 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>
Para instalar los binarios de Valkey en /usr/local/bin, simplemente use:
% make install
Puede utilizar make PREFIX=/some/other/directory install
si desea utilizar un destino diferente.
Nota : Para compatibilidad con Redis, creamos enlaces simbólicos desde los nombres de Redis ( redis-server
, redis-cli
, etc.) a los archivos binarios de Valkey instalados por make install
. Los enlaces simbólicos se crean en el mismo directorio que los binarios de Valkey. Los enlaces simbólicos se eliminan cuando se utiliza make uninstall
. La creación de enlaces simbólicos se puede omitir configurando la variable makefile USE_REDIS_SYMLINKS=no
.
make install
simplemente instalará archivos binarios en su sistema, pero no configurará los scripts de inicio ni los archivos de configuración en el lugar apropiado. Esto no es necesario si sólo quieres jugar un poco con Valkey, pero si lo estás instalando de la forma adecuada para un sistema de producción, tenemos un script que hace esto para los sistemas Ubuntu y Debian:
% cd utils
% ./install_server.sh
Nota : install_server.sh
no funcionará en Mac OSX; está construido sólo para Linux.
El script le hará algunas preguntas y configurará todo lo que necesita para ejecutar Valkey correctamente como un demonio en segundo plano que se iniciará nuevamente al reiniciar el sistema.
Podrás detener e iniciar Valkey usando el script llamado /etc/init.d/valkey_<portnumber>
, por ejemplo /etc/init.d/valkey_6379
.
CMake
Además de la compilación tradicional Makefile
, Valkey admite un sistema de compilación alternativo y experimental que utiliza CMake
.
Para compilar e instalar Valkey
, en el modo Release
(una compilación optimizada), escriba esto en su terminal:
mkdir build-release
cd $_
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/valkey
sudo make install
# Valkey is now installed under /opt/valkey
Otras opciones admitidas por el sistema de compilación CMake
de Valkey:
-DBUILD_TLS=<on|off|module>
habilita la compilación TLS para Valkey-DBUILD_RDMA=<off|module>
habilita la compilación del módulo RDMA (solo se admite el modo de módulo)-DBUILD_MALLOC=<libc|jemalloc|tcmalloc|tcmalloc_minimal>
elija el asignador a utilizar. Predeterminado en Linux: jemalloc
, para otros sistemas operativos: libc
-DBUILD_SANITIZER=<address|thread|undefined>
compilación con el desinfectante de direcciones habilitado-DBUILD_UNIT_TESTS=[1|0]
cuando se establece, la compilación producirá el ejecutable valkey-unit-tests
-DBUILD_TEST_MODULES=[1|0]
cuando se configura, la compilación incluirá los módulos ubicados en la carpeta tests/modules
-DBUILD_EXAMPLE_MODULES=[1|0]
cuando se configura, la compilación incluirá los módulos de ejemplo ubicados en la carpeta src/modules
-DCMAKE_BUILD_TYPE=<Debug|Release...>
define el tipo de compilación, consulte el manual de CMake para obtener más detalles-DCMAKE_INSTALL_PREFIX=/installation/path
anula este valor para definir un prefijo de instalación personalizado. Predeterminado: /usr/local
-G<Generator Name>
genera archivos de compilación para "Nombre del generador". De forma predeterminada, CMake generará Makefile
s. CMake
genera una salida coloreada fácil de usar de forma predeterminada. Si desea ver un resultado más detallado, utilice lo siguiente:
make VERBOSE=1
Durante la etapa CMake
, CMake
almacena en caché las variables en un archivo local llamado CMakeCache.txt
. Todas las variables generadas por Valkey se eliminan del caché una vez consumidas (esto se hace llamando a unset(VAR-NAME CACHE)
). Sin embargo, algunas variables, como la ruta del compilador, se mantienen en caché. Para iniciar una nueva compilación, elimine el archivo de caché CMakeCache.txt
de la carpeta de compilación o elimine la carpeta de compilación por completo.
Es importante volver a ejecutar CMake
al agregar nuevos archivos fuente.
Durante la etapa CMake
de la compilación, CMake
genera un archivo JSON llamado compile_commands.json
y lo coloca en la carpeta de compilación. Este archivo es utilizado por muchos IDE y editores de texto para completar el código (a través de clangd
).
Una pequeña advertencia es que estas herramientas buscarán compile_commands.json
en la carpeta superior de Valkey. Una solución común es crear un enlace simbólico:
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
Reinicia tu IDE y listo
Consulte CONTRIBUTING.md. Para errores de seguridad y vulnerabilidades, consulte SECURITY.md.
Valkey una serie de proyectos LF, LLC 2810 N Church St, PMB 57274 Wilmington, Delaware 19802-4447