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

相关推荐
新时代苦力工21 分钟前
Redis 分布式Session
数据库·redis·分布式
所愿ღ27 分钟前
Vue框架进阶
前端·vue.js·笔记·前端框架
超人也会哭️呀38 分钟前
Redis(九):Redis高并发高可用(集群Cluster)
数据库·redis·wpf·redis cluster·redis 集群·redis 集群搭建
无妄之灾|1 小时前
BGP协议笔记
笔记·hcip
amazinging1 小时前
北京-4年功能测试2年空窗-报培训班学测开-第七十一天-面试第二天
python·学习·面试
0wioiw02 小时前
Redis(①-安装和基本使用教程)
数据库·redis·缓存
秋雨qy2 小时前
论文reading学习记录7 - daily - ViP3D
学习·3d
Li X2 小时前
USB2.0协议学习-基础知识
网络·学习
Code季风2 小时前
Redis 分布式锁深度解析:setnx 命令的核心作用与实现
redis·分布式·微服务
ZLRRLZ2 小时前
【数据结构】哈希扩展学习
数据结构·学习·哈希算法