Uma implementação incorporada de redis. http://vedis.symisc.net
O VEDIS é uma biblioteca C da Biblioteca de DataStore incorporável, construída com mais de 70 comandos semelhantes em conceito aos redis, mas sem a camada de rede, desde que os Vedis são executados no mesmo processo do aplicativo host.
Ao contrário da maioria dos outros dados de dados (ou seja, Memcache, Redis), os Vedis não possuem um processo de servidor separado. O VEDIS lê e grava diretamente em arquivos de disco comuns. Um banco de dados completo com várias coleções, está contido em um único arquivo de disco. O formato do arquivo de banco de dados é de plataforma cruzada, você pode copiar livremente um banco de dados entre sistemas de 32 e 64 bits ou entre arquiteturas Big-Endian e Little-Endian.
O VEDIS é uma biblioteca C independente sem dependência. Requer suporte muito mínimo de bibliotecas externas ou do sistema operacional. Isso o torna adequado para uso em dispositivos incorporados que não possuem a infraestrutura de suporte de um computador de mesa. Isso também torna o VEDIS apropriado para uso em aplicativos que precisam ser executados sem modificação em uma ampla variedade de computadores de configurações variadas.
A principal tarefa de um mecanismo de armazenamento de dados é armazenar e recuperar registros o mais rápido possível. Os VEDIS suportam o armazenamento de dados estruturados e brutos.
O armazenamento de dados estruturado é apresentado aos clientes por meio da interface de execução de comando (CEI). Basicamente, você executa um ou mais comandos ala redis (ou seja, o valor da tecla Definir; Get Key, Hset ...) via Vedis_Exec () e extrai o resultado da execução (o valor de retorno do comando) via Vedis_Exec_Result (). Consulte a página a seguir para obter a lista de comandos internos.
O armazenamento de dados brutos é apresentado aos clientes através das interfaces de armazenamento de chave/valor. O VEDIS é um armazenamento de chave/valor padrão semelhante ao Berkeley DB, gabinete de Tóquio, LevelDB, etc., mas com um rico conjunto de recursos, incluindo suporte para transações (ácido), leitor concorrente, etc.
Sob a loja KV, as teclas e os valores são tratados como matrizes simples de bytes; portanto, o conteúdo pode ser qualquer coisa, desde strings ASCII, bolhas binárias e até arquivos de disco. A camada da loja da KV é apresentada aos clientes por meio de um conjunto de interfaces, inclui: VEDIS_KV_STORE (), VEDIS_KV_APPEND (), VEDIS_KV_FETCH_CALLBACK (), VEDIS_KV_APND_FMT (), 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