package com.sohu.cache.redis;
import com.sohu.cache.constant.RedisConstant;
import com.sohu.cache.entity.AppDesc;
import com.sohu.cache.entity.AppUser;
import com.sohu.cache.entity.InstanceInfo;
import com.sohu.cache.entity.InstanceSlotModel;
import com.sohu.cache.entity.InstanceSlowLog;
import com.sohu.cache.web.vo.RedisSlowLog;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* redis相关操作接口
* Created by yijunzhang on 14-6-10.
*/
public interface RedisCenter {
/**
* 部署redis数据收集任务(幂等操作)
*
* @param appId
* @param host
* @param port
* @return
*/
public boolean deployRedisCollection(long appId, String host, int port);
/**
* 取消部署redis收集任务
*
* @param appId
* @param host
* @param port
* @return
*/
public boolean unDeployRedisCollection(long appId, String host, int port);
/**
* 部署redis收集慢查询日志
*
* @param appId
* @param host
* @param port
* @return
*/
public boolean deployRedisSlowLogCollection(long appId, String host, int port);
/**
* 取消部署redis收集慢查询日志
*
* @param appId
* @param host
* @param port
* @return
*/
public boolean unDeployRedisSlowLogCollection(long appId, String host, int port);
/**
* 收集redis统计信息
*
* @param appId
* @param host
* @param port
* @return
*/
public Map<RedisConstant, Map<String, Object>> collectRedisInfo(long appId, long collectTime, String host,
int port);
/**
* 收集redis统计信息
*
* @param host
* @param port
* @return
*/
public Map<RedisConstant, Map<String, Object>> getInfoStats(long appId, String host, int port);
/**
* 根据ip和port判断redis实例当前是主还是从
*
* @param ip ip
* @param port port
* @return 主返回true,从返回false;
*/
public Boolean isMaster(long appId, String ip, int port);
/**
* 获取从节点的主节点地址
*
* @param ip
* @param port
* @param password
* @return
*/
public HostAndPort getMaster(String ip, int port, String password);
/**
* 判断实例是否运行
*
* @param appId
* @param ip
* @param port
* @return
*/
public boolean isRun(final long appId, String ip, int port);
/**
* 判断实例是否运行
*
* @param ip
* @param port
* @return
*/
public boolean isRun(String ip, int port);
/**
* 判断实例是否运行
*
* @param ip
* @param port
* @param password
* @return
*/
public boolean isRun(String ip, int port, String redisPassword);
/**
* 下线指定实例
*
* @param appId
* @param ip
* @param port
* @return
*/
public boolean shutdown(String ip, int port);
/**
* 下线指定实例
*
* @param appId
* @param ip
* @param port
* @return
*/
public boolean shutdown(long appId, String ip, int port);
/**
* 执行redis命令返回结果
*
* @param appDesc
* @param command
* @return
*/
public String executeCommand(AppDesc appDesc, String command);
/**
* 实例执行redis命令
*
* @param appId
* @param host
* @param port
* @param command
* @return
*/
public String executeCommand(long appId, String host, int port, String command);
/**
* 获取jedisSentinelPool实例,必须是sentinel类型应用
*
* @param appDesc
* @return
*/
public JedisSentinelPool getJedisSentinelPool(AppDesc appDesc);
/**
* 获取redis实例配置信息
*
* @param instanceId
* @return
*/
public Map<String, String> getRedisConfigList(int instanceId);
/**
* 获取redis实例慢查询
*
* @param instanceId
* @return
*/
public List<RedisSlowLog> getRedisSlowLogs(int instanceId, int maxCount);
/**
* 获取client连接信息
*
* @param instanceId
* @return
*/
public List<String> getClientList(int instanceId);
/**
* 配置重写
*
* @return
*/
public boolean configRewrite(final long appId, final String host, final int port);
/**
* 获取maxmemory配置
*
* @param appId
* @param host
* @param port
* @return
*/
public Long getRedisMaxMemory(long appId, String host, int port);
/**
* 清理app数据
*
* @param appDesc
* @param appUser
* @return
*/
public boolean cleanAppData(AppDesc appDesc, AppUser appUser);
/**
* 判断是否为孤立节点
* @param appId
* @param host
* @param port
* @return
*/
public boolean isSingleClusterNode(long appId, String host, int port);
/**
* 获取集群中失联的slots
* @param appId
* @return
*/
public Map<String,String> getClusterLossSlots(long appId);
/**
* 获取集群中失联的slots
* @param appId
* @param host
* @param port
* @return
*/
public List<Integer> getClusterLossSlots(long appId, String host, int port);
/**
* 获取集群中失联的slots
* @param appId
* @param healthyHost
* @param healthyPort
* @param lossSlotsHost
* @param lossSlotsPort
* @return
*/
public List<Integer> getInstanceSlots(long appId, String healthyHost, int healthyPort, String lossSlotsHost, int lossSlotsPort);
/**
* 从一个应用中获取一个健康的实例
* @param appId
* @return
*/
public InstanceInfo getHealthyInstanceInfo(long appId);
/**
* 收集redis慢查询日志
*
* @param appId
* @param host
* @param port
* @return
*/
public List<InstanceSlowLog> collectRedisSlowLog(long appId, long collectTime, String host,
int port);
/**
* 按照appid获取慢查询日志
* @param appId
* @return
*/
public List<InstanceSlowLog> getInstanceSlowLogByAppId(long appId);
/**
* 按照appid获取慢查询日志
* @param appId
* @param startDate
* @param endDate
* @return
*/
public List<InstanceSlowLog> getInstanceSlowLogByAppId(long appId, Date startDate, Date endDate);
/**
* 按照appid获取慢查询日志数关系
* @param appId
* @param startDate
* @param endDate
* @return
*/
public Map<String, Long> getInstanceSlowLogCountMapByAppId(Long appId, Date startDate, Date endDate);
/**
* 获取集群的slots分布
* @param appId
* @return
*/
Map<String, InstanceSlotModel> getClusterSlotsMap(long appId);
/**
* 获取Redis版本
* @param appId
* @param ip
* @param port
* @return
*/
public String getRedisVersion(long appId, String ip, int port);
/**
* 获取nodeId
* @param appId
* @param ip
* @param port
* @return
*/
public String getNodeId(long appId, String ip, int port);
Jedis getJedis(String host, int port, String password);
Jedis getJedis(String host, int port);
Jedis getJedis(long appId, String host, int port);
Jedis getJedis(long appId, String host, int port, int connectionTimeout, int soTimeout);
}