在 Visual Studio 上连接 WSL 使用 redis-plus-plus

redis-plus-plus的安装与使用 redis-plus-plus的安装与使用示例 阅读详情

今天玩一下 redis-plus-plus 这个东西。这个是一个基于 c++ 的 redis 的客户端库。可以使我们的程序作为一个客户端连接到我们的 redis 服务器,对服务器进行操作。

安装

redis-plus-plus 是基于 hiredis 的,所以要先安装 hiredis。可以直接使用包管理器。

sudo apt install libhiredis-dev

然后我们下载一下 redis-plus-plus 的源码。

git clone https://github.com/sewenew/redis-plus-plus.git

然后我们找到 redis-plus-plus 的文件夹下面,以此执行以下几个命令。

mkdir build && cd build
cmake .. 
make
sudo make install

安装成功后,我们可以在 usr/local/include 中多出 sw ⽬录, 并且内部包含 redis-plus-plus 的⼀系列头⽂件. 会在 usr/local/lib 中多出⼀系列 libredis 库⽂件,后面我们在创建项目的时候要用到。

然后我们开启一个 Visual Studio 的 Linux 项目,使用 ssh 连接到咱们的虚拟机或者 WSL 。打开项目属性->链接器->输入->附加依赖项,在里面加入我们的库的路径,分别是:

/usr/local/lib/libredis++.a;
/lib/x86_64-linux-gnu/libhiredis.a;

系统不同库文件的路径也可能会不一样,我们需要找到自己的库文件在哪里。加入之后我们就可以 #include <sw/redis++/redis++.h> 包含头文件正式使用关于 redis-plus-plus 的功能啦。

使用

下面给出一些常用的 API。

auto redis = Redis("tcp://127.0.0.1:6379");
auto res = redis.ping();
std::cout << res << std::endl;

连接到 redis 服务端,字符串中的IP地址和端口要换成自己的服务端所在的地址。

ping() 可以测试我们的连接是否成功,如果成功,我们会收到一个 PONG ,它会以返回值的形式存在 res 中。

 redis.set("key", "val");
    auto val = redis.get("key");    // val is of type OptionalString. See 'API Reference' section for details.
    if (val) {
        // Dereference val to get the returned value of std::string type.
        std::cout << *val << std::endl;
    }   // else key doesn't exist.

set 函数可以设置一个 string 类型的值到数据库中,第一个参数为 key,第二个是对应的 value。

get 函数可以从数据库中获得 key 对应的 value,该值会以返回值的形式返回。

    std::vector<std::string> vec = {"a", "b", "c"};
    redis.rpush("list", vec.begin(), vec.end());

    redis.rpush("list", {"a", "b", "c"});

    vec.clear();
    redis.lrange("list", 0, -1, std::back_inserter(vec));

上文为给 list 对象插入内容的两种方式,rpush 为从右侧插入,lpush 为左插
第一种:使用 vector 容器。第一个参数为 key,第二第三个参数为容器的两个迭代器,表示插入的区间。
第二种:直接插入一个右值,第一个参数为 key,第二个参数是要插入的右值。

最后一行内容为把 list 对象中的元素存入到 vector 容器中
第一个参数为对应的 key,第二第三个参数为 list 中元素的下标,表示要存入的区间,第三个参数为 -1 表示,此区间直到对象末尾。
最后一个参数是一种用于为容器添加元素的迭代器,上文中表示的是尾插的迭代器。

    redis.hset("hash", "field", "val");

    // Another way to do the same job.
    redis.hset("hash", std::make_pair("field", "val"));

两种方式插入哈希类型,第一种是直接插入,第二种是使用 pair 对象进行插入。

    std::unordered_map<std::string, std::string> m = {
        {"field1", "val1"},
        {"field2", "val2"}
    };
    redis.hmset("hash", m.begin(), m.end());

使用 map 批量插入。

    m.clear();
    redis.hgetall("hash", std::inserter(m, m.begin()));

把 hash 对象中所有的键和值都存到 map 中。
第一个参数为 hash 对象对应的 key,第三个参数为插入的迭代器。

    std::vector<OptionalString> vals;
    redis.hmget("hash", {"field1", "field2"}, std::back_inserter(vals));

把 hash 对象中指定的键对应的值存到 map 中。
第一个参数为 hash 对象对应的 key,第二个参数为需要存储的值对应的 keys,第三个参数为插入的迭代器。

    redis.sadd("set", "m1");

