การใช้งานที่ฝังตัวของ Redis http://vedis.symisc.net
Vedis เป็นไลบรารี Datastore C ที่ฝังได้ซึ่งสร้างขึ้นด้วยคำสั่งมากกว่า 70 คำสั่งที่คล้ายกันในแนวคิดกับ Redis แต่ไม่มีเลเยอร์เครือข่ายเนื่องจาก Vedis ทำงานในกระบวนการเดียวกันของแอปพลิเคชันโฮสต์
ซึ่งแตกต่างจากที่เก็บข้อมูลอื่น ๆ ส่วนใหญ่ (เช่น Memcache, Redis), Vedis ไม่มีกระบวนการเซิร์ฟเวอร์แยกต่างหาก Vedis อ่านและเขียนโดยตรงไปยังไฟล์ดิสก์ธรรมดา ฐานข้อมูลที่สมบูรณ์พร้อมคอลเลกชันหลายตัวมีอยู่ในไฟล์ดิสก์เดียว รูปแบบไฟล์ฐานข้อมูลเป็นแบบข้ามแพลตฟอร์มคุณสามารถคัดลอกฐานข้อมูลระหว่างระบบ 32 บิตและ 64 บิตได้อย่างอิสระหรือระหว่างสถาปัตยกรรมขนาดใหญ่และอินาวิน
Vedis เป็นห้องสมุด C ที่มีอยู่ในตัวเองโดยไม่ต้องพึ่งพา มันต้องการการสนับสนุนน้อยที่สุดจากไลบรารีภายนอกหรือจากระบบปฏิบัติการ สิ่งนี้ทำให้เหมาะสำหรับใช้ในอุปกรณ์ฝังตัวที่ขาดโครงสร้างพื้นฐานการสนับสนุนของคอมพิวเตอร์เดสก์ท็อป นอกจากนี้ยังทำให้ Vedis เหมาะสมสำหรับการใช้งานภายในแอปพลิเคชันที่จำเป็นต้องทำงานโดยไม่ต้องปรับเปลี่ยนคอมพิวเตอร์ที่หลากหลายของการกำหนดค่าที่แตกต่างกัน
งานหลักของเอ็นจิ้น DataTastore คือการจัดเก็บและดึงข้อมูลบันทึกให้เร็วที่สุด Vedis รองรับการจัดเก็บข้อมูลทั้งแบบโครงสร้างและดิบ
การจัดเก็บข้อมูลที่มีโครงสร้างจะถูกนำเสนอให้กับลูกค้าผ่านคำสั่ง Execution Interface (CEI) โดยพื้นฐานแล้วคุณเรียกใช้คำสั่งหนึ่งคำขึ้นหรือมากกว่า Ala Redis (เช่นชุดคีย์ที่ตั้งค่า; รับคีย์, hset ... ) ผ่าน vedis_exec () และคุณแยกผลการดำเนินการ (ค่าส่งคืนของคำสั่ง) ผ่าน vedis_exec_result () อ้างถึงหน้าต่อไปนี้สำหรับรายการคำสั่งในตัว
การจัดเก็บข้อมูลดิบจะถูกนำเสนอต่อลูกค้าผ่านอินเทอร์เฟซคีย์/ค่าที่เก็บ Vedis เป็นร้านค้าคีย์/ค่ามาตรฐานคล้ายกับ DB Berkeley, Tokyo Cabinet, LevelDB ฯลฯ แต่มีชุดคุณสมบัติที่หลากหลายรวมถึงการสนับสนุนสำหรับการทำธุรกรรม (กรด), เครื่องอ่านพร้อมกัน ฯลฯ
ภายใต้ร้านค้า KV ทั้งคีย์และค่าได้รับการปฏิบัติเหมือนเป็นอาร์เรย์ที่เรียบง่ายของไบต์ดังนั้นเนื้อหาสามารถเป็นอะไรก็ได้จากสตริง ASCII, binary blob และแม้แต่ไฟล์ดิสก์ เลเยอร์ KV Store จะถูกนำเสนอต่อลูกค้าผ่านชุดของอินเทอร์เฟซเหล่านี้รวมถึง: 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