学习笔记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 连接,并在需要时从池中获取或释放连接,从而提高资源利用率和减少连接创建和销毁的开销。

示例

cpp 复制代码
#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++ 示例

cpp 复制代码
#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++ 示例

cpp 复制代码
#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 类型的依赖,实现了依赖注入。

相关推荐
Charles Ray15 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码16 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦1 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1231 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
小安运维日记1 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
贾saisai3 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫3 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
烟雨666_java3 小时前
JDBC笔记
笔记
GEEKVIP3 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计