在 set 对象中插入一个值。

    std::unordered_set<std::string> set = {"m2", "m3"};
    redis.sadd("set", set.begin(), set.end());

    redis.sadd("set", {"m2", "m3"});

批量插入的两种方法:使用 unordered_set 容器和直接插入。

    set.clear();
    redis.smembers("set", std::inserter(set, set.begin()));

把 set 容器中的元素存入到 set 容器中。

    if (redis.sismember("set", "m1")) {
        std::cout << "m1 exists" << std::endl;
    }   // else NOT exist.

判断数据库中对应的 set 对象中是否有该元素,如果有则返回 true 否则返回 false。

    redis.zadd("sorted_set", "m1", 1.3);

在数据库中的 sorted set 对象中插入元素,第一个参数为 key,第二个参数为插入的元素,第三个参数为插入的元素的分数。

    std::unordered_map<std::string, double> scores = {
        {"m2", 2.3},
        {"m3", 4.5}
    };
    redis.zadd("sorted_set", scores.begin(), scores.end());

在数据库中的 sorted set 对象中,使用 unorder_map 容器批量插入元素。

    std::vector<std::pair<std::string, double>> zset_result;
    redis.zrangebyscore("sorted_set",
            UnboundedInterval<double>{},            // (-inf, +inf)
            std::back_inserter(zset_result));

将 sorted set 对象中的元素存储到 vector 容器中。其结果是有序的,如果保存到 unordered_map 中 会失去顺序。
第一个参数为 key,第二个参数为一个区间(上文中表示的为正无穷到负无穷),第三个参数为一个插入的迭代器。

    std::vector<std::string> without_score;
    redis.zrangebyscore("sorted_set",
            BoundedInterval<double>(1.5, 3.4, BoundType::CLOSED),   // [1.5, 3.4]
            std::back_inserter(without_score));

此种方法只会吧元素的内容保存到队列中,而不会保存分数。第二个参数表示为 1.5 到 3.4 的一个闭区间。

    std::vector<std::pair<std::string, double>> with_score;
    redis.zrangebyscore("sorted_set",
            BoundedInterval<double>(1.5, 3.4, BoundType::LEFT_OPEN),    // (1.5, 3.4]
            std::back_inserter(with_score));

上文中第二个参数表示的是一个 1.5 到 3.4 的左开右闭区间。

    // Script returns a single element.
    auto num = redis.eval<long long>("return 1", {}, {});

    // Script returns an array of elements.
    std::vector<std::string> nums;
    redis.eval("return {ARGV[1], ARGV[2]}", {}, {"1", "2"}, std::back_inserter(nums));

    // mset with TTL
    auto mset_with_ttl_script = R"(
        local len = #KEYS
        if (len == 0 or len + 1 ~= #ARGV) then return 0 end
        local ttl = tonumber(ARGV[len + 1])
        if (not ttl or ttl <= 0) then return 0 end
        for i = 1, len do redis.call("SET", KEYS[i], ARGV[i], "EX", ttl) end
        return 1
    )";

    // Set multiple key-value pairs with TTL of 60 seconds.
    auto keys = {"key1", "key2", "key3"};
    std::vector<std::string> args = {"val1", "val2", "val3", "60"};
    redis.eval<long long>(mset_with_ttl_script, keys.begin(), keys.end(), args.begin(), args.end());

上文是一些脚本编程的使用方法。

 // Create a pipeline.
    auto pipe = redis.pipeline();

    // Send mulitple commands and get all replies.
    auto pipe_replies = pipe.set("key", "value")
                            .get("key")
                            .rename("key", "new-key")
                            .rpush("list", {"a", "b", "c"})
                            .lrange("list", 0, -1)
                            .exec();

    // Parse reply with reply type and index.
    auto set_cmd_result = pipe_replies.get<bool>(0);

    auto get_cmd_result = pipe_replies.get<OptionalString>(1);

    // rename command result
    pipe_replies.get<void>(2);

    auto rpush_cmd_result = pipe_replies.get<long long>(3);

    std::vector<std::string> lrange_cmd_result;
    pipe_replies.get(4, back_inserter(lrange_cmd_result));

