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

相关推荐
EterNity_TiMe_1 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
sanguine__5 分钟前
java学习-集合
学习
lxlyhwl5 分钟前
【STK学习】part2-星座-目标可见性与覆盖性分析
学习
nbsaas-boot6 分钟前
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
学习·chatgpt·编辑器
秋意钟6 分钟前
缓存雪崩、缓存穿透【Redis】
redis
dr李四维8 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
简 洁 冬冬19 分钟前
046 购物车
redis·购物车
CV学术叫叫兽1 小时前
一站式学习:害虫识别与分类图像分割
学习·分类·数据挖掘
soulteary1 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习