Windows/Linux(Ubuntu)安装Redis服务和后续配置,以及QT程序支持

1 篇文章 0 订阅

前言

本教程主要总结网络各教程综合而成,相关参考链接见本文最后,本教程主要用于Windows、Linux(Ubuntu)安装Redis服务、后续参数配置、Redis自启动设置、以及QT程序支持。通过本教程可以方便的实现在Windows、Linux Ubuntu环境下配置Redis环境以及QT程序支持。

软件版本说明:
Windows系统:Windows10,QT 5.9.9 ,VS2015,cmake(3.29.0-rc4)
Linux系统:Ubuntu 16.04.7 LTS ,QT 5.9.9,cmake(3.5.1)

请添加图片描述

一、Linux下Redis安装于QT支持

1.1 Redis源码下载及安装

1.1.1 Redis最新版本源码下载

Redis下载网站https://redis.io/download/
在这里插入图片描述

1.1.2 解压缩及编译安装

将上述下载好的Redis压缩包拷贝到/usr/local下,然后解压

cd /usr/local
tar -zxvf redis-7.2.4.tar.gz
mv redis-7.2.4 redis/

执行编译和安装命令

#切换到 redis目录
cd redis/
# 编译
make
# 安装
make install PREFIX=/usr/local/redis

此过程耗时较长,请耐心等待。

编译过程中可能会初选 error: jemalloc/jemalloc.h: No such file or directory异常
解决办法:依次执行如下命令
make MALLOC=libc
cd src && make install

安装完毕后,可以查看安装目录/usr/local/redis/bin
在这里插入图片描述各个功能模块介绍

模块名称模块功能介绍
redis-serverRedis服务器
redis-cliRedis命令行客户端
redis-benchmarkRedis性能测试
redis-check-aofAOF文件修复工具
redis-check-rdbRDB文件修复工具
redis-sentinelSentinel服务器(2.8以后),Redis集群使用

1.1.3 Redis开机自启动

redis的启动分为两种方式:前台启动和后台启动。
由于前台启动后,命令行界面不能再执行其他操作,且命令行界面关闭后,redis也会随即关闭,所以不推荐使用。
本教程以下内容均为后台启动的步骤:

1.1.3.1 配置文件修改

(1)修改配置文件

cd /usr/local/redis
cp redis.conf redis.conf.bak
sudo gedit redis.conf

(2) 修改配置文件支持后台启动
打开redis.conf 将daemonize no改为daemonize yes即可
在这里插入图片描述
(3)支持远程连接
bind 127.0.0.1 -::1注释掉
在这里插入图片描述
把protected-mode yes改为protected-mode no即可
在这里插入图片描述
(4)设置Redis连接密码
注释:# requirepass foobared
新增requirepass 123456
在这里插入图片描述

1.1.3.2 配置开机启动

(1)在/etc目录下新建redis目录

cd /etc/
mkdir redis

(2)复制配置文件

cp /usr/local/redis/redis.conf /etc/redis/6379.conf

(3)复制\修改启动脚本

cp /usr/local/redis/utils/redis_init_script /etc/init.d/redis
sudo gedit /etc/init.d/redis

按照如下示意修改
在这里插入图片描述
(4)执行自启命令

cd /etc/init.d/
chkconfig redis on

chkconfig命令若没有安装,则参考如下教程: https://blog.csdn.net/wildwolf_001/article/details/115250102

如果运行结果提示: service redisd does not support chkconfig, 解决方法:
使用vim编辑redisd文件,在第一行加入如下两行注释,保存退出,再次执行自启命令即可
注释 # chkconfig: 2345 90 10
注释# description: Redis is a persistent key-value database 注释的意思是,redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。

(5)检查或启动Redis

# 打开redis命令:
service redis start
# 关闭redis命令:
service redis stop

若手动启动时,出现The TCP backlog setting of 511 cannot be enforced 告警问题,则需要按照如下方案解决
编辑/etc/sysctl.conf文件,添加net.core.somaxconn = 1024
然后执行sysctl -p命令查看是否添加成功,之后重启Redis服务即可
在这里插入图片描述

