一、安装redis数据库
1.下载redis的压缩包
wget https://download.redis.io/releases/redis-6.0.5.tar.g
2.解压缩redis压缩包,一般就在当前路径
tar -zvxf redis-6.0.5.tar.gz -C /usr/local/redis
方便找我把它解压缩在/usr/local/redis,如果没有redis文件夹先到cd /usr/local/下使用
mkdir redis创建一个
3.跳转到解压的redis-6.0.5目录下执行
cd /usr/local/redis/redis-6.0.5
make 指令进行编译
make PREFIX=/usr/local/redis install //进行安装
完成之后会生成一个bin目录下有redis服务端与客户端
4.运行redis服务器
./redis-server
CTL+C 关闭服务器
5.运行redis客户端
./redis-cli
CTL+C 退出
6.设为守护进程
我们更多希望它在后台自动运行因此会修改它的配置文件
vi /usr/local/redis/redis-6.0.5/redis.conf
将这个位置的no改为yes 保存退出即可
7.启动redis
cd /usr/local/redis/bin 回到bin目录下
./redis-server ../redis-6.0.5/redis.conf
ps aux | grep redis-server //查看它所在运行的进程
二、配置VS编译环境
#include <hiredis/hiredis.h> //redis的头文件
但是会爆红,原因是我们没有安装这个文件库
1.安装hiredis库
sudo apt install libhiredis-dev
2.查找到库的头文件与驱动文件的位置
dpkg -L libhiredis-dev | grep '\.h$' //头文件
dpkg -L libhiredis-dev | grep '\.so$' //驱动文件
3.VS配置项目的属性
常规处附加包含目录添加头文件所在的路径
/usr/include/hiredis/
/usr/include/hiredis/adapters/
输入块写入驱动文件
三、Redis数据库的封装
头文件:RedisConn.h
#pragma once
#include <hiredis/hiredis.h>
#include<iostream>
#include<string>using namespace std;
class RedisConn
{
public:static RedisConn* redisConn;//确保只有一个redis连接类static RedisConn* getInstance();//初始化单例bool RedisConnect();//连接数据库RedisConn* getRedisConn() const;//获取连接对象bool set_key(string key, string value);//写入键值对string get_key(string key) const;//拿取键对应的值
private:RedisConn();~RedisConn();redisContext* conn;//连接对象
};
cpp文件:RedisConn.cpp
#include "RedisConn.h"RedisConn* RedisConn::redisConn = nullptr;//设置为懒汉式单例模式:避免重复创建实例浪费资源
RedisConn* RedisConn::getInstance()
{if (redisConn == nullptr){redisConn = new RedisConn();}return redisConn;
}bool RedisConn::RedisConnect()
{conn = redisConnect("127.0.0.1", 6379);if (conn->err){cout << "连接失败" << conn->errstr << endl;return false;}return true;
}RedisConn::RedisConn()
{if (RedisConnect())//连接数据库{cout << "redis succeful" << endl;}
}RedisConn::~RedisConn()
{redisFree(conn);//关闭数据库//释放资源delete conn;delete redisConn;
}RedisConn* RedisConn::getRedisConn() const
{return redisConn;
}bool RedisConn::set_key(string key, string value)
{redisReply* reply = nullptr;// 使用 redisCommand 的参数化版本更安全reply = (redisReply*)redisCommand(conn, "SET %s %s EX 180", key.c_str(), value.c_str());//判断执行是否成功if (!reply||reply->type == REDIS_REPLY_ERROR) {cout<< "Redis error: " << reply->str << endl;freeReplyObject(reply);return false;}freeReplyObject(reply);//释放指针return true;
}string RedisConn::get_key(string key) const
{string value;redisReply* reply = nullptr;reply = (redisReply*)redisCommand(conn, "GET %s", key.c_str());value = reply->str;//拿取值freeReplyObject(reply);//释放指针return value;
}