#include "hiredis/hiredis.h" /* redis頭文件 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <string> //初始化 int init(const char *ip,uint16_t port) { redisContext *_context; //創建redis鏈接 _context = redisConnect(ip, port); if (NULL == _context) { return -1; } return 0; } //二進制數據set操作 /******************************************************** Func Name: getInstance Date Created: 2018-10-12 Description: 創建實例對象 Input:@key: key值 @value: value值 @vlen: value數據長度 Output: Return: error code Caution: *********************************************************/ int set(redisContext *_context, const char *key, uint8_t *value, uint32_t vlen) { /* 為什么argv數組長度是5 set key value ex time 元素1 元素2 元素3 元素4 元素5 */ const char * argv[5] = { 0 }; //用來存儲所有的數據 size_t argvlen[5] = { 0 }; //用來存儲數據的長度 redisReply *rep = NULL; std::string strRes; if (NULL == key || NULL == value || 0 == vlen) { return -1; } argv[0] = "set"; argvlen[0] = strlen("set"); argv[1] = key; argvlen[1] = strlen(key); argv[2] = (char *)value; argvlen[2] = vlen; //設置超時時間 argv[3] = "ex"; argvlen[3] = strlen("ex"); argv[4] = "3600"; argvlen[4] = strlen("3600"); rep = (redisReply *)redisCommandArgv(_context, 5, argv, argvlen); if (NULL == rep) { return -1; } if (REDIS_REPLY_STATUS == rep->type) { strRes = rep->str; } freeReplyObject(rep); rep = NULL; return ("OK" == strRes ? 0 : -1); } /******************************************************** Func Name: get Date Created: 2018-12-11 Description: get Input: Output: Return: error code Caution: *********************************************************/ int get(redisContext *_context, const char *key, uint8_t *&value, uint32_t &vlen) { redisReply *rep = NULL; char *cmd = NULL; if (NULL == key) { return -1; } cmd = (char *)malloc(strlen(key) + strlen("get") + 10); if (NULL == cmd) { return -1; } memset(cmd, 0, strlen(key) + strlen("get") + 10); sprintf(cmd, "get %s", key); rep = (redisReply *)redisCommand(_context, cmd); if (NULL == rep) { return -1; } vlen = rep->len; if (rep->len <= 0) { return -1; } value = (uint8_t *)malloc(vlen); if (NULL == value) { return -1; } memset(value, 0, vlen); memcpy(value, rep->str, rep->len); freeReplyObject(rep); rep = NULL; return 0; }
問題:客戶端無法登錄Redis服務器報錯,解除保護模式 解決方案 1、修改redis服務器的配置文件 vi redis.conf 注釋以下綁定的主機地址 # bind 127.0.0.1 2、修改redis服務器的參數配置 修改redis的守護進程為no ,不啟用 127.0.0.1:6379> config set daemonize "no" OK 修改redis的保護模式為no,不啟用 127.0.0.1:6379> config set protected-mode "no" 注意:修改redis服務器的參數配置,只能通過redis-cli客戶端修改(直接修改redis.conf沒有效果), 如果redis服務器重啟了,那么修改將會失效