如上是 redis 管道操作的相关代码:
使用 pipeline() 函数创建一个管道对象 pipe。然后我们可以直接对管道对象调用 前面的命令函数,管道会为我们保存这些命令,在我们调用 exec() 函数时统一发送给 redis 服务端。服务端在处理完这些命令后也会统一给我们进行回复。这样可以减少客户端与服务端的交互次数,节省网络开销。命令执行结果我们存储在了 pipe_replies 对象中,我们可以使用 get() 函数加数据类型,使用类似于数组的下标的传参方式获取对应的命令的结果,也可以使用 get() 函数加数组下标传参加插入迭代器的方式把结果存入容器中。

 // Create a transaction.
    auto tx = redis.transaction();

    // Run multiple commands in a transaction, and get all replies.
    auto tx_replies = tx.incr("num0")
                        .incr("num1")
                        .mget({"num0", "num1"})
                        .exec();

    // Parse reply with reply type and index.
    auto incr_result0 = tx_replies.get<long long>(0);

    auto incr_result1 = tx_replies.get<long long>(1);

    std::vector<OptionalString> mget_cmd_result;
    tx_replies.get(2, back_inserter(mget_cmd_result));

哎?这玩意用着和管道怎么这么像,那事务和管道有什么区别呢?

我不知道!

看下一趴吧

    // There's no *Redis::client_getname* interface.
    // But you can use *Redis::command* to get the client name.
    val = redis.command<OptionalString>("client", "getname");
    if (val) {
        std::cout << *val << std::endl;
    }

    // Same as above.
    auto getname_cmd_str = {"client", "getname"};
    val = redis.command<OptionalString>(getname_cmd_str.begin(), getname_cmd_str.end());

    // There's no *Redis::sort* interface.
    // But you can use *Redis::command* to send sort the list.
    std::vector<std::string> sorted_list;
    redis.command("sort", "list", "ALPHA", std::back_inserter(sorted_list));

    // Another *Redis::command* to do the same work.
    auto sort_cmd_str = {"sort", "list", "ALPHA"};
    redis.command(sort_cmd_str.begin(), sort_cmd_str.end(), std::back_inserter(sorted_list));

上文为通用命令的使用方法,在 Redis 客户端库的使用场景中,通用命令接口(Generic Command Interface)是一种允许用户以灵活、通用的方式执行 Redis 命令的机制。通常,客户端库会为一些常见的 Redis 命令(如 GET、SET、HSET 等)提供专门的方法。然而,Redis 支持的命令众多,客户端库不可能为每一个命令都提供特定的封装方法。通用命令接口就是为解决这一问题而设计的,它允许用户直接发送任意的 Redis 命令,而不依赖于库中预定义的特定方法。
我么可以使用 command() 函数在传参中传入我们要执行的命令,并且可以通过两种方式获得命令执行的结果。
第一种:在 command 函数后添加尖括号,里面为返回值类型,通过返回值获得执行结果。
第二种:在 command 函数添加最后一个参数为插入迭代器,把执行结果存入到容器中。

以上是本期的全部内容,下周同一时间期待在此与大家见面。

redis-plus-plus使用说明 概述 Redis-plus-plus是一个基于hiRedis的Redis客户端,是用C++ 11 / C++ 17编写。 特性 支持大部分的Redis命令 连接池 Redis脚本 线程安全除非另有说明 发布订阅 管道 事务 集群 哨兵 类似STL的接口 通用命令行接口 安装 安装hiRedis 因为redis-plus-plu是基于hiRedis的,所以必须先安装hiRedis。支持的hiR 阅读详情

相关推荐

Redis 简介与 redis-plus-plus 使用指南

Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)数据库。它通常用作数据结构服务器,因为除了基本的键值存储功能外,Redis 还支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范围查询、位图、超日志和地理空间索引等。

qq_67582098的博客 1200

redis-plus-plus常用函数介绍以及redis的一些边缘知识

将key以字符串的形式传入,get将返回key对应的value值。需要将一个url作为构造函数的参数传入,比如:“tcp://127.0.0.1:6379”,这个url中,tcp表示用tcp协议进行通信(redis是基于tcp的),127.0.0.1表示redis服务所在的IP地址,6379表示redis服务所在的端口号。keys的第二个参数为一个插入迭代器,我们需要先创建一个存储结果的容器,再创建一个指向该容器的插入迭代器,将其作为keys的第二个参数,keys的返回结果将保存到之前创建的容器中。

凡事都是靠练习 2355

WSL2主力开发环境搭建:性能、Docker与文件系统避坑指南

