Lua开发技巧-小表预填充 1、未使用预填充技术的代码start = os.clock()for i = 1, 1000000 do local t = {} t[1] = 1; t[2] = 2; t[3] = 3;endfinish = os.clock()print(finish - start)运行时间:0.522、使用预填充技术的代码start = os.clock()for i = 1, 1000000 do local t = {1, 2, 3} t[1] =
Lua源码-C语言技巧-字节对齐 一、目标字节对齐长度和系统中数据类型的最大字节长度相等。二、Lua源码实现方式定义联合体,LUAI_USER_ALIGNMENT_T 的字节长度为联合体中字段字节长度最大的。即double、void *、long中最大的字节长度。typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;#define LUAI_USER_ALIGNMENT_T union{ double u; void *s; long l; }定义其他结构体类型时,使用联合体的方式定义,其中包含字
Test::Nginx 安装 一、安装环境CentOS 7.5[root@VM-0-7-centos ~]# uname -aLinux VM-0-7-centos 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux[root@VM-0-7-centos ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二、
CORS 跨域请求 CORS 跨域资源共享 (Cross-Origin Resource Sharing)这里跨域请求服务器以 nginx 服务器为例说明1、跨域请求特征请求中包含 Origin 头域,表明从哪个域名中跳到当前域名,如下请求:GET /test HTTP/1.1Host: xxxxConnection: keep-aliveUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Ge
HTTP 范围请求 1、如何查看服务器是否支持范围请求请求[root@VM-0-7-centos nginx]# curl localhost:80/site1-400.jpg -IHTTP/1.1 200 OKServer: openresty/1.19.3.1Date: Sat, 03 Jul 2021 01:49:29 GMTContent-Type: image/jpegContent-Length: 2240070Last-Modified: Tue, 22 Jun 2021 11:36:30 GM
NGINX-proxy_set_header Host 使用curl localhost:……向nginx发送消息nginx中有如下配置:upstream backend_push {server 0.0.0.0;balancer_by_lua_file lua/upstream_push.lua;keepalive 100;}location中头域配置:...
Redis-压缩表-zipTryEncoding详解 /* 判断长度为entrylen的entry字符串能否转换为数值,转换结果保存在v中 编码方式保存在encoding中 */static int zipTryEncoding(unsigned char *entry, unsigned int entrylen, long long *v, unsigned char *encoding) { long long value; ...
Redis-压缩表-ziplistCompare详解 /* 将p指向的结点的值和长度为slen的sstr比较,相等:返回1,不等:返回0*/unsigned char ziplistCompare(unsigned char *p, unsigned char *sstr, unsigned int slen){ zlentry entry; unsigned char sencoding; long long z...
Redis-压缩表-ziplistDeleteRange详解 /* 从索引index开始,连续从压缩表zl中删除num个结点 */unsigned char *ziplistDeleteRange(unsigned char *zl, unsigned int index, unsigned int num) { /* 指针p保存压缩表中第index个结点的位置 */ unsigned char *p = ziplistIndex(zl,...
Redis-压缩表-__ziplistDelete详解 /* 从位置p开始,连续删除num个结点返回删除结点之后的压缩表 */static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsigned int num) { unsigned int i, totlen, deleted = 0; size_t offset; int...
Redis-压缩表-ziplistDelete详解 /* 删除压缩表zl中p指向的结点,返回删除结点之后的压缩表删除之后p指向p的下一个结点,这样方便对链表结点进行迭代删除 */unsigned char *ziplistDelete(unsigned char *zl, unsigned char **p) { size_t offset = *p - zl; /*函数__ziplistDelete功能:从压缩表zl中指针...
Redis-压缩表-ziplistGet详解 /* 取出p指向的结点的值如果结点保存的是字符串,sstr保存字符串指针,slen保存字符串长度;如果结点保存的是整数,*sval保存整数值结点的值获得成功返回1,获得失败返回0如果p为空,返回0如果p指向列表末端,返回,其他情况均为1 */unsigned char ziplistGet(unsigned char *p, unsigned char **sstr, unsign...
Redis-压缩表-ziplistPrev详解 /* 返回p指向的结点的前置结点如果p指向的压缩表是空表,返回NULL,如果p指向压缩表的表头结点,返回NULL */unsigned char *ziplistPrev(unsigned char *zl, unsigned char *p) { zlentry entry; /*p指向压缩表的表尾,则p的前置结点就是压缩表的最后一个结点 */ if (p[0]...
Redis-压缩表-ziplistNext详解 /* 返回p指向结点的后置结点如果p指向ZIP_END,返回NULL;如果p是表尾结点,返回NULLL */unsigned char *ziplistNext(unsigned char *zl, unsigned char *p) { if (p[0] == ZIP_END) { return NULL; } /* 函数zipRawEntryL...
Redis-压缩表-ziplistIndex详解 /* 返回压缩表zl的第index个结点,index为非负:从表头开始查找,0表示返回第一个结点index为负:从表尾开始查找,-1表示返回最后一个结点*/unsigned char *ziplistIndex(unsigned char *zl, int index) { unsigned char *p; /* 保存目标结点地址 */ zlentry entry; /...
Redis-压缩表-ziplistPush详解 /* 将长度为slen的字符串s,头插或者尾插入压缩表zl中,where指示是头插还是尾插 */unsigned char *ziplistPush(unsigned char *zl, unsigned char *s, unsigned int slen, int where) { unsigned char *p; /* p保存插入位置 */ /* 如果是头插,即whe...
Redis-压缩表-__ziplistInsert详解 /* 将长度为slen的字符串s插入到压缩表zl的位置p处 */static unsigned char *__zipListInsert(unsigned char *zl, unsigned char *p, unsigned char *s, unsigned int slen){ size_t curlen = intrev32ifbe(ZIPLIST_BYTES(zl...
lua算术运算和关系运算metamethods --[[说明1.以下使用的metamethod都是lua核心metamethod,使用的时候可以采用相应的操作符,如:__add可以解释成+。2.metamethod需要放在metatable中使用算术运算符对应的域:__add(+), __sub(-), __mul(*), __div(/), __unm(-负), __pow(^幂)关系运算符对应的域:__eq(==), _...
C 预编译、编译、汇编、链接简单实例 目录1.创建test.c文件2.预编译3.编译4.汇编5.链接6.错误运行7.错误解决8.正常运行1.创建源文件test.c#include <stdio.h>#define NUM 100int main() { // test this file printf("%s", "hello, world")...