Sword redis存取二进制数据

摘要:
}argv[0]=“设置”;argvlen[0]=字符串(“集合”);argv[1]=密钥;argvlen[1]=字符串(键);argv[2]=(char*)值;//设置超时argv[3]=“ex”;argvlen[3]=字符串(“ex”);argvlen[4]=字符串(“3600”);类型){strRes=rep->
#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服务器重启了,那么修改将会失效

免责声明:文章转载自《Sword redis存取二进制数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇json : json数据解析(一)import keras,tensorflow,出现kernel died restarting,解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android中getSystemService详解

http://blog.sina.com.cn/s/blog_71d1e4fc0100o8qr.html http://blog.csdn.net/bianhaohui/article/details/6220135       android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如Mount...

循序渐进学.Net Core Web Api开发系列【9】:常用的数据库操作

系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一、概述 本篇描述一些常用的数据库操作,包括:条件查询、排序、分页、事务等基本数据库操作。试验的数据库为MySQL。 二、条件查询1、查询所有记录 List<Article...

(转)iOS动画Core Animation

文章转载:http://blog.sina.com.cn/s/blog_7b9d64af0101b8nh.html 在iOS中动画实现技术主要是:Core Animation。  Core Animation负责所有的滚动、旋转、缩小和放大以及所有的iOS动画效果。其中UIKit类通常都有animated:参数部分,它可以允许是否使用动画。  Core A...

Nginx超时timeout配置总结

具体参数解释 Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 keepalive_timeout HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输...

ASP.NET Core系列:中间件

1. 概述 ASP.NET Core中的中间件是嵌入到应用管道中用于处理请求和响应的一段代码。 2.使用 IApplicationBuilder 创建中间件管道 2.1 匿名函数 使用Run, Map, Use ,MapWhen等扩展方法来实现。 usingMicrosoft.AspNetCore.Builder; usingMicrosoft.AspN...

Dubbo端口占用错误信息

SEVERE: Exception sending context initialized event to listener instance of class com.common.SysContextLoaderListener com.alibaba.dubbo.rpc.RpcException: Fail to start server(url...