WSL(Windows Subsystem for Linux)是微软推出的Linux兼容层,其WSL2版本通过轻量级虚拟机运行真实Linux内核,显著提升I/O性能与容器支持能力。其核心原理在于结合Hyper-V虚拟化、virtio-fs文件共享和独立网络栈,在Windows宿主上实现接近原生的Linux运行时体验。技术价值体现在开发效率跃升——如Docker构建提速至52秒、GPU加速支持、systemd全功能启用等。典型应用场景覆盖Node.js/Python全栈开发、云原生本地调试(Kubernet

weixin_30788239的博客 442

redis客户端redis-plus-plus

redis的客户端 redis官网,redis客户端 页中包括了各种语言的客户端,选择c++,官网截图如下: 参看介绍,redis-plus-plus 基于hiredis,使用c++11编写的,支持脚本 pub/sub 流水线 事务 redis集群,哨兵,连接池,ACL SSL以及线程安全,功能比较强大。 点击链接转到github,下载源码。 安装 下载源码后,查看README介绍如何安装 使用master分支,这是以及通过所有测试的分支。dev的分支是不稳定的。 安装hiredis 因为redis-pl

zishuijing_dd的博客 4910

2026年Windows开发笔记本选购指南:从入门到旗舰的工程实践考量

在软件开发与工程实践中,硬件选型是构建高效工作流的基础。其核心原理在于,硬件性能、驱动兼容性与系统稳定性共同决定了开发环境的可靠性与效率。对于开发者而言,一台合适的Windows笔记本不仅能提供强大的本地计算能力,还能通过良好的虚拟化支持(如WSL2、Docker)和广泛的硬件生态,无缝运行从后端服务到AI模型训练等多种任务。这带来了直接的技术价值:减少环境配置的折腾,提升持续集成与本地测试的速度,并保障复杂项目依赖的兼容性。应用场景覆盖了全栈开发、数据分析、机器学习以及跨平台应用部署。例如,在配置Pyth

chuozhi7142的博客 427

AI工程化实战:Claude Code与Harness AI驱动Java电商项目开发

AI辅助编程正从代码补全向工程化实践演进,其核心原理在于利用大语言模型理解自然语言需求并生成结构化代码,结合自动化平台实现软件交付全流程管理。这一技术组合的价值在于将开发者从重复的CRUD编码和繁琐的部署运维中解放,聚焦于核心业务逻辑与架构设计。在应用场景上,特别适合企业级应用开发、遗留系统功能迭代及团队标准化流程建设。本文以Spring Boot电商项目为例,详细展示了如何利用Claude Code进行数据库设计、业务代码生成与单元测试编写,并通过Harness AI配置从代码提交到自动化部署的CI/CD

weixin_33911824的博客 475

OpenClaw本地部署与阿里云集成实战指南

OpenClaw是一种面向开发者的AI编程协作者调度器,本质是统一编排多源AI能力的轻量级Orchestrator。其核心原理在于通过Skill插件机制解耦调用逻辑与模型执行,实现本地Ollama、千问大模型API、GLM-5.2 Coding Plan等异构AI服务的按需协同。技术价值体现在降低AI工程化门槛、提升代码生成可追溯性与可审计性,并支持企业级权限、缓存与审计能力。典型应用场景包括Swagger转TS接口、Figma稿转React组件、Jira Issue自动生成单元测试等结构化编码任务。本文聚

weixin_33847182的博客 369

计算机高手成长指南:从底层原理到实战项目的系统化学习路径

计算机科学的核心在于理解系统原理与工程实践的结合。从计算机组成原理、操作系统、计算机网络等基础理论出发,掌握程序运行的底层机制,是构建高性能、安全应用的基础。数据结构与算法作为程序的骨架,直接决定了代码效率与可维护性。在技术价值层面,扎实的底层知识能帮助开发者优化代码性能、理解并发问题,并为网络安全等专业领域打下根基。应用场景广泛覆盖Web开发、系统编程、数据分析及云计算等领域。本文聚焦于如何通过构建者思维、系统性学习路径(如Java Spring Boot技术栈)和项目驱动(如个人博客系统实战),将原理知

weixin_34167819的博客 529

通义灵码如何精准修复Java foreach等确定性语义Bug

代码Bug本质上是程序行为与设计契约之间的语义偏差。传统补全工具依赖词频统计,难以识别如ConcurrentModificationException这类运行时语义冲突;而现代AI辅助工具(如通义灵码)通过构建跨文件AST与调用链的语义拓扑图,结合静态约束锁、动态沙盒验证和人工决策锚点三重机制,实现对资源生命周期错配、API契约违反、配置-代码耦合断裂等可形式化验证Bug的高精度定位与安全修复。其核心价值不在于替代开发者,而在于将隐性工程经验转化为可嵌入IDE的实时校验能力,广泛适用于Java并发异常调试、

z466459262的专栏 706

基于Spring AI与Vue的智能报价系统:从自然语言到精准报价单

在数字化转型浪潮中,自动化与智能化是提升企业运营效率的关键。传统报价流程依赖人工在多个Excel表格间查询与计算,不仅效率低下且易出错。其核心原理在于将非结构化的自然语言需求,通过自然语言处理(NLP)技术转化为结构化数据,再结合业务规则引擎进行自动化匹配与计算。这一技术价值在于打通了从客户询价到生成报价单的端到端自动化链路,显著降低了人力成本与错误率。典型的应用场景包括企业销售、采购及客户服务中的快速报价响应。本文以构建一个智能AI报价工作台为例,详细阐述了如何利用Spring AI集成大模型进行需求解析

weixin_30706691的博客 316

校园点餐系统全栈开发实战:Spring Boot+Vue技术架构与核心功能实现

在Web应用开发领域,前后端分离架构已成为主流实践,它通过清晰的职责划分提升了开发效率和系统可维护性。其核心原理是将展示层与业务逻辑层解耦,前端负责用户交互与数据渲染,后端则以API形式提供数据与服务。这种模式的技术价值在于支持团队并行开发、便于独立部署与扩展,并能更好地适应多终端访问需求。在电商、社交、在线办公及校园服务等应用场景中,该架构被广泛采用。本文聚焦于校园点餐系统这一具体实现,深入剖析了如何利用Spring Boot和Vue.js等技术栈,构建一个包含用户管理、订单处理、库存控制与实时通知等核心

weixin_32642109的博客 250

Qoder实战指南:从零构建可部署业务系统的AI代码生成工具

在软件开发领域,代码生成技术通过将高级业务描述自动转换为可执行代码,显著提升了开发效率。其核心原理基于自然语言处理与模板化代码生成,能够理解结构化需求并输出完整的技术栈实现。这项技术的工程价值在于自动化处理标准化业务框架搭建,如用户权限管理、表单CRUD等重复性工作,从而让开发者更专注于核心业务逻辑与系统架构设计。典型应用场景包括中小企业内部工具开发、独立开发者承接外包项目以及快速原型验证。本文以Qoder为例,深入探讨如何利用这类工具将自然语言需求转化为包含前端、后端和数据库的完整可部署系统,并分享从环境

weixin_30617695的博客 407

Python-OpenCV及cv2,numpy库最新安装教程[最全步骤]

安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结 前言 首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信)) OpenCV-Python...

