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

相关推荐
时光追逐者8 分钟前
MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
数据库·学习·mongodb
一弓虽14 分钟前
SpringBoot 学习
java·spring boot·后端·学习
头顶秃成一缕光31 分钟前
Redis的主从模式和哨兵模式
数据库·redis·缓存
观无1 小时前
Redis安装及入门应用
数据库·redis·缓存
晓数1 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
我的golang之路果然有问题2 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
genggeng不会代码2 小时前
用于协同显著目标检测的小组协作学习 2021 GCoNet(总结)
学习
lwewan2 小时前
26考研——存储系统(3)
c语言·笔记·考研
搞机小能手2 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
nongcunqq3 小时前
爬虫练习 js 逆向
笔记·爬虫