建设工作站服务器
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