memcached-数据结构
来源:互联网 发布:大数据分析系统翻译 编辑:程序博客网 时间:2024/04/30 15:43
分类: C/C++
typedef struct _stritem {
struct _stritem *next; //下一个item
struct _stritem *prev; //上一个item
struct _stritem *h_next; //hash表的下一项
rel_time_t time; //最近访问时间
rel_time_t exptime; //消亡时间
int nbytes; //数据大小
unsigned short refcount; //引用计数
uint8_t nsuffix; // **的长度
uint8_t it_flags; /* ITEM_* above */
uint8_t slabs_clsid;// item所存入的slab
uint8_t nkey; //key长度
void * end[];
/* if it_flags & ITEM_CAS we have 8 bytes CAS */
/* then null-terminated key */
/* then " flags length\r\n" (no terminating null) */
/* then data with terminating \r\n (no terminating null; it's binary!) */
} item;
typedef struct {
unsigned int size; //items大小
unsigned int perslab; //每个slab有多少个item
void **slots; //item链表
unsigned int sl_total; //已有item的数量
unsigned int sl_curr; //第一个空闲链表位置
void *end_page_ptr; //指向下一个空闲item槽的页面结尾地址的指针或者是0
unsigned int end_page_free; //在最后分配页面中,存在的items的数量。
unsigned int slabs; //在这个级别中分配了多少个slab
void **slab_list; //slab数组的指针
unsigned int list_size; //slab数组大小
unsigned int killing; /* index+1 of dying slab, or zero if none */
size_t requested; //需要的字节数
} slabclass_t;
static slabclass_t slabclass[MAX_NUMBER_OF_SLAB_CLASSES];
conn在程序开始也进行了一次预分配,分配200个连接空间。当200个使用完之后便是按需分配,到达一个分配一个。
conn和item、iovec(内核级别缓冲结构)关联
typedef struct conn conn;
struct conn {
int sfd;
sasl_conn_t *sasl_conn;
enum conn_states state;
enum bin_substates substate;
struct event event;
short ev_flags;
short which; //刚刚被触发的事件
char *rbuf; //缓存读入的命令
char *rcurr; //语法分析的位置
int rsize; //缓存读入命令的大小
int rbytes; //从rcur开始还有多少信息没有进行语法分析
char *wbuf;
char *wcurr;
int wsize;
int wbytes;
enum conn_states write_and_go;//在写操作完成后加入什么状态
void *write_and_free; //在写操作完成后释放该内存
char *ritem; //指向读入item的value
int rlbytes;
//nread信息数据
/**
* 在读取数据之前,item被用来保存一个item结构体,
*这个结构体在读入命令行(set/add/replace)后被创建,
*数据被读入ITEM_data(item)防止多余拷贝
*/
void *item; //保存set/add/replace命令
//总体情况
int sbytes; //总字节数
//nwrite信息数据
struct iovec *iov;
int iovsize; //在iov[]数组中分配的元素个数
int iovused; /* number of elements used in iov[] */在iov[]数组中被使用元素的个数
struct msghdr *msglist;
int msgsize; //在msglist[]数组中分配的元素个数
int msgused; //在msglist[]数组中被用的元素个数
int msgcurr; //正在传送的元素个数
int msgbytes; //当前msg中的字节数
item **ilist; //需要输出的item链表
int isize;
item **icurr;
int ileft;
char **suffixlist;
int suffixsize;
char **suffixcurr;
int suffixleft;
enum protocol protocol; //此次连接的端口
enum network_transport transport; //此次连接的传输工具
//UDP客户端的数据
int request_id; //UDP连接需要一个ID
struct sockaddr request_addr; //最近发出请求的地址
socklen_t request_addr_size;
unsigned char *hdrbuf; //udp包的头
int hdrsize; //头部空间
bool noreply; //如果没发送应答,将被置为true
//当前环境的命令
struct {
char *buffer;
size_t size;
size_t offset;
} stats;
//二进制协议
//二进制协议的头
protocol_binary_request_header binary_header;
uint64_t cas; //所要返回的cas
short cmd; //当前所处理的命令
int opaque;
int keylen;
conn *next; /*/用来创建一个conn结构体链表
LIBEVENT_THREAD *thread; //指向服务的线程
};
- memcached-数据结构
- memcached-数据结构
- memcached-数据结构
- Memcached
- memcached
- Memcached
- memcached
- Memcached
- memcached
- memcached
- memcached
- memcached
- memcached
- Memcached
- memcached
- memcached
- memcached
- Memcached
- Java基础的IO和线程知识
- 结构体例题汇总
- 2009年系统分析师上午试题1-2
- 微软亚洲研究院开源图数据库GraphView
- 回调
- memcached-数据结构
- hdoj1004(let the ballooon rsie
- eclipse出现 Some characters cannot be mapped using "GBK" character encoding 错误代码的解决办法
- [Servlet&JSP] 标准标签
- initWithFrame和 initWithCoder
- 十进制转换二进制
- matlab 2015a找不到编译器
- 计算Fisher vector和VLAD
- ubuntu 14.04 下通过apt-get 安装jdk