【9】cpp_redis RapidJson redis (C++对象利用Rapidjson序列化到redis与反序列化)

c++ 使用rapidjson对数据序列化和反序列化(vs2109) c++ 使用rapidjson对数据序列化和反序列化,json序列化和反序列化 阅读详情

上图是本文要实现的功能,用到了RapidJson和cpp_redis两个库。

代码如下:

#include <iostream>
#include <list>
using namespace std;

#include <cpp_redis/cpp_redis>
#include "JsonObject.h"
#include "Person.h"

#ifdef _WIN32
#include <Winsock2.h>
#endif /* _WIN32 */
#pragma comment( lib, "ws2_32.lib")//最好的方法是包含在项目属性中,因为那样可以根据Debug、Release、x86、x64来区分。这里仅仅是为了突出引用了这个库写在这里 

bool StartWSA(void)
{
	//! Windows netword DLL init
	WORD version = MAKEWORD(2, 2);
	WSADATA data;

	if (WSAStartup(version, &data) != 0)
	{
		std::cerr << "WSAStartup() failure" << std::endl;
		return false;
	}
	return true;
}

void StopWSA(void)
{
	WSACleanup();
}

void cpp_redis_connect(cpp_redis::redis_client& _client)
{
	//! Enable logging
	cpp_redis::active_logger = std::unique_ptr<cpp_redis::logger>(new cpp_redis::logger);
	_client.connect("127.0.0.1", 6379, [](cpp_redis::redis_client&)
	{
		std::cout << "client disconnected (disconnection handler)" << std::endl;
	});
}

int main(int argc, char* argv[])
{
	//启动Windows网络通信库
	if (!StartWSA())
	{
		return -1;
	}
	try
	{
		cpp_redis::redis_client client;
		cpp_redis_connect(client);

		//创建C++类对象
		std::list<Employee> employees;
		employees.push_back(Employee("Milo YIP", 34, true));
		employees.back().AddDependent(Dependent("Lua YIP", 3, new Education("Happy Kindergarten", 3.5)));
		employees.back().AddDependent(Dependent("Mio YIP", 1));
		employees.push_back(Employee("Percy TSE", 30, false));
		std::vector<string> allKeysList;
		//将C++类对象序列化之后,发送到redis服务器
		vector<pair<string, string>> vecPair /*= { { "key1", "value1" },{ "key2", "value2" },{ "key3", "value3" } }*/;
		for (auto itr = employees.begin(); itr != employees.end(); ++itr)
		{
			vecPair.push_back(std::make_pair(itr->GetRedisKey(), itr->ToJson()));
			allKeysList.push_back(itr->GetRedisKey());
		}
		//新增:批量
		client.hmset("MyHashSet", vecPair, [&](cpp_redis::reply& _reply) {
			std::cout << "往redis发送数据:HashSet,主键MyHashSet " << _reply << endl;
		});
		
		//从redis取出json字符串反序列化为C++内存对象
		std::list<Employee> employeesFromRedis;
		for each (auto& var in allKeysList)
		{
			//查询:单个
			client.hget("MyHashSet", var.c_str(), [&](cpp_redis::reply& _reply)
			{
				std::cout << "在redis的Hash容器中查询单个:容器名称[MyHashSet] key[" << var <<"]" << endl << "结果:"  << _reply.as_string() << endl;
				Employee employee;
				employee.CreateFromJson(_reply.as_string().c_str());
				employeesFromRedis.push_back(employee);
			});
		}

		// synchronous commit 同步提交:将上面的所有get set 等方法依次执行完, no timeout
		client.sync_commit();
		cout << "从redis取回的字符串反序列化得到的C++对象调用ToJson得到的结果:" << endl;
		for (auto itr = employeesFromRedis.begin(); itr != employeesFromRedis.end(); ++itr)
		{
			cout << itr->ToJson() << endl;
		}
	}
	catch (cpp_redis::redis_error e)
	{
		std::cout << e.what() << endl;
	}

	//关闭Windows网络通信库
	StopWSA();

	return 0;
}


程序验证输出如下(完全正确):


工程资源文件:


百度云链接 欢迎加我哦