qq_45425286的博客 7432

OpenClaw+NIM+GLM-5/Kimi零成本AI工作流部署指南

AI中间件是连接大模型与业务场景的关键抽象层,其核心价值在于统一调度、协议兼容与低代码集成。OpenClaw作为轻量级模型无关抽象层(Model-Agnostic Abstraction Layer),通过标准化API调用和声明式配置,显著降低本地与云端模型协同门槛;NVIDIA NIM则提供符合OpenAI规范的免费推理服务,以40 RPM限流机制平衡能力开放与资源公平。二者结合,使GLM-5的强逻辑推理与Kimi K2.5的超长文本处理能力可被快速编排为合同审核、技术文档摘要、竞品分析等真实生产力工作流

weixin_33951761的博客 512

比Synergy更轻量!Barrier鼠标共享工具实测:5分钟实现Win/Mac/Linux三设备无缝切换

本文实测了开源免费的Barrier鼠标共享工具,详细指导用户如何在5分钟内于Windows、macOS和Linux三台设备间实现一套键鼠的无缝切换。文章对比了其与Synergy的优势,提供了分平台安装、核心服务端-客户端配置、防火墙设置等完整教程,并分享了解决连接问题的关键技巧,是提升多设备办公效率的实用指南。

weixin_29304021的博客 598

iOS面试题大全(附带答案)

C语言相关面试题 1.static有什么用途? 答案:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。 static 属于静态变量,使用它修饰的变量生命周期是整个源程序。 @1.在函数体内的 static 变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; @2.在模块内的 static 全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问; @3.在模块内的 static 函数只被这一模块内的其它函数调用,这个函数的使用范围被限

