从C++到JSON,存入redis数据库再逆序列化为JAVA。

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 目录目录一 基本原理1原理图二 从C序列化到JSON存入redis1环境清单2开始工作3 总结归纳三 从redis取出逆序列化为JAVA四 声明一 、基本原理.1.1原理图Created with Raphaël 2.1.0c++Json-Redis-Json Java二 、从C++序列化到JS

目录


一 、基本原理.

1.1原理图

Created with Raphaël 2.1.0c++Json-Redis-Json Java

二 、从C++序列化到JSON,存入redis.

1.1环境清单

  1. linux
  2. gcc
  3. redis + hiredis(lib)
  4. cmake、make
  5. codeblocks(或者其他IDE)

1.2开始工作

  1. redis环境搭建
  2. codeblocks(IDE)配置
  3. rapidjson(C++ToJSON)下载
  4. hiredis依赖配置 (为 5. 做准备)
  5. SimpleRedisClient(toRedis)下载
  6. 最终成果

1.2.1 进入redis官网自行配置,或者移步redis入门教程有详细说明
1.2.2 进入codeblocks官网下载,或者在终端安装,完成之后新建一个项目备用

$ sudo apt-get install codeblocks

1.2.3 序列化我们用到的是rapidjson开源项目,当然也可以去JSON官网翻一翻其他开源项目来使用。下面的命令请在workspace里刚才项目的路径下键入

$ git clone https://github.com/miloyip/rapidjson.git
$ cd rapidjson
$ sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/include
$ make
$ make install

这有一个例子,倘若可以跑了,说明配置好了。
demo.cpp:

// rapidjson/example/simpledom/simpledom.cpp`
#include <string>
#include <stdlib.h>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>

using namespace rapidjson;

int main() {
    // 1. Parse a JSON string into DOM.
    const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
    Document d;
    d.Parse(json);

    // 2. Modify it by DOM.
    Value& s = d["stars"];
    s.SetInt(s.GetInt() + 1);

    // 3. Stringify the DOM
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);

    // Output {"project":"rapidjson","stars":11}
    std::cout << buffer.GetString() << std::endl;
    return 0;
}

1.2.4 hiredis环境配置:直接在终端

$ sudo apt-get install libhiredis-dev

1.2.5 存到redis我们用到的是SimpleRedisClient,同样你也可以去redis客户端翻一翻其他开源项目来使用。下面的命令请在workspace里刚才项目的路径下键入

$ git clone https://github.com/Levhav/SimpleRedisClient.git
$ cd SimpleRedisClient

再进入到对应的redis版本的目录下,把SimpleRedisClient.h拷贝到 刚才demo.cpp同级的目录下。并且在codeblocks中把它导入到项目中。demo使命已经完成,移除demo.cpp(不然会有冲突)
1.2.6 最终成果
final.cpp:


#include "stdlib.h"
#include <stdio.h>
#include "/home/morpheus/CodeBlocks_workspqce/final/SimpleRedisClient.h"//注意路径
#include <iostream>
#include <string>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

using namespace std;
using namespace rapidjson;

int main(int argc, char *argv[])
{   
    //toJson
    StringBuffer s;
    Writer<StringBuffer> writer(s);

    writer.StartObject();                       // Between StartObject()/EndObject()

    writer.Key("name");                     // output a key,
    writer.String("gaoyisheng");                // follow by a value.
    writer.Key("age");
    writer.Int(123);                        

    writer.EndObject();             // Between StartObject()/EndObject(),

    std::cout << s.GetString() << std::endl;


    //toRedis
    SimpleRedisClient rc;

    rc.setHost("127.0.0.1");            //redis服务器端口
    rc.setPort(6379);
    rc.auth("");                        //改成你的   链接redis服务器的用户
    rc.LogLevel(0);

    if(!rc)
    {
        printf("Соединение с redis не установлено\n");//没有安装连接redis
        return -1;
    }

    rc.getset("me",s.GetString());//set()方法同样适用,详见SimpleRedisClient代码

    rc.redis_close();
}

1.3 总结归纳

1.3.1 倘若在局域网内通过redis传递,需将redis配置改为 bind 0.0.0.0 ,在final.cpp中将 127.0.0.1 改为 服务器地址。
1.3.2 倘若是下载解压的redis,需自行打开服务器。./redis-server
1.3.3 在导入项目时,需注意路径问题,文件最好放在codeblocks的workspace下!


三 、从redis取出,逆序列化为JAVA.

请移步我同窗的博客,已有详解。
http://blog.csdn.net/qq_33429968/article/details/53045336

四 、声明

小可不才,恭听指正。

*欢迎任何形式的转载,烦请注明装载,保留本段文字。
*本文原文链接 :http://blog.csdn.net/timo1160139211/article/details/53045715

*参考文献:见上述官网。

目录
相关文章
|
11月前
|
NoSQL 网络协议 Linux
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
142 6
|
11月前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
124 1
|
10月前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
135 0
|
11月前
|
NoSQL API Redis
如何使用 C++ 开发 Redis 模块
如何使用 C++ 开发 Redis 模块
|
11月前
|
NoSQL Redis C++
Redis的实现五:二叉堆的数据结构和TTL、c,c++的实现
这篇文章详细探讨了二叉堆的数据结构及其在C和C++中的实现,特别强调了二叉堆在Redis中实现TTL(生存时间)功能的重要性,并通过代码示例展示了如何在Redis中使用二叉堆来管理键的过期时间。
123 0
|
传感器 定位技术 C++
基于C++的GDAL用空白栅格填充长时间序列遥感影像中的缺失图像
然后,定义需要处理的遥感影像路径列表,和识别数据缺失的逻辑。这里我们简化处理,假设已经知道哪一幅图像是缺失的,因此直接跳过识别步骤。
149 1
|
Arthas 监控 算法
JVM成神路终章:深入死磕Java虚拟机序列总纲
JVM成神路终章:深入死磕Java虚拟机序列总纲
472 1
|
编解码 NoSQL Redis
c++开发redis module问题之想实现Redis命令,如何解决
c++开发redis module问题之想实现Redis命令,如何解决
|
JSON JavaScript 前端开发
Vue项目使用Cookie,以Json格式存入与读取Cookie,设置过期时间以及删除操作
这篇文章介绍了在Vue项目中如何使用JavaScript操作Cookie,包括设置、读取、设置过期时间以及删除Cookie的方法。
641 0
|
JSON Android开发 数据格式
Android c++ core guideline checker 应用问题之JSON compilation database的定义如何解决
Android c++ core guideline checker 应用问题之JSON compilation database的定义如何解决