#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 -;
} return ;
} //二进制数据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[] = { }; //用来存储所有的数据
size_t argvlen[] = { }; //用来存储数据的长度
redisReply *rep = NULL;
std::string strRes; if (NULL == key || NULL == value || == vlen)
{
return -;
} argv[] = "set";
argvlen[] = strlen("set"); argv[] = key;
argvlen[] = strlen(key); argv[] = (char *)value;
argvlen[] = vlen; //设置超时时间 argv[] = "ex";
argvlen[] = strlen("ex"); argv[] = "";
argvlen[] = strlen(""); rep = (redisReply *)redisCommandArgv(_context, , argv, argvlen);
if (NULL == rep)
{
return -;
} if (REDIS_REPLY_STATUS == rep->type)
{
strRes = rep->str;
} freeReplyObject(rep);
rep = NULL; return ("OK" == strRes ? : -); } /********************************************************
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 -;
} cmd = (char *)malloc(strlen(key) + strlen("get") + );
if (NULL == cmd)
{
return -;
}
memset(cmd, , strlen(key) + strlen("get") + );
sprintf(cmd, "get %s", key); rep = (redisReply *)redisCommand(_context, cmd);
if (NULL == rep)
{
return -;
} vlen = rep->len;
if (rep->len <= )
{
return -;
}
value = (uint8_t *)malloc(vlen);
if (NULL == value)
{
return -;
}
memset(value, , vlen);
memcpy(value, rep->str, rep->len); freeReplyObject(rep);
rep = NULL; return ;
}
问题:客户端无法登录Redis服务器报错,解除保护模式

解决方案
、修改redis服务器的配置文件
vi redis.conf 注释以下绑定的主机地址
# bind 127.0.0.1 、修改redis服务器的参数配置 修改redis的守护进程为no ,不启用
127.0.0.1:> config set daemonize "no"
OK 修改redis的保护模式为no,不启用
127.0.0.1:> config set protected-mode "no" 注意:修改redis服务器的参数配置,只能通过redis-cli客户端修改(直接修改redis.conf没有效果),
如果redis服务器重启了,那么修改将会失效

Sword redis存取二进制数据的更多相关文章

  1. C++ Redis mset 二进制数据接口封装方案

    C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...

  2. 用string存取二进制数据

    STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www ...

  3. sqlite3的图片的(二进制数据)存取操作

    sqlite3的图片的(二进制数据)存取操作   前言 上篇介绍了sqlite3的一些常用插入操作方法和注意事项,在实际项目中遇到了图片缓存的问题,由于服务器不是很稳定,且受到外界环境的干扰(例如断电 ...

  4. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  5. BLOB存储图片文件二进制数据是非对错

    子在一天一天虚度,生活也在一天一天中茫然 做人做事哪能尽如人意,付出多少收获多少虽然存在偏颇,但是不劳而获的心态是万万不对的,更不能去怨天尤人,低调为人.做好自己就可以了 改进你的系统的最好的方法是先 ...

  6. mssql sqlserver 可以存储二进制数据的字段类型详解

    转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ...

  7. swoole+Redis实现实时数据推送

    <?php /** * *************************************** * 单进程保护 * * ********************************* ...

  8. [置顶] Redis String类型数据常用的16条命令总结

    Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...

  9. 使用Spring操作Redis的key-value数据

    前言 最近工作一直忙的不可开交,小Alan已经很久没有和大家分享知识了,在深圳待了两年多,依然感觉自己还是个小菜鸟,工作中还是会遇到很多自己在短期内无法搞定的事情,每当这个时候总是会感觉到很沮丧,就会 ...

随机推荐

  1. supervisor 管理 celery

    安装supervisor [root@ipv6-api ~]# pip3 install  supervisor 生成配置文件 [root@ipv6-api ~]#echo_supervisord_c ...

  2. prufer序列计数的一些结论

    \(prufer\)序列和完全图的生成树一一对应(考虑构造) 完全图的生成树个数为\(n^{n - 2}\) 满足第\(i\)个点的度数为\(d_i\)的生成树为\(\frac{n!}{\prod ( ...

  3. BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)

    题目链接 \(Description\) 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大 \(Solution\) 01分数规划,然 ...

  4. 导出putty配置

    原文链接:http://downloadsquad.switched.com/2007/02/01/howto-transfer-your-putty-settings-between-compute ...

  5. 八幅漫画理解使用 JSON Web Token 设计单点登录系统

    原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家 ...

  6. GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!【转】

    作者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 近日,一个在 GitHub 上开源即收获了 3700+ Star 的项目,引起了营长的注意.据介绍,该项目以 TensorFlow ...

  7. asp.net mvc Session RedisSessionStateProvider锁的实现

    最近项目用到了RedisSessionStateProvider来保存session,发现比内存session慢,后来慢慢了解,发现asp.net session是有锁的.我在文章 你的项目真的需要S ...

  8. TensorFlow进阶(二)---张量的操作

    张量操作 在tensorflow中,有很多操作张量的函数,有生成张量.创建随机张量.张量类型与形状变换和张量的切片与运算 生成张量 固定值张量 tf.zeros(shape, dtype=tf.flo ...

  9. python 获取前一天或前N天的日期

    简单实现 import datetime # 获取前1天或N天的日期,beforeOfDay=1:前1天:beforeOfDay=N:前N天 def getdate(self,beforeOfDay) ...

  10. crontab不能执行sudo:抱歉,您必须拥有一个终端来执行 sudo

    最近做一个可执行shell调度的需求,要求用户输入shell,然后后台定时调度运行.实现大致为:保存用户的输入,设定时间,crontab定时执行用户的输入.但这里涉及到一个安全问题,如何确定用户的输入 ...