Redis rio的代碼很少,基本上包了一個虛基類:
struct _rio {
? ? void (*update_cksum)(struct _rio *, const void *buf, size_t len);
? ? /* The current checksum */
? ? uint64_t cksum;
? ? /* Backend-specific vars. */
? ? union {
? ? ? ? struct {
? ? ? ? ? ? sds ptr;
? ? ? ? ? ? off_t pos;
? ? ? ? } buffer;
? ? ? ? struct {
? ? ? ? ? ? FILE *fp;
? ? ? ? ? ? off_t buffered; /* Bytes written since last fsync. */
? ? ? ? ? ? off_t autosync; ? // buffered超過這個值自動更新,默認為0
? ? ? ? } file;
? ? } io;
};
API如下:
static inline size_t rioWrite(rio *r, const void *buf, size_t len) ; ?// 調用 rio->write,同時更新checksum
static inline size_t rioRead(rio *r, void *buf, size_t len) // 調用 rio->read,同時更新checksum
static inline off_t rioTell(rio *r); ?//直接調用rio->tell
void rioInitWithFile(rio *r, FILE *fp); ?// 初始化rio->io->file
void rioInitWithBuffer(rio *r, sds s); ?// 初始化rio->io->buffer
// ?以下幾個是High Level Interface,用于寫AOF文件
size_t rioWriteBulkCount(rio *r, char prefix, int count);
size_t rioWriteBulkString(rio *r, const char *buf, size_t len);
size_t rioWriteBulkLongLong(rio *r, long long l);
size_t rioWriteBulkDouble(rio *r, double d);
// 更新crc64 checksum
void rioGenericUpdateChecksum(rio *r, const void *buf, size_t len);
// 設置自動sync的字節數
void rioSetAutoSync(rio *r, off_t bytes);
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
