您的位置:首页 > 汽车 > 新车 > 学习笔记14:CNAME 记录值、TTL (Time to Live)、Redis 的 Pool 对象池、钩子函数、依赖注入

学习笔记14:CNAME 记录值、TTL (Time to Live)、Redis 的 Pool 对象池、钩子函数、依赖注入

2024/10/20 8:18:17 来源:https://blog.csdn.net/qq_29111047/article/details/140673985  浏览:    关键词:学习笔记14:CNAME 记录值、TTL (Time to Live)、Redis 的 Pool 对象池、钩子函数、依赖注入

CNAME 记录值

CNAME 记录是一种DNS记录类型,它将一个域名映射到另一个域名。这通常用于将一个子域名指向另一个域名,或者将一个域名指向一个不同的顶级域。

  • 用途:用于域名别名,负载均衡,或者在更换域名时保持服务的连续性。
  • 格式example.com. IN CNAME www.example.com.

TTL (Time to Live)

TTL 是DNS记录中的一个参数,表示记录在DNS服务器上缓存的时间。TTL 值越长,记录在缓存中存储的时间越长,减少了对DNS服务器的查询次数,但同时更新记录时的延迟也会更长。

  • 格式:通常以秒为单位,例如 TTL 3600 表示记录在DNS服务器上缓存1小时。

Redis 的 Pool 对象池

Redis Pool 是一种用于管理 Redis 连接的机制。通过对象池,可以预先创建一定数量的 Redis 连接,并在需要时从池中获取或释放连接,从而提高资源利用率和减少连接创建和销毁的开销。

示例

#include <iostream>
#include <hiredis/hiredis.h>class RedisPool {
private:std::vector<redisContext*> pool;int size;int max_size;public:RedisPool(int size, int max_size) : size(size), max_size(max_size) {for (int i = 0; i < size; ++i) {redisContext* context = redisConnect("127.0.0.1", 6379);if (context != nullptr && context->err) {std::cerr << "Error: " << context->errstr << std::endl;redisFree(context);} else {pool.push_back(context);}}}~RedisPool() {for (auto& context : pool) {redisFree(context);}}redisContext* getConn() {if (pool.empty()) {return nullptr;}redisContext* context = pool.back();pool.pop_back();return context;}void releaseConn(redisContext* context) {if (pool.size() < max_size) {pool.push_back(context);} else {redisFree(context);}}
};int main() {RedisPool pool(10, 20); // 初始化一个包含10个连接的池,最大20个连接redisContext* conn = pool.getConn();if (conn) {// 使用连接进行操作redisReply* reply = (redisReply*)redisCommand(conn, "SET key value");if (reply) {std::cout << "Set operation successful" << std::endl;freeReplyObject(reply);}pool.releaseConn(conn); // 操作完成后释放连接}return 0;
}

在这个示例中,我们创建了一个 Redis 连接池,初始包含10个连接,最大可以扩展到20个连接。

钩子函数

钩子函数是一种在特定事件发生时自动调用的函数。它们通常用于调试、监控、事件处理等场景。

C++ 示例

#include <iostream>void preOperationHook() {std::cout << "Pre-operation hook triggered." << std::endl;
}void postOperationHook() {std::cout << "Post-operation hook triggered." << std::endl;
}void performOperation() {preOperationHook();std::cout << "Performing operation..." << std::endl;postOperationHook();
}int main() {performOperation();return 0;
}

在这个示例中,preOperationHookpostOperationHook 是钩子函数,分别在操作执行前后被调用。

依赖注入

依赖注入是一种设计模式,用于将组件的依赖关系从组件本身中解耦出来,通常通过构造函数、方法或属性传递。

C++ 示例

#include <iostream>class Service {
public:void performTask() {std::cout << "Service task performed." << std::endl;}
};class Client {
private:Service* service;public:Client(Service* service) : service(service) {}void execute() {service->performTask();}
};int main() {Service service;Client client(&service);client.execute();return 0;
}

在这个示例中,Client 类通过构造函数接收一个 Service 类型的依赖,实现了依赖注入。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com