Une implémentation intégrée de redis. http://vedis.symisc.net
Vedis est une bibliothèque de carreaux de données intégrée C intégrée construite avec plus de 70 commandes similaires dans le concept à redis, mais sans la couche de mise en réseau depuis que Vedis s'exécute dans le même processus de l'application hôte.
Contrairement à la plupart des autres datastores (c.-à-d. Memcache, redis), Vedis n'a pas de processus de serveur distinct. Vedis lit et écrit directement sur des fichiers de disque ordinaires. Une base de données complète avec plusieurs collections, est contenue dans un seul fichier de disque. Le format de fichier de base de données est multiplateforme, vous pouvez copier librement une base de données entre les systèmes 32 bits et 64 bits ou entre les architectures Big-Endian et Little-Endian.
Vedis est une bibliothèque C autonome sans dépendance. Il nécessite un support très minimal des bibliothèques externes ou du système d'exploitation. Cela le rend bien adapté à une utilisation dans des appareils intégrés qui n'ont pas l'infrastructure de support d'un ordinateur de bureau. Cela rend également VEDIS approprié pour une utilisation dans les applications qui doivent s'exécuter sans modification sur une grande variété d'ordinateurs de configurations variables.
La tâche principale d'un moteur de carrefeuille est de stocker et de récupérer les enregistrements aussi rapidement que possible. Vedis prend en charge le stockage de données structurées et brutes.
Le stockage de données structuré est présenté aux clients via l'interface d'exécution de commande (CEI). Fondamentalement, vous exécutez une ou plusieurs commandes ala redis (c'est-à-dire la valeur de clé de définition; get key, hset ...) via vedis_exec () et vous extraire le résultat de l'exécution (la valeur de retour de la commande) via vedis_exec_result (). Reportez-vous à la page suivante pour la liste des commandes intégrées.
Le stockage de données bruts est présenté aux clients via les interfaces de magasin de clé / valeur. Vedis est un magasin de clé / valeur standard similaire à Berkeley DB, Tokyo Cabinet, LevelDB, etc. mais avec un ensemble de fonctionnalités riches comprenant la prise en charge des transactions (acide), le lecteur simultané, etc.
Dans le magasin KV, les clés et les valeurs sont traitées comme de simples tableaux d'octets, de sorte que le contenu peut être quelque chose des chaînes ASCII, des blobs binaires et même des fichiers de disque. La couche de magasin KV est présentée aux clients via un ensemble d'interfaces, celles-ci comprennent: VEDIS_KV_STORE (), VEDIS_KV_APPEND (), VEDIS_KV_FETCH_CALLBACK (), VEDIS_KV_APPEND_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);Visitez http://vedis.symisc.net