using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange;
using StackExchange.Redis;

namespace RedisStuy
{
    /// <summary>
    /// 全局操作命令学习
    /// https://stackexchange.github.io/StackExchange.Redis/
    /// </summary>
    public class RedisServerStudy:IDisposable
    {
        private IServer redisServer;

        public RedisServerStudy()
        {
            redisServer = RedisHelper.GetDefaultRedisServer();
        }

        public void Dispose()
        {
            
        }

        /// <summary>
        /// 服务器信息
        /// </summary>
        /// <returns>服务器信息</returns>
        public IGrouping<string,KeyValuePair<string,string>>[] RedisInfo()
        {
            var info = redisServer.Info();

            return info;
        }

        /// <summary>
        /// 服务器版本号
        /// </summary>
        public Version RedisVersion()
        {
            var redisVersion = redisServer.Version;
            return redisVersion;
        }

        /// <summary>
        /// 关闭服务器
        /// </summary>
        public bool RedisShutdown()
        {
            bool commandResult = false;

            try
            {
                redisServer.Shutdown(ShutdownMode.Default, CommandFlags.None);
                commandResult = true;
            }
            catch
            {
                commandResult = false;
            }

            return commandResult;
        }

        /// <summary>
        /// Ping命令
        /// (连通测试)
        /// </summary>
        public TimeSpan RedisPing()
        {
            var timespan = redisServer.Ping(CommandFlags.None);
            return timespan;
        }

        /// <summary>
        /// 配置管理
        /// </summary>
        public KeyValuePair<string,string>[] RedisConfig()
        {
            return redisServer.ConfigGet();
        }

        /// <summary>
        /// Echo
        /// </summary>
        public RedisValue RedisClient(RedisValue message)
        {
            return redisServer.Echo(message);
        }

        /// <summary>
        /// 当前选定数据库中keys的大小
        /// </summary>
        public long RedisDatabaseSize(int databaseIndex=0)
        {
            return redisServer.DatabaseSize(databaseIndex);
        }

        public long RedisS()
        {
            return 0L;
        }
    }
}