陈奇网络工作室

SylixOS移植Redis库总结

建设工作站服务器

1. Redis介绍

Redis是一个用ANSI C编写的开放源代码软件项目( BSD许可证),适用于大多数POSIX系统,是一个可用作数据库、缓存和消息代理的内存数据库。 Redis是非关系数据库,可以包含键和五种不同的数据结构类型:字符串、列表、集合、有序集合和散列之间的映射。 Redis通常将整个数据集存储在内存中。 Redis通过两种不同的方式实现持久性:快照和仅应用文件( aof )。 Redis支持主从复制,可以将数据从任何Redis服务器复制到任何数量的从服务器。 Redis还包括发布/订阅、Lua脚本等其他功能。

2 .获取资源

在官方网站上下载第三方中间件资源。 Redis的官方下载网站是https://redis.io/download。 本文使用的版本为redis-3.2.8,下载后解压文件,文件目录如图2-1所示。

图2-1 Redis解压缩文件

src目录包括Redis的实现,tests目录包括用tcl语言实现的单元测试,deps目录包括Redis所需的库,SylixOS是libc的POSIX兼容接口和c编译器

3 .编译3. Linux平台

将文件夹复制到Linux平台后,文件夹中已经包含Makefile文件,可以直接编译。 Makefile文件如图3-1所示。

图3-1链接文件

Redis可以手动选择和编译内存定位器,Redis支持libc malloc和jemalloc,在Linux系统上,jemalloc是默认值,因此强制使用libc malloc进行编译编译命令如图3-2所示。

图3-2编译命令

4 .移植工作

Redis采用服务器客户端模型,支持命令行模式和hiredis API接口,因此必须编译服务器可执行文件和客户端可执行文件(如果需要)。

4.1创建服务器工程

在Real-Evo IDE中创建redis-server应用项目,删除项目src目录中的redis-server.c文件,并将其导入到源包中的src和deps两个文件夹中导入完成后的项目文件如图4-1所示。

图4-1工程文件

更改为专家模式,然后更改源文件和头文件的路径。 头文件的路径如图4-2所示。

图4-2头文件路径

源文件的一部分如图4-3所示。

图4-3源文件名称

链接base项目中的cextern动态库,如图4-4所示。

图4-4c扩展动态库链接

因为SylixOS支持endian.h头文件,所以请注释config.h中的某些代码并直接包含头文件,如程序列表4-1所示。

程序列表4-1更改config.h代码

#if0

#ifndefBYTE_ORDER

#if(BSD=199103 ) )

# includemachine/endian.h

#else

#ifdefined(Linux )|defined ( _ _ Linux _ ) ) ) ) ) ) )。

# includeendian.h

#else

# define little _ endian 1234/* least-significantbytefirst ( VAX,pc ) /

# define big _ endian 4321/* most-significantbytefirst ( IBM,net ) /

# define PDP _ endian 3412/* lsbfirstinword,MSWfirstinlong(PDP ) /

#ifdefined(_I386__(|defined ) _ x86 _ 64 _ _ (|| defined ) __amd64__ ( ) ) )。

已定义| VAX|\ ns 32000|\

defined(mipsel(|defined ) _mipsel ( )|( )\)。

e fined ( _ alpha _ ( defined ) _ ( alpha ) ) ) ) ) ) ) ) e fined ( _ alpha _ ( alpha ) ) ) ) ) ) ) e fined ) ) ) 652

#defineBYTE_ORDER LITTLE_ENDIAN

#endif

# if defined|sel|| defined|| MC 68000||\\ & amp; quot;

defined(is68k )|defined(Tahoe )IBM032 )|| \\\\& quot;

defined(mipsEB ) _mipsEB )|( defined ) _ibmr2)|(\\ )。

defined(apollo ) _convex__ )|\\& quot;

defined(_HPPA )|( ( )\) )

defined|_ HP 9000 s 300|| defined|_ HP 9000 s 700||\\ & amp; quot;

|defined(bit_zero_on_left ) ( defined ) m68k|| defined ( defined ) __SPARC ) ) ) ) ) ) )

#defineBYTE_ORDER BIG_ENDIAN

#endif

#endif/*linux*/

#endif/* BSD */

#endif/* BYTE_ORDER */

#endif

#includeendian.h

部分代码变量在使用时定义,错误如图4-5所示。

图4-5使用时定义的错误

更改编译器选项,具体结构如图4-6所示。

图4-6编译器配置

由于代码包含多个main入口,并且需要生成服务器可执行文件,因此只需注释掉多余的main入口,并保留server.c上的main入口。

某些代码中的函数名称匹配,会导致编译错误,因此必须对相应的函数进行静态限定。 错误发生如图4-7所示。

图4-7函数重定义错误

更改堆栈空间大小,如程序列表4-2所示,因为SylixOS的缺省堆栈空间大小无法满足服务器对堆栈空间的需要。

程序列表4-2设置堆栈区域大小

intmain(intargc,char**argv ) )

LW_CLASS_THREADATTRthreadAttr;

LW_HANDLEhThreadId;

__GiArgc=argc;

__GppcArgv=argv;

lw_Threadattr_build(Threadattr,

350 *LW_CFG_KB_SIZE,

LW_PRIO_NORMAL,

LW_OPTION_THREAD_STK_CHK,

LW_NULL;

h threadid=lw _ thread _ create ( t _ server,redisServer,threadAttr,LW_NULL );

if ( h threadid==lw _ object _ handle _ invalid ) {

return(px_error;

}

lw_thread_join(hthreadid,NULL );

returnERROR_NONE;

}

SylixOS中rename的安装是将原来的文件直接置换为新的文件。 如果原始文件已经存在,则替换可能会失败,因此必须在重命名之前删除原始文件,如程序列表4-3所示。

程序列表4 3使用重命名

unlink (文件名称;

rename ( tmpfile,filename )==-1

serverlog(ll_warning,errormovingtempappendonlyfileonthefinaldestination:% s,strerror ) errno );

unlink(tmpfile;

returnC_ERR;

}

用posix_spawn函数对项目文件中的fork进行功能置换,置换完成后编译项目,生成服务器的可执行程序即可。

4.2创建动态库项目

创建libredis动态库项目,删除libredis.c文件,然后将其导入hiredis文件夹中,如图4-8所示。

图4-8动态库工程

链接cextern动态库,在专家模式下修改源文件和头文件的目录,如图4-9所示。

图4-9源文件和头文件的路径

编译已完成。

5. Redis的使用

执行服务器,redis.conf是服务器配置文件,可以在其中配置服务器功能。 执行服务器如图5-1所示。

图5-1运行redis服务器

运行测试程序,测试Redis的API功能是否正常,执行结果显示正常,具体现象如图5-2所示。

图5-2测试用例的运行结果

6 .参考资料

官方网站:

https://redis.io/

博客:

33558 blog.csdn.net/kingqizhou/article/details/8104693

文档:

《Redis命令参考手册》

《Redis实战》

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3