(6) 测试连接
在这里插入图片描述

1.1.3.3 手动配置Redis启动或自动关闭

参考如上教程时,容易存在关机时redis进程杀不死,然后关机卡柱的问题,可使用如下解决方案
(1)Redis启动脚本编制
参考如下redis.sh脚本:

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

ProgName="redis-server"
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        pro=$(ps -ef | grep ${ProgName}| grep -v grep | grep -v "$0")
	if [ -z "$pro" ]
        then
                echo "Starting Redis server..."
                $EXEC $CONF
        else
                echo "Redis PID:$pro"
                echo "process is already running"
        fi
        ;;
    stop)
        pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
        echo "Redis PID:$pro"
	if [ -z "$pro" ]
        then
                echo "Redis process does not exist, process is not running"
        else
                echo "Stopping ..."
                #$CLIEXEC -p $REDISPORT -a 123456 shutdown
                echo "Waiting for Redis to shutdown ..."
                sleep 1

                pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
	        if [ -z "$pro" ]
                then
                    echo "Redis Server stopped"
                else
                    ps -ef | grep ${ProgName} | grep -v grep | awk '{print $2}' | xargs kill -9
                    echo "Redis Server stopped"
                fi
        fi
        ;;
    *)
        echo "Please use 'start' or 'stop' key words as first argument"
        ;;
esac

(2)全局启动配置
将上述脚本复制到/usr/local/bin后即可全局实现脚本调用

cp redis.sh /usr/local/bin
  • 手动启动Redis:
redis.sh start
  • 手动关闭Redis:
redis.sh stop

(3)设置关机时自动关闭Redis
此步骤可以防止Redis不关闭的话,导致的关机关不上的问题
编写Redis关闭脚本stopredis.sh

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

ProgName="redis-server"
pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
        echo "Redis PID:$pro"
	if [ -z "$pro" ]
        then
                echo "Redis process does not exist, process is not running"
        else
                echo "Stopping ..."
                #$CLIEXEC -p $REDISPORT -a 123456 shutdown
                echo "Waiting for Redis to shutdown ..."
                sleep 1

                pro=$(ps -ef | grep ${ProgName} | grep -v grep | grep -v "$0")
	        if [ -z "$pro" ]
                then
                    echo "Redis Server stopped"
                else
                    ps -ef | grep ${ProgName} | grep -v grep | awk '{print $2}' | xargs kill -9
                    echo "Redis Server stopped"
                fi
        fi

将stopredis.sh脚本同样拷贝至/usr/local/bin目录下,然后创建systemd 服务

vi /usr/lib/systemd/system/shutdown-redis.service

插入内容如下:

[Unit]
Description=close services before reboot and shutdown
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
#Before=network.target iscsi.service iscsid.service shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be executed before the 
# target state is entered
# Also consider kexec.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/stopredis.sh

[Install]
WantedBy=halt.target reboot.target shutdown.target

启动服务:

cd /usr/lib/systemd/system/
chmod 777 shutdown-redis.service
systemctl enable shutdown-redis.service

这样设置后,系统在关机或者重启时会自动关闭Redis服务。

1.2.安装hiredis以及QT程序支持

C++调用redis需要配合hiredis一起使用,因此需要事先安装hiredis。

1.2.1 hiredis下载安装

git clone https://github.com/redis/hiredis
make
sudo make install

1.2.2 QT程序支持

(1)新建项目,并在pro文件中添加:

INCLUDEPATH += /home/安装路径/Redis/hiredis
LIBS += -L /usr/local/lib -lhiredis
HEADERS += /home/安装路径/Redis/hiredis/adapters/qt.h

INCLUDEPATH += 中这个地址写入你前面下载hiredis的安装包位置
LIBS +=这个地方写入hiredis安装位置
HEADERS += 这个将qt.h加入
(2)测试代码

#include <QCoreApplication>
#include <adapters/qt.h>
#include <QDebug>