C++轻量级Web服务实战:基于jwt-cpp与httplib的登录认证与API保护 在现代Web服务开发中,用户认证与API安全是保障系统可靠性的基石。其核心原理在于通过令牌机制实现无状态的身份验证,其中JSON Web Token(JWT)因其自包含、可验证的特性成为主流方案。该技术通过数字签名确保令牌的完整性与来源可信,其价值在于简化了服务端的会话管理,便于分布式系统扩展。典型的应用场景包括前后端分离架构中的用户登录、微服务间的安全调用以及受保护资源的访问控制。本文聚焦于C++工程实践,详细阐述了如何利用轻量级的jwt-cpp库实现JWT的签发与验证,并结合同样简洁的httplib库构 阅读详情

相关推荐

C++ RESTful 服务实战:从开发到 Nginx 部署全流程指南

RESTful API 是现代 Web 服务与微服务架构中实现系统间通信的核心接口规范,它基于 HTTP 协议,通过标准化的请求方法(如 GET、POST)和资源标识符(URI)来操作数据。其原理在于将服务端功能抽象为资源,并通过无状态的请求-响应模型实现松耦合。这项技术的价值在于提供了跨平台、语言无关的集成能力,极大地提升了系统的可扩展性和可维护性。在应用场景上,RESTful API 广泛用于构建前后端分离的 Web 应用、移动应用后端以及微服务间的数据交互。本文聚焦于 **C++ 项目实战**,详细阐

429

C++对象Json序列化最佳实践(基于Rapidjson库):C++内存对象和Json字符串互相转换

介绍:RapidjsonRapidjson库是C++对象序列化到Json字符串的非常好的工具,以效率著称,腾讯的人写的。官方网站:点击打开链接本文全部资源百度云这个库的缺点(个人拙见):1 暴露的细节相对较多:容器,迭代器,类型,成员函数,序列化,反序列化,都有非常细致的操作。这个给使用者带来记忆负担较重。至少需要同时暴露Value类型和Document类型才能完整的实现Object内部包含Obj...

C++ 爱好者 make_it_simple888 2万+

C++实现高性能推荐系统:架构、算法与工程实践全解析

推荐系统作为信息过滤与个性化服务的核心技术,其核心原理是通过算法模型分析用户行为与物品特征,实现精准匹配。在技术实现层面,系统性能与资源效率直接影响用户体验与商业价值。尤其在实时性要求高、并发量大的应用场景中,底层语言的选择与工程优化至关重要。C++凭借其零成本抽象、直接内存控制和高运行效率,成为构建高性能、低延迟推荐服务的利器。本文以母婴商品推荐为具体场景,深入探讨如何运用C++进行模块化架构设计、高效特征工程实现、多路召回与精排算法集成,并详细解析了基于Boost.Asio的高并发服务、内存资源管理及性

weixin_30735745的博客 470

Redis常用命令及C/C++调用Redis接口详解

文章目录一、Redis常用命令启动Redis服务端启动Redis客户端Redis常用命令详解键(Key)命令Hash 命令String 命令List 命令Set 命令Zset 命令二、C/C++调用接口连接和操作Redis数据库hiredis.h同步API连接redis数据库发送命令到redis处理redis应答清理连接资源发送多个命令参数访问Redis代码实例 一、Redis常用命令 一般Redis都是安装在linux上,分为server和client。 启动Redis服务端 在终端输入以下命令启动 Re

qq_41854911的博客 1万+

C++高性能推荐系统实战:从混合推荐到路径规划的工程架构

推荐系统作为信息过滤和个性化服务的核心技术,其核心原理在于通过分析用户历史行为与物品特征,预测用户偏好并完成精准匹配。在工程实践中,系统性能与响应速度直接决定了用户体验与商业价值。面对高并发、低延迟的在线服务场景,C++凭借其零成本抽象、精细的内存控制和高性能计算库生态,成为构建核心引擎的理想选择。本文以智能行程推荐为具体应用场景,深入剖析了如何利用C++的现代特性(如STL容器、智能指针)和第三方库(如Eigen、TBB),实现一个集成了混合推荐引擎与约束路径规划的高性能服务端系统,展示了从数据模型设计、

