Eine eingebettete Implementierung von Redis. http://vedis.symisc.net
Vedis ist eine eingebettete Datenspeicher -C -Bibliothek, die mit über 70 Befehlen im Konzept wie Redis erstellt wurde, jedoch ohne die Networking -Ebene, seit Vedis im selben Prozess der Hostanwendung ausgeführt wird.
Im Gegensatz zu den meisten anderen Datenspeichern (dh Memcache, Redis) hat Vedis keinen separaten Serverprozess. Vedis liest und schreibt direkt auf normale Festplattendateien. Eine vollständige Datenbank mit mehreren Sammlungen ist in einer einzelnen Festplattendatei enthalten. Das Datenbankdateiformat ist plattformübergreifend. Sie können eine Datenbank zwischen 32-Bit- und 64-Bit-Systemen oder zwischen Big-Endian- und Little-Endian-Architekturen frei kopieren.
Vedis ist eine in sich geschlossene C-Bibliothek ohne Abhängigkeit. Es erfordert eine sehr minimale Unterstützung von externen Bibliotheken oder vom Betriebssystem. Dies macht es gut für den Einsatz in eingebetteten Geräten, denen die Support -Infrastruktur eines Desktop -Computers fehlt. Dies ist auch VEDIS für die Verwendung in Anwendungen geeignet, die ohne Änderung einer Vielzahl von Computern unterschiedlicher Konfigurationen ausgeführt werden müssen.
Die Hauptaufgabe einer DataStore -Engine besteht darin, Datensätze so schnell wie möglich zu speichern und abzurufen. Vedis unterstützt sowohl die strukturierte als auch die Rohdatenspeicherung.
Strukturierte Datenspeicherung wird Clients über die Befehlsausführungsschnittstelle (CEI) vorgestellt. Grundsätzlich führen Sie eine oder mehrere Befehle aus, die Ala Redis (dh der Schlüsselwert festlegen; Key, Hset ...) über vedis_exec () und das Ausführungsergebnis (den Rückgabewert des Befehls) über vedis_exec_result () extrahieren. Die folgende Seite finden Sie in der Liste der integrierten Befehle.
Die Speicherung von Rohdaten wird Clients über die Schlüssel-/Wertspeicherschnittstellen präsentiert. Vedis ist ein Standardschlüssel-/Wertspeicher, ähnlich wie Berkeley DB, Tokyo Cabinet, LevelDB usw., jedoch mit einem reichhaltigen Merkmalssatz, einschließlich Unterstützung für Transaktionen (Säure), gleichzeitiger Leser usw.
Im KV Store werden sowohl Schlüssel als auch Werte als einfache Arrays von Bytes behandelt, sodass Inhalte von ASCII -Strings, Binärblob und sogar Festplattendateien stammen können. Die KV Store -Ebene wird Clients über eine Reihe von Schnittstellen präsentiert. Dazu gehören: vedis_kv_store (), vedis_kv_append (), vedis_kv_fetch_callback (), vedis_kv_append_fmt () usw.
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);Besuchen Sie http://vedis.symisc.net