IOSNF的博客 2426

redis-plus-plus源码分析

redis++客户端源码解释参考

weixin_46451012的博客 968

stm32项目实战(1)光敏电阻的介绍和使用

文章目录前言一、光敏电阻介绍二、cubeMX配置三、代码说明总结 前言 本篇文章我们讲带大家了解光敏电阻的使用 一、光敏电阻介绍 下面是4线光敏电阻实物图 产品接线说明: 1、VCC 接电源正极 3.3-5V 2、GND 接电源负极 3、DO TTL 开关信号输出 (配置为输出模式) 4、AO 模拟信号输出(ADC采样通道) 光敏电阻主要用于检测周围的光照强度,光照强度发生变化那么ADC采样的值也会发送变化。 二、cubeMX配置 简单的配置我们就不多说了主要是ADC采样的配置 这里我采用的是ADC1通道

m0_49476241的博客 1万+

【Redis】Redis-plus-plus的安装与使用

前面学习的主要是各种 redis 的基本操作/命令. 都是在 redis 命令行客户端, 手动执行的.这种操作方式不是我们日常开发中主要的形式~~更多的时候, 是使用 redis 的 api , 来实现定制化的 redis 客户端程序, 进一步操作 redis 服务器.通过用程序来操作 redis ~~以前学习 MySQL 的时候~ 也会涉及到, 关于使用程序来操作 MySQL 服务器redis 提供的命令行客户端 / 第三方的图形化客户端 ,他们本质上都属于是 "通用的客户端程序"

2301_80224556的博客 1890

PostgreSQL 异常排查:读取流时发生异常 (x80004005)

通过以上步骤,您应该能够解决在 .NET Core 中与 PostgreSQL 数据库进行交互时出现异常 (x80004005) 的问题。确保数据库连接正确,查询语句准确,并使用兼容的驱动程序版本。如有必要,可以捕获异常并查看详细的错误信息,以便更好地排查问题。在使用 .NET Core 开发应用程序时,如果在与 PostgreSQL 数据库进行交互时遇到异常,例如在读取数据流时发生异常 (x80004005),我们需要进行排查和修复。另外,还可以尝试捕获异常并打印异常信息,以便更好地了解问题所在。

XwlyVue的博客 1623

10、使用Ray Serve实现微服务与模型部署

本文深入介绍了如何使用Ray Serve实现微服务与机器学习模型的高效部署。从基础的部署定义到复杂的模型服务场景,涵盖部署架构、HTTP与Python调用、资源配置、FastAPI集成、金丝雀发布策略及实际应用流程。文章还探讨了模型服务的关键需求如灵活性、批处理、硬件优化和可扩展性,并展示了Ray Serve如何满足这些要求。最后提供了常见问题解决方案与未来发展方向,帮助开发者构建高性能、易维护的模型服务平台。

blue42的博客 176

使用redis-plus-plus库连接redis

C++ 操作 redis 的库有很多. 此处使⽤ redis-plus-plus,因为这个库的功能强⼤, 使⽤简单

m0_72532428的博客 2256

Simulink开发项1000例实战专栏--实例161:基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 190

【Redis】安装 Redis-Plus-Plus(超详细过程)

安装 hiredis(Centos)C++ 操作 Redis 的库有很多,这里我选择使用 redis-plus-plus,这个库的功能强大,使用简单。

Elena's Blog 2600

Dify与第三方平台(飞书、微信、钉钉)LangBot机器人对接实战

调用链路:飞书用户发消息 → 飞书开放平台事件回调 → LangBot 服务 → Dify 应用接口 → Dify 知识库 + 大模型生成答案 → 原路返回飞书聊天框Dify:承载知识库、提示词配置、大模型调用能力;LangBot:多 IM 渠道适配器,统一对接各大 IM 开放平台与 Dify API;飞书开放平台:提供机器人消息收发、事件推送能力。LangBot 作为中间转发服务,一端对接 Dify 应用 API,一端对接飞书开放平台机器人接口;

悦分享 271

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Redis -- 安装客户端redis-plus-plus

如何安装redis客户端(Redis-plus-plus),以及要注意的问题

随便写点C++和JAVA的知识 2460

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: ElaWidgetTools——示例概述和用户卡片
下一篇: ElaWidgetTools——Page篇
出码弟子
博客等级 码龄5年 969粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值