当前位置: 首页 > news >正文

学习笔记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 类型的依赖,实现了依赖注入。

http://www.lryc.cn/news/408980.html

相关文章:

  • springboot集成mybatis时,dao层的mapper类需要添加@Repository注解吗?
  • 一文总结代理:代理模式、代理服务器
  • 探索 Kubernetes 持久化存储之 Longhorn 初窥门径
  • 全国区块链职业技能大赛样题第9套智能合约+数据库表设计
  • 常见OVS网桥及其链接接口详解
  • 创建最最最纯净 Windows 11/10 系统镜像!| 全网独一份
  • 带你学会Git必会操作
  • clickhouse处理readonly报错
  • 使用git命令行的方式,将本地项目上传到远程仓库
  • jetbrains InterlliJ IDEA 2024.1 版本最新特性一览: Java 相关内容
  • 百日筑基第三十四天-JAVA中的强/软/弱/虚引用
  • C语言100基础拔高题(3)
  • AV1技术学习:Constrained Directional Enhancement Filter
  • C++的STL简介(一)
  • DNS劫持
  • Centos7解决网关ens33的静态地址配置
  • python中常用于构建cnn的库有哪些
  • 【前端 17】使用Axios发送异步请求
  • Unity Android接入SDK 遇到的问题
  • 基于深度学习的复杂策略学习
  • 【Golang 面试 - 进阶题】每日 3 题(一)
  • 周报 Week 3:
  • 开源消息队列比较
  • 【前端逆向】最佳JS反编译利器,原来就是chrome!
  • 微信小程序根据动态权限展示tabbar
  • 开源安全信息和事件管理(SIEM)平台OSSIM
  • 【DP】01背包
  • 50、PHP 实现选择排序
  • 17.延迟队列
  • KCache-go本地缓存,支持本地缓存过期、缓存过期自维护机制。