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

本文涉及的产品
云数据库 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

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
存储 缓存 数据库
C/C++工程师面试题(数据库篇)
C/C++工程师面试题(数据库篇)
51 9
|
1月前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
1月前
|
JSON C++ 数据格式
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
【C++】Visual Studio C++使用配置Json库文件(老爷式教学)
|
1月前
|
关系型数据库 数据库 C++
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)
|
7天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
21 2
|
15天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
18天前
|
存储 Java 测试技术
滚雪球学Java(22):序列化和反序列化
【4月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
33 1
滚雪球学Java(22):序列化和反序列化
|
21天前
|
SQL 存储 安全
每日一道面试题:Java中序列化与反序列化
每日一道面试题:Java中序列化与反序列化
12 0
|
21天前
|
Java C++ Kotlin
进制转换在C/C++/Java/Kotlin中的应用(详细版)(下)
进制转换在C/C++/Java/Kotlin中的应用(详细版)
13 1
|
21天前
|
存储 人工智能 Java
进制转换在C/C++/Java/Kotlin中的应用(详细版)(上)
进制转换在C/C++/Java/Kotlin中的应用(详细版)
9 0