Встроенная реализация Redis. http://vedis.symisc.net
VEDIS - это библиотека Datastore C, созданную более 70 командами, аналогичными концепциями, но без сетевого уровня, так как VEDIS работает в том же процессе приложения хоста.
В отличие от большинства других данных данных (т.е. memcache, redis), VEDIS не имеет отдельного серверного процесса. VEDIS читает и пишет непосредственно в обычные файлы дисков. Полная база данных с несколькими коллекциями содержится в одном файле диска. Формат файла базы данных является кроссплатформенным, вы можете свободно копировать базу данных между 32-битными и 64-битными системами или между биг-эндианскими и маленькими архитектурами.
VEDIS является автономной библиотекой C без зависимости. Это требует очень минимальной поддержки со стороны внешних библиотек или от операционной системы. Это делает его хорошо подходящим для использования в встроенных устройствах, в которых отсутствует инфраструктура поддержки настольного компьютера. Это также делает VEDI подходящим для использования в приложениях, которые должны работать без модификации на широком спектре компьютеров различных конфигураций.
Основная задача двигателя данных - хранить и извлекать записи как можно быстрее. Vedis поддерживает как структурированное, так и необработанное хранилище данных.
Структурное хранилище данных представлено клиентам через интерфейс выполнения команды (CEI). По сути, вы выполняете одну или несколько команд Ala Redis (то есть значение клавиши SET; GET клавиша, hset ...) через vedis_exec () и вы извлеките результат выполнения (возвращаемое значение команды) через vedis_exec_result (). Обратитесь к следующей странице для списка встроенных команд.
Необработанное хранилище данных представлено клиентам через интерфейсы Key/Value Store. VEDIS - это стандартный магазин ключей/значения, аналогичный Berkeley DB, Tokyo Cabinet, LevelDB и т. Д., Но с богатым набором функций, включая поддержку транзакций (кислота), одновременного читателя и т. Д.
В рамках KV -магазина как клавиши, так и значения рассматриваются как простые массивы байтов, поэтому содержание может быть чем угодно от строк ASCII, двоичного BLOB и даже файлов дисков. Уровень магазина KV представлен клиентам через набор интерфейсов, включая: vedis_kv_store (), vedis_kv_append (), vedis_kv_fetch_callback (), vedis_kv_append_fmt () и т. Д.
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);Посетите http://vedis.symisc.net