void getCallback(redisAsyncContext *ctx, void *r, void *privdata){

    qDebug() << "getCallback called";

    redisReply *reply = static_cast<redisReply*>(r);
    if(reply == nullptr){

        qDebug() << "The reply is nullptr";
        return;
    }

    qDebug() << "result: ";

    for(int i = 0; i < reply->elements; i++){

        qDebug() << "key: " << reply->element[i]->str;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

        redisAsyncContext *ctx = redisAsyncConnect("127.0.0.1", 6379);

        RedisQtAdapter adapter;

        if(ctx->err){

            qDebug()<< "error: " << ctx->errstr;
            redisAsyncFree(ctx);
            return 0;
        }
        adapter.setContext(ctx);

        redisAsyncCommand(ctx, nullptr, nullptr, "auth 123456");
        redisAsyncCommand(ctx, getCallback, nullptr, "keys test");
        qDebug() << "over";

        return a.exec();
}

程序运行后,代表运行成功
在这里插入图片描述
(3)常见错误解决
若出现:error while loading shared libraries libhiredis.so等错误
则需要如下解决方案: 确保你的/etc/ld.so.conf里面有 /usr/local/lib 这一行,没有的话vi编辑在尾行加上
在这里插入图片描述
然后执行:

sudo ldconfig

二、Windows下Redis安装及QT支持

2.1 Redis安装与编译

下载地址:https://github.com/microsoftarchive/redis
得到redis-3.0.zip。解压后,进入./redis-3.0/msvs,然后用vs打开RedisServer.sln项目,编译全部程序。
在这里插入图片描述
在这里插入图片描述
Release版本生成如下文件,见下图所示:

模块名称用途
redis-serverRedis服务器的daemon启动程序
redis-cliRedis命令行操作工具。也可以用telnet根据其纯文本协议来操作
redis-benchmarkRedis性能测试工具,测试Redis在当前系统下的读写性能
redis-check-aof数据修复
redis-check-dump检查导出工具

在这里插入图片描述
可以测试启动Server及Client端。
在这里插入图片描述

2.2 hiredis安装与编译

下载地址:https://github.com/redis/hiredis
得到hiredis-master.zip,解压后,得到hiredis-master目录,可以看到CMakeLists.txt。
在这里插入图片描述
执行cmake编译命令

若Windows上没有cmake,则需要下载安装https://cmake.org/download/
选择 cmake-3.29.0-windows-x86_64.msi
注意:安装过程中记得在安装选项中为所有用户添加路径到环境变量

#查看CMake版本号
cmake --version
#进入hiredis-master目录
cd D:\MyCode\OwnCode\redis\test\tools\redis\hiredis-master
#创建build目录
mkdir build
#进入build目录
cd build
#运行cmake命令进行解析,检查依赖项(需要安装VS Build Tools),我本机安装了VS 2015
cmake ..
#运行编译命令即可自动开始编译,这里的Target与vcxproj后缀的文件保持同名
cmake --build . --target hiredis --config Release

最后会在./hiredis-master/build/Release目录下,生成hiredis.dll。
在这里插入图片描述

2.3 QT程序支持

将上述步骤中hiredis-master文件夹放置在固定路径,或者复制到QT的pro工程目录下:
(1)对于hiredis-master固定路径,例如D:\hiredis-master,则配置如下

LIBS += -LD:\hiredis-master\build\Release -lhiredis
INCLUDEPATH += D:\hiredis-master
DEPENDPATH += D:\hiredis-master

(2)若复制在pro工程目录下,则在QT的pro工程文件中,添加如下内容

LIBS += -L$$PWD\hiredis-master\build\Release -lhiredis
INCLUDEPATH += $$PWD\hiredis-master
DEPENDPATH += $$PWD\hiredis-master

配置后即可使用Redis

三.参考文档

https://developer.aliyun.com/article/789869
https://www.cnblogs.com/darknebula/p/10523129.html
https://blog.csdn.net/weixin_41868104/article/details/125384809
https://blog.csdn.net/qq_45434780/article/details/115375309
https://blog.csdn.net/github_38647413/article/details/124106927
https://blog.csdn.net/qq_35699473/article/details/124891764

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驯龙高手_追风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值