一、安裝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;
}