Una implementación integrada de Redis. http://vedis.symisc.net
VEDIS es una biblioteca C de almacén de datos integral construida con más de 70 comandos similares en concepto a Redis pero sin la capa de red ya que Vedis se ejecuta en el mismo proceso de la aplicación host.
A diferencia de la mayoría de los otros almacenes de datos (es decir, Memcache, Redis), VEDIS no tiene un proceso de servidor separado. Vedis lee y escribe directamente a los archivos de disco ordinarios. Una base de datos completa con múltiples colecciones está contenida en un solo archivo de disco. El formato de archivo de la base de datos es multiplataforma, puede copiar libremente una base de datos entre sistemas de 32 bits y 64 bits o entre arquitecturas grandes y pequeñas.
Vedis es una biblioteca C autónoma sin dependencia. Requiere un soporte muy mínimo de bibliotecas externas o del sistema operativo. Esto lo hace muy adecuado para su uso en dispositivos integrados que carecen de la infraestructura de soporte de una computadora de escritorio. Esto también hace que VEDIS sea apropiado para su uso dentro de aplicaciones que deben ejecutarse sin modificar en una amplia variedad de computadoras de diferentes configuraciones.
La tarea principal de un motor de almacén de datos es almacenar y recuperar registros lo más rápido posible. VEDIS admite almacenamiento de datos estructurados y sin procesar.
El almacenamiento de datos estructurados se presenta a los clientes a través de la interfaz de ejecución de comandos (CEI). Básicamente, ejecuta uno o más comandos Ala Redis (es decir, establecer el valor de la clave; Obtener la clave, HSET ...) a través de VEDIS_EXEC () y extrae el resultado de ejecución (el valor de retorno del comando) a través de VEDIS_EXEC_RESULT (). Consulte la página siguiente para obtener la lista de comandos incorporados.
El almacenamiento de datos sin procesar se presenta a los clientes a través de las interfaces de almacenamiento de clave/valor. VEDIS es una tienda de clave/valor estándar similar a Berkeley DB, Tokio Gabinet, LevelDB, etc. Pero con un conjunto de características ricas que incluye soporte para transacciones (ácido), lector concurrente, etc.
En la tienda KV, tanto las claves como los valores se tratan como una simple matrices de bytes, por lo que el contenido puede ser cualquier cosa, desde cadenas ASCII, blob binaria e incluso archivos de disco. La capa de la tienda KV se presenta a los clientes a través de un conjunto de interfaces, estos incluyen: vedis_kv_store (), vedis_kv_append (), vedis_kv_fetch_callback (), vedis_kv_append_fmt (), etc., etc.
vedis *pStore; /* Datastore handle */
int rc;
/* Create our datastore */
rc = vedis_open(&pStore,argc > 1 ? argv[ 1 ] /* On-disk DB */ : " :mem: " /* In-mem DB */ );
if ( rc != VEDIS_OK ){ /* Seriously? */ return ; }
/* Execute the simplest command */
rc = vedis_exec(pStore, " SET test 'Hello World' " ,- 1 );
if ( rc != VEDIS_OK ){ /* Handle error */ }
/* Another simple command (Multiple set) */
rc = vedis_exec(pStore, " MSET username james age 27 mail [email protected] " ,- 1 );
if ( rc != VEDIS_OK ){ /* Handle error */ }
/* A quite complex command (Multiple hash set) using foreign data */
rc = vedis_exec_fmt(pStore,
" HMSET config pid %d user %s os %s scm %s " ,
1024 /* pid */ ,
" dean " , /* user */
" FreeBSD " , /* OS */
" Git " /* SCM */
);
if ( rc != VEDIS_OK ){ /* Handle error */ }
/* Fetch some data */
rc = vedis_exec(pStore, " GET test " ,- 1 );
if ( rc != VEDIS_OK ){ /* Seriously? */ }
/* Extract the return value of the last executed command (i.e. 'GET test') " */
vedis_exec_result (pStore,&pResult);
{
const char *zResponse;
/* Cast the vedis object to a string */
zResponse = vedis_value_to_string (pResult, 0 );
/* Output */
printf ( " test ==> %s n " ,zResponse); /* test ==> 'Hello world' */
}
vedis_exec (pStore, " GET mail " ,- 1 );
/* 'GET mail' return value */
vedis_exec_result (pStore,&pResult);
{
const char *zResponse;
/* Cast the vedis object to a string */
zResponse = vedis_value_to_string (pResult, 0 );
/* Output */
printf ( " mail ==> %s n " ,zResponse); /* Should be '[email protected]' */
}
/*
* A command which return multiple value in array.
*/
vedis_exec (pStore, " MGET username age " ,- 1 ); /* james 27 */
vedis_exec_result (pStore,&pResult);
if ( vedis_value_is_array(pResult) ){
/* Iterate over the elements of the returned array */
vedis_value *pEntry;
puts ( " Array entries: " );
while ((pEntry = vedis_array_next_elem (pResult)) != 0 ){
const char *zEntry;
/* Cast to string and output */
zEntry = vedis_value_to_string (pEntry, 0 );
/* Output */
printf ( " t %s n " ,zEntry);
}
}
/* Extract hashtable data */
vedis_exec (pStore, " HGET config pid " ,- 1 ); /* 1024 */
vedis_exec_result (pStore,&pResult);
{
int pid;
/* Cast to integer */
pid = vedis_value_to_int (pResult);
/* Output */
printf ( " pid ==> %d n " ,pid); /* Should be 1024 */
}
/* Finally, auto-commit the transaction and close our datastore */
vedis_close (pStore);Visite http://vedis.symisc.net