在构建高性能应用的世界里,Redis 闪电般的内存数据结构与 C++ 的原生性能相结合,无疑是一剂成功的良方。Redis,常被称为'数据结构服务器',提供了多种功能强大的工具,其中最基础也最核心的之一便是列表(List)。这种有序的字符串集合是实现队列、栈、活动流、消息推送等众多功能的基石。
为了在 C++ 和 Redis 之间架起一座坚实的桥梁,一个健壮的客户端库至关重要。在这方面,redis-plus-plus 以其现代、类型安全和直观的设计脱颖而出。作为一个现代 C++11/14/17 客户端,它将 Redis 命令与开发者熟悉的 C++ 范式(如迭代器、optional 和 chrono 字面量)无缝集成。
本篇深度指南将引导您逐步探索 Redis 列表的核心命令,并通过由 redis-plus-plus 驱动的实用 C++ 代码示例进行实践。我们将详细剖析每一个操作,理解其行为,并领略该库所倡导的优雅设计模式。
第一章:填充列表 —— '推入'的艺术
向 Redis 列表中添加元素的主要方式是通过'推入'(push)操作。你可以选择将元素添加到列表的头部(左侧)或尾部(右侧),这种设计直接赋予了列表实现栈(后进先出,LIFO)和队列(先进先出,FIFO)的能力。
lpush:向列表头部(左侧)推入
LPUSH 命令用于将一个或多个元素添加到列表的起始位置。如果列表键不存在,Redis 会在执行操作前自动创建一个空列表。这个过程可以想象成堆叠盘子:每一个新盘子总是放在最上面。
让我们通过一段代码来分析 redis-plus-plus 是如何以多种方式调用 lpush 的。
#include <iostream>
#include <vector>
#include <string>
#include <iterator> // 使用 std::back_inserter 需要的头文件
#include <sw/redis++/redis++.h>
// 辅助函数,用于打印容器内容
void PrintContainer(const std::vector<std::string>& container) {
for (const auto& item : container) {
std::cout << item << " ";
}
std::cout << std::endl;
}
void test1(sw::redis::Redis& redis) {
std::cout << "--- 测试 lpush 和 lrange ---" << std::endl;
redis.();
redis.(, );
redis.(, {, , });
std::vector<std::string> values = {, , };
redis.(, values.(), values.());
std::vector<std::string> results;
it = std::(results);
redis.(, , , it);
std::cout << ;
(results);
}


