acl/lib_acl_cpp/include/acl_cpp/redis/redis_server.hpp
2024-07-22 17:07:57 +08:00

219 lines
5.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "../acl_cpp_define.hpp"
#include <map>
#include "../stdlib/string.hpp"
#include "redis_command.hpp"
#if !defined(ACL_CLIENT_ONLY) && !defined(ACL_REDIS_DISABLE)
namespace acl {
class ACL_CPP_API redis_server : virtual public redis_command {
public:
/**
* see redis_command::redis_command()
*/
redis_server();
/**
* see redis_command::redis_command(redis_client*)
*/
redis_server(redis_client* conn);
/**
* see redis_command::redis_command(redis_client_cluster*)
*/
redis_server(redis_client_cluster* cluster);
ACL_CPP_DEPRECATED
redis_server(redis_client_cluster* cluster, size_t max_conns);
redis_server(redis_client_pipeline* pipeline);
virtual ~redis_server();
/////////////////////////////////////////////////////////////////////
/**
* 执行一个 AOF文件 重写操作。重写会创建一个当前 AOF 文件的体积优化版本;
* 即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在
* BGREWRITEAOF 成功之前不会被修改
* @return {bool}
*/
bool bgrewriteaof();
/**
* 在后台异步(Asynchronously)保存当前数据库的数据到磁盘BGSAVE 命令执行之后
* 立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)
* 继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出;客户端可以通过
* LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功
* @return {bool}
*/
bool bgsave();
/**
* 返回 CLIENT SETNAME 命令为连接设置的名字
* @param buf {string&} 存储结果,如果没有设置则为空
* @return {bool} 返回 false 则表明没有设置连接名字或出错
*/
bool client_getname(string& buf);
/**
* 关闭地址为 ip:port 的客户端
* @param addr {const char*} 客户端连接地址格式ip:port
* @return {bool} 是否成功,返回 false 表明连接不存在或出错
*/
bool client_kill(const char* addr);
/**
* 返回所有连接到服务器的客户端信息和统计数据
* @param buf {string&} 存储结果
* @return {int} 返回结果数据长度,-1 表示出错
*/
int client_list(string& buf);
/**
* 为当前连接分配一个名字,该名字会出现在 CLIENT LIST 命令的结果中;
* 在 Redis 应用程序发生连接泄漏时,为连接设置名字是一种很好的 debug 手段
* @param name {const char*} 连接名字,该名字不需要唯一性
* @return {bool} 操作是否成功
*/
bool client_setname(const char* name);
/**
* 命令用于取得运行中的 Redis 服务器的配置参数
* @param parameter {const char*} 配置参数名
* @param out {std::map<string, string>&} 存储结果,由 name-value 组成,
* 因为 parameter 支持模糊匹配,所以有可能返回的结果集中会有多个参数项
* @return {int} 结果 "参数-值" 的个数,-1 表示出错
*/
int config_get(const char* parameter, std::map<string, string>& out);
/**
* 重置 INFO 命令中的某些统计数据
* @return {bool} 重置是否成功
*/
bool config_resetstat();
/**
* 对启动 Redis 服务器时所指定的 redis.conf 文件进行改写
* @return {bool} 重写配置是否成功
*/
bool config_rewrite();
/**
* 动态地调整 Redis 服务器的配置而无需重启服务
* @param name {const char*} 配置参数名
* @param value {const char*} 配置参数值
* @return {bool} 是否成功
*/
bool config_set(const char* name, const char* value);
/**
* 返回当前数据库的 key 的数量
* @return {int} 返回 -1 表示出错
*/
int dbsize();
/**
* 清空整个 Redis 服务器的数据(删除所有数据库的所有 key )
* @return {bool}
* 注:此命令要慎用,以免造成误操作
*/
bool flushall();
/**
* 清空当前数据库中的所有 key
* @return {bool}
* 注:此命令要慎用,以免造成误操作
*/
bool flushdb();
/**
* 返回关于 Redis 服务器的各种信息和统计数值
* @param buf {string&} 存储结果
* @return {int} 返回所存储的数据长度
*/
int info(string& buf);
/**
* 返回关于 Redis 服务器的各种信息和统计数值
* @param out {std::map<string, string>&} 存储结果
* @return {int} 返回所存储的数据条目数量, -1 表示出错
*/
int info(std::map<string, string>& out);
/**
* 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示
* @return {time_t}
*/
time_t lastsave();
/**
* 实时打印出 Redis 服务器接收到的命令,调试用; 调用本命令后可以循环调用下面的
* get_command 方法获得服务器收到的命令
* @return {bool}
*/
bool monitor();
/**
* 调用 monitor 方法后需要调用本方法获得服务器收到的命令,可以循环调用本方法
* 以便于不断地获得服务器收到的命令
* @param buf {string&} 存储结果
* @return {bool}
*/
bool get_command(string& buf);
/**
* 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)
* 以 RDB 文件的形式保存到硬盘
* @return {bool}
*/
bool save();
/**
* 停止所有客户端连接将数据保存至磁盘后服务器程序退出
* @param save_data {bool} 是否在退出前保存数据至磁盘
*/
void shutdown(bool save_data = true);
/**
* 将当前服务器转变为指定服务器的从属服务器
* @param ip {const char*} 指定服务器的 IP
* @param port {int} 指定服务器的端口
* @return {bool} 是否成功
*/
bool slaveof(const char* ip, int port);
/**
* 查询较慢的操作日志
* @param number {int} 大于 0 时则限定日志条数,否则列出所有日志
* @return {const redis_result*}
*/
const redis_result* slowlog_get(int number = 0);
/**
* 可以查看当前日志的数量
* @return {int}
*/
int slowlog_len();
/**
* 可以清空 slow log
* @return {bool}
*/
bool slowlog_reset();
/**
* 返回当前服务器时间
* @param stamp {time_t&} 存储时间截(以 UNIX 时间戳格式表示)
* @param escape {int*} 存储当前这一秒钟已经逝去的微秒数
*/
bool get_time(time_t& stamp, int& escape);
};
} // namespace acl
#endif // !defined(ACL_CLIENT_ONLY) && !defined(ACL_REDIS_DISABLE)