weixin_33898233的博客 452

C++构建电商实时画像系统:高并发架构与性能优化实战

在实时数据处理领域,系统架构设计与性能优化是核心技术挑战。其原理在于通过高效的数据结构、并发模型和内存管理,实现对海量数据流的低延迟处理。这项技术的核心价值在于能够显著提升数据处理吞吐量、降低响应延迟,并优化硬件资源利用率,从而有效控制运营成本。在电商、广告、金融风控等对实时性要求极高的应用场景中,高性能计算引擎是支撑实时用户画像、个性化推荐等业务的关键基础设施。本文聚焦于如何利用C++语言特性,结合**无锁数据结构**和**SIMD指令集**优化,构建一套应对日均百亿级事件流的电商实时画像系统,详细剖析了

weixin_30455023的博客 485

基于RapidJson的c++类的序列化和反序列化

目录 一、rapidjson简介 二、序列化思路 三、C++实体类的的序列化和反序列化 1、RapidjsonHelper帮助类 2、实体类的的序列化和反序列化 3、main函数 四、下载 一、rapidjson简介 RapidJSON 是一个 C++ 的 JSON 解析器及生成器。它的灵感来自RapidXml。 RapidJSON 小而全。它同时支持 SAX 和 DOM 风格的 API。SAX 解析器只有约 500 行代码。 RapidJSON 快。它的性...

kupePoem的专栏 3601

C++构建高并发社区健康管理系统:架构设计、数据库优化与实战经验

在软件工程领域,客户端/服务器(C/S)架构是构建高性能、高安全性本地化应用的主流模式,其核心在于通过清晰的模块划分与数据流设计,实现业务逻辑的高内聚与低耦合。C++语言凭借其零成本抽象和手动内存管理能力,在该架构中能实现对系统资源的精确控制,尤其适用于对性能和稳定性有严苛要求的场景,如医疗健康、金融交易等系统。本文以“社区居民诊疗健康管理系统”这一实战项目为例,深入剖析了如何运用C++与MySQL数据库,解决高并发预约场景下的数据一致性、海量健康档案的存储与查询优化,以及通过自定义二进制协议实现高效网络通

cuili5839的博客 362

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

目录 目录 一 基本原理 1原理图 二 从C序列化到JSON存入redis 1环境清单 2开始工作 3 总结归纳 三 从redis取出逆序列化为JAVA 四 声明 一 、基本原理. 1.1原理图 Created with Raphaël 2.1.0c++Json-Redis-Json ...

weixin_34297300的博客 617

C++ rapidjson 对类序列化(完美二次封装)下载

本工程源码,基于rapidjson实现二次封装,使C++序列化一个类的变得代码非常小,耦合性非常低,且不损失原有序列化性能。详细使用可关联本人博客:http://blog.youkuaiyun.com/lightspear/article/details/54836656

C++ Redis mset二进制数据接口封装方案

