#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. POJ.3648.Wedding(2-SAT)

    题目链接 题意看这吧..https://www.cnblogs.com/wenruo/p/5885948.html \(Solution\) 每对夫妇只能有一个坐在新娘这一边,这正符合2-SAT初始状 ...

  2. java参数转换为javaBean对象

    package com.tuxin.tool.json; import flexjson.JSONDeserializer;import flexjson.JSONSerializer;import ...

  3. Putty的用法

    大致内容罗列如下: ·        最简单的使用,登录 SSH主机 ·        中文乱码的处理 ·        PuTTY常用配置的说明 ·        复制.粘贴 ·        保存 ...

  4. 中文分词组件:thulac及jieba试用手记

    一.THULAC THULAC由<清华大学自然语言处理与社会人文计算实验室>研制推出的一套中文词法分析工具包.官网地址:http://thulac.thunlp.org,该项目提供了多种语 ...

  5. GitHub 的公开演讲文化

    2013年在某个地方为GitHub 240名员工中的三分之一或一半员工做演讲. 鼓励你的员工在大会上做演讲通常被认为是一件好事.另外对于GitHub,它还是一种好的广告:和我们花钱砸在banner广告 ...

  6. 细说ASP.NET Windows身份认证

    上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使用广泛,不过,如果是在 Windows Ac ...

  7. 从入门到精通Puppet的实践之路

    本文有感于<精通Puppet配置管理工具>在豆瓣上的某些差评而顺手写的书评. 半路出家   故事要从12年初说起.  某天,部门老大让我所在team的老大调研一下当下业界的配置管理工具.于 ...

  8. MDX Cookbook 07 - 在不同层次结构的成员中实现 逻辑 OR 的效果

    第一个示例:查看所有包括黑色产品的子目录产品中的 Reseller Order Quantity 和 Reseller Order Count. 第二个示例:和第一个示例查询结构一样,只是筛选的是大小 ...

  9. angularjs drag and drop

    angular-dragula Drag and drop so simple it hurts 480 live demo angular-drag-and-drop-lists Angular d ...

  10. WWDC 2018:Swift 更新了什么?

    本文转载自:https://juejin.im/post/5b1cb5805188257d507be5d4所有权归原文所有 WWDC 2018 Session 401 What's New in Sw ...