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;
}
在这个示例中,preOperationHook
和 postOperationHook
是钩子函数,分别在操作执行前后被调用。
依赖注入
依赖注入是一种设计模式,用于将组件的依赖关系从组件本身中解耦出来,通常通过构造函数、方法或属性传递。
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
类型的依赖,实现了依赖注入。