C++ Redis mset 二进制数据接口封装方案   需求   C++中使用hiredis客户端接口访问redis;   需要使用mset一次设置多个二进制数据   以下给出三种封装实现方案;   简单拼接方案   在redis-cli中,mset的语法是这样的:   /opt/colin$./redis-cli mset a 11 b 22 c 333   OK   按照这样的语法拼接后,直接使用hiredis字符串接口redisCommand传递: void msetNotBinary(redisContext *c, const vector<string> &v

C++ RESTful API开发实战:从原理到实现,使用C++ REST SDK构建高效网络服务

RESTful API作为一种基于HTTP协议的架构风格,是现代网络服务交互的通用标准。其核心原理遵循客户端-服务器分离、无状态、统一接口等约束,通过HTTP方法(GET、POST、PUT、DELETE)与资源URI的精准映射,实现对资源的增删改查操作。这种设计赋予了API良好的可伸缩性、简单性和互操作性,使其成为微服务、前后端分离及系统集成中的关键技术。在C++工程实践中,借助现代库如C++ REST SDK,开发者可以高效处理HTTP请求、JSON序列化等任务,将底层性能优势与标准的网络服务接口相结合,

weixin_30615767的博客 499

图像去雨:超详细手把手写 pytorch 实现代码(带注释)

占个坑,过几天来写

书山有路,学海无涯! 1万+

C++后端与微信小程序混搭架构实战:老年认知阅读平台设计与性能优化

微服务架构通过将单一应用拆分为多个独立、松耦合的服务,提升了系统的可维护性和可扩展性。其核心原理在于按业务能力边界进行服务划分,每个服务拥有独立的数据库和业务逻辑,并通过轻量级通信机制(如gRPC、HTTP API)进行交互。这种架构的技术价值在于支持技术栈的灵活选型、团队独立开发部署以及服务的弹性伸缩。在高并发、高性能要求的应用场景中,例如实时交互、计算密集型任务处理,微服务架构能有效保障系统的响应速度和稳定性。本文以老年认知阅读交流平台为例,详细阐述了如何运用C++实现高性能后端微服务,并结合微信小程序

weixin_30387423的博客 375

Vue3项目实战:集成h265webjs打造高性能Web端H.265播放器

本文详细介绍了如何在Vue3项目中集成h265webjs库,构建高性能的Web端H.265播放器。通过封装播放器管理模块、利用Vue3组合式API优雅管理生命周期,并提供了从环境准备、核心集成到进阶优化的完整实战指南,有效解决了浏览器原生不支持H.265解码的难题,显著降低视频流带宽占用。

weixin_29016833的博客 364

Cadence Sigrity

目录 一、PowerSI 1、PowerSI仿真前设置 2、PowerSI提取S参数 (1)检查叠层 (2)选择需要提取的走线和GND (3)设置端口 (4)设置提取频率和提取方式 (5)运行仿真 一、PowerSI PowerSI是一个交流分析工具,适用于频域仿真。 S参数提取 电源阻抗提取 全波参数提取 阻抗、耦合检查 谐振分析 1、PowerSI仿真前设置 打开PCB文件: 打开后如图: 设置为单色后: 仿真前的设置:

fang_yang_wa的博客 3万+

从零构建高性能C++后端:libhv网络库与MySQL连接池实战

高性能后端开发的核心在于处理高并发I/O和系统资源管理。其基本原理常采用事件驱动的异步模型,如Reactor模式,以替代传统阻塞式模型,从而在资源受限环境下实现高吞吐与低延迟。这一技术价值在于为需要极致性能的场景(如金融交易、实时通信、大型在线游戏)提供了底层保障。在应用层面,开发者需综合考量网络编程、数据库交互和API设计。本文聚焦于使用C++构建现代化后端服务,通过集成轻量高效的libhv网络库实现HTTP服务器,并设计健壮的MySQL连接池与参数化查询封装,以应对高并发挑战,同时确保代码安全与可维护性

weixin_34146805的博客 341

告别双系统!用Ventoy把Ubuntu 22.04装进U盘,打造你的随身开发环境(附保姆级避坑指南)

本文详细介绍了如何使用Ventoy将Ubuntu 22.04安装到U盘,打造便携式开发环境。通过即插即用的特性,开发者可以在任何x86电脑上快速启动完整的Ubuntu系统,无需配置双系统或虚拟机。文章提供了从硬件准备到系统优化的全流程指南,帮助用户高效创建随身开发环境。

weixin_31569671的博客 364

1个月学习C++网络编程

通过这个路径,你可以在1个月内建立从底层Socket到分布式数据分发的完整知识链,并产出可展示的项目代码。数据序列化:JSON(RapidJSON)、Protocol Buffers(选学)视频:TheCherno的C++网络编程系列(YouTube/B站)库选型:直接使用原生Socket API 或 Asio(1天基础)选择开发环境:Linux(推荐)或Windows + WSL2。:避免陷入协议细节(如手写HTTP解析),先用现成库。负载均衡:轮询/一致性哈希(理论+简单实现)

ZachLi的博客 487

[USACO2023-JAN-Bronze] T2 Air Cownditioning II 题解

[USACO2023-JAN-Bronze] T2 Air Cownditioning II题解

1652

全志平台camera驱动开发(4)NVP6134芯片4路模拟视频BT656输入

前言 1. 调试平台: 全志V5/T7等有BT656或BT1120的并行接口,理论有DVP接口的一般都支持 2. NVP6134可使用多路视频同时输入 硬件连接 模拟camera1 模拟camera2 NVP6134 ------>NVCSI0 ...

jzwjzw19900922的博客 3532

现代C++配置管理:TOML++库从入门到工程实践

在软件工程中,配置管理是连接代码逻辑与运行时行为的关键环节。其核心原理在于将可变参数从硬编码中解耦,通过外部文件或数据源进行动态控制,从而提升系统的灵活性和可维护性。传统方案如JSON或XML虽应用广泛,但在可读性、严格性和易用性上常面临挑战。TOML(Tom's Obvious, Minimal Language)作为一种新兴的配置文件格式,以其类似INI的直观语法和严格的类型系统脱颖而出,成为现代应用配置的热门选择。其技术价值在于显著提升了配置文件的编写与阅读体验,并减少了因格式歧义导致的解析错误。在C

444

CPA-7-资产减值

摘要:本文系统梳理了资产减值会计处理规范,涵盖六大要点:1)不同资产适用的减值准则(存货、长期资产、金融资产);2)减值测试触发条件与例外情形(商誉等需年度强制测试);3)存货可变现净值计算方法及特殊考量;4)可收回金额的双重判定标准(公允价值净额与现值孰高);5)资产组认定标准及减值分摊顺序(先商誉后按比例);6)含少数股东商誉的减值测试方法(需调整包含完全商誉的账面价值)。文中通过具体案例演示了合并报表中商誉减值的计算过程,强调比较基准应包含少数股东权益对应的商誉价值。

qq_34047402的博客 203

C++高性能后端开发实践:构建电影资讯小程序服务架构

在后端开发领域,高性能服务架构是支撑高并发应用的核心技术。其原理在于通过异步事件驱动模型与多线程协同,结合精细化的内存管理与资源调度,实现对海量请求的高效处理。这种架构的技术价值在于能够显著提升系统的吞吐量与响应速度,降低资源消耗,尤其适用于需要实时数据处理与高并发访问的场景。例如,在电影资讯、实时推荐等数据密集型应用中,高性能后端能够确保用户获得流畅的体验。本文以C++实现电影资讯小程序后端为例,深入探讨了如何利用Boost.Asio网络库与多线程技术构建高性能服务,并详细解析了数据库连接池优化与JSON

weixin_30292745的博客 410

EPO: Hierarchical LLM Agents with Environment PreferenceOptimization

长期决策和规划任务依然是基于大型语言模型(LLM)的智能体面临的一大挑战(Valmeekam 等,2023;Liu 等,2023;Silver 等,2024)。这些任务需要智能体进行多步骤的规划,同时保持行为的一致性和目标导向,这对于通常被设计用于即时和局部预测的大型语言模型来说颇为困难。此外,针对具身智能体的大型语言模型微调面临的一个关键难题是大规模标注数据的需求(Reed 等,2022)。

qq_52053775的博客 142

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

基于C++ Workflow构建10万QPS高并发广告竞价系统

异步非阻塞编程模型是现代高并发系统设计的核心范式,它通过事件驱动和Reactor模式,解决了传统同步I/O中线程阻塞导致的资源浪费问题。其技术价值在于能够用少量线程驱动海量并发连接,极大提升系统的吞吐量和资源利用率,尤其适用于在线广告、实时通信、金融交易等低延迟、高并发的应用场景。本文以搜狗C++ Workflow框架为例,深入解析如何利用其任务流抽象和并行编排能力,构建一个能够稳定支撑10万QPS的广告竞价系统核心服务,涵盖从HTTP服务器搭建、并行任务流实现到连接池优化、超时重试等关键工程实践。

weixin_34200628的博客 387

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: C++对象Json序列化最佳实践(基于Rapidjson库):C++内存对象和Json字符串互相转换
下一篇: 动态规划算法(连续子数组最大和,O(N)时间复杂度O(1)空间复杂度) 【更新于:2018-05-13】
C++程序员Carea
博客等级 码龄18年 1590粉丝 878原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值