栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

destor中部署redis(踩坑记录)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

destor中部署redis(踩坑记录)

安装redis
  1. 首先在服务器上安装redis,具体过程参照reids官网,最简单的方法就是
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

sudo apt-get update
sudo apt-get install redis
  1. 或者根据官网源码安装
启动redis-server
  1. 如果是默认config,直接在命令行中输入redis-server。
  2. 如果需要自己设定config,则在命令行中输入redis-server /path/to/redis.config (config文件在redis源文件中有)
  3. 启动以后就是这样
  4. 有时候可能端口6379被占用,可以通过命令lsof -i:6379查看端口占用情况,或者通过命令netstat -tunlp | grep 6379 ,并用sudo kill -9 进程PID 杀掉该进程。
使用redis-cli测试

可以用redis-cli中的命令行测试是否能正常于redis-server连接。我用了以下命令:

redis-cli
keys *
PING

结果如下

下载并编译hiredis
  1. 首先下载hiredis的github地址
git clone https://github.com/redis/hiredis.git
  1. 编译和安装
make
make install
  1. 安装完成后,在hiredis目录下得到libhiredis.so
在destor中使用hiredis连接redis
  1. 首先尝试连接redis,可以新建一个.c文件,里面写连接redis和向redis发送命令的函数,这里写出一个连接redis的示例。其中hostname是127.0.0.1,是因为我的客户端和服务器都在同一个服务器上,就是本机地址,端口是redis的默认端口6379。
int example3() {
     unsigned int j;
     redisContext *conn;
     redisReply *reply;
     redisReply *reply2;

     const char *hostname = "127.0.0.1";
     const int port = 6379;
     const char *password = "";
     struct timeval timeout = { 1, 500000 }; // 1.5 seconds
     conn = redisConnectWithTimeout(hostname, port, timeout);
     if (conn == NULL || conn->err) {
		if (conn) {
				printf("Connection error: %sn", conn->errstr);
				redisFree(conn);
		} 
		else {
				printf("Connection error: can't allocate redis contextn");
		}
        exit(1);
     }
     
    //  printf("connectedn");
     reply2 = (redisReply*) redisCommand(conn, "PING", "Hello");
    //  printf("%sn", reply2->str);
     printf("connectedn");
     //reply = redisCommand(conn, "AUTH %s", password);
     
     //printf("AUTH: %sn", reply->str);
    //  freeReplyObject(reply2);
 
     
     reply = redisCommand(conn,"SET %s %s", "welcome", "Hello, DCS for Redis!");
     printf("SET: %sn", reply->str);
     freeReplyObject(reply);
    
     
     reply = redisCommand(conn,"GET welcome");
     printf("GET welcome: %sn", reply->str);
     freeReplyObject(reply);
     
     
     redisFree(conn);
     return 0;
}
  1. 修改CMakeList.txt
...
include_directories(/home/xh21/hiredis)
...
target_link_libraries(destor hiredis glib-2.0 pthread ssl crypto isal_crypto  rocksdb)
  1. 然后就cmake .. 然后make ,都完全没问题
  2. 跑的时候就发现问题了,程序会卡在这里,并且任何的redisCommand都无法发出去,它会一直卡在等待server回复的函数里。
reply2 = (redisReply*) redisCommand(conn, "PING", "Hello");

经过各种测试,发现是hiredis中的sds.c和destor中的/utils/sds.c冲突了,并且destor中的sds.c和hiredis中的sds.c中函数名相同,但是定义不同,hiredis中使用sds中函数时,跑到destor里的函数里去了,就卡住了。
最终的解决方案就是统一两个项目sds.c和sds.h文件,把hiredis中的sds.c和sds.h拷贝到destor中去,就可以跑起来了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号