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

相关推荐
技术小齐3 分钟前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
竹言笙熙12 分钟前
代码审计初探
学习·web安全
日记成书14 分钟前
物联网智能项目
物联网·学习
虾球xz41 分钟前
游戏引擎学习第118天
学习·游戏引擎
gz927cool1 小时前
大模型做导师之开源项目学习(lightRAG)
学习·开源·mfc
电棍2332 小时前
verilog笔记
笔记·fpga开发
让我安静会2 小时前
Obsidian·Copilot 插件配置(让AI根据Obsidian笔记内容进行对话)
人工智能·笔记·copilot
世事如云有卷舒3 小时前
FreeRTOS学习笔记
笔记·学习
靡不有初1113 小时前
CCF-CSP第18次认证第一题——报数【两个与string相关的函数的使用】
c++·学习·ccfcsp
逻各斯4 小时前
redis中的Lua脚本,redis的事务机制
java·redis·lua