Sword redis存取二进制数据
#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存取二进制数据的更多相关文章
- C++ Redis mset 二进制数据接口封装方案
C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...
- 用string存取二进制数据
STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www ...
- sqlite3的图片的(二进制数据)存取操作
sqlite3的图片的(二进制数据)存取操作 前言 上篇介绍了sqlite3的一些常用插入操作方法和注意事项,在实际项目中遇到了图片缓存的问题,由于服务器不是很稳定,且受到外界环境的干扰(例如断电 ...
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- BLOB存储图片文件二进制数据是非对错
子在一天一天虚度,生活也在一天一天中茫然 做人做事哪能尽如人意,付出多少收获多少虽然存在偏颇,但是不劳而获的心态是万万不对的,更不能去怨天尤人,低调为人.做好自己就可以了 改进你的系统的最好的方法是先 ...
- mssql sqlserver 可以存储二进制数据的字段类型详解
转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ...
- swoole+Redis实现实时数据推送
<?php /** * *************************************** * 单进程保护 * * ********************************* ...
- [置顶] Redis String类型数据常用的16条命令总结
Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...
- 使用Spring操作Redis的key-value数据
前言 最近工作一直忙的不可开交,小Alan已经很久没有和大家分享知识了,在深圳待了两年多,依然感觉自己还是个小菜鸟,工作中还是会遇到很多自己在短期内无法搞定的事情,每当这个时候总是会感觉到很沮丧,就会 ...
随机推荐
- POJ.3537.Crosses and Crosses(博弈论 Multi-SG)
题目链接 \(Description\) 有一个一行n列的棋盘,每个人每次往上放一个棋子,将三个棋子连在一起的人赢.问是否有必胜策略. \(Solution\) 首先一个人若在\(i\)处放棋子,那么 ...
- HDU.5628.Clarke and math(狄利克雷卷积 快速幂)
\(Description\) \[g(i)=\sum_{i_1|i}\sum_{i_2|i_1}\sum_{i_3|i_2}\cdots\sum_{i_k|i_{k-1}}f(i_k)\ mod\ ...
- [POJ2420]A Star not a Tree?
来源: Waterloo Local 2002.01.26 题目大意: 找出$n$个点的费马点. 思路: 模拟退火. 首先任取其中一个点(或随机一个坐标)作为基准点,每次向四周找距离为$t$的点,如果 ...
- Android弹出Toast工具类总结
Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static T ...
- restful开发API
http://blog.csdn.net/kkkloveyou/article/details/21391033 小示例http://blog.csdn.net/u011645059/article/ ...
- unity 对象旋转,自转
1.对象具体的围绕哪个轴旋转,对应的设置值: transform.Rotate(new Vector3(1,0,0)); //绕x轴旋转 //默认是物体围绕世界坐标的XYZ轴旋转,即物体绕着世 ...
- Codeforces Round #519 by Botan Investments
Codeforces Round #519 by Botan Investments #include<bits/stdc++.h> #include<iostream> #i ...
- 响应式 Web 设计指南「实践篇」
无论你是奔赴战场.跑马拉松,还是构建一个响应式的站点,准备工作都是关键. 创建一个响应式的站点意味着要考虑多样化的设备生态系统. 如果没有适当的准备,你将发现自己会因为缺少必要的部分而忙里忙外,并且站 ...
- oracle 语句 笔记
1.查询某个表有多少列. select column_name from user_tab_columns where table_name = 'DQ_S1'; 列出所有的字段名. 2.查询昨天一天 ...
- java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名
package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...