protected override Message CreateMessage(long cursor)
 {
     if (CursorUtils.IsNil(pattern))
     {
         if (pageSize == CursorUtils.DefaultPageSize)
         {
             return(Message.Create(db, flags, RedisCommand.SCAN, cursor));
         }
         else
         {
             return(Message.Create(db, flags, RedisCommand.SCAN, cursor, RedisLiterals.COUNT, pageSize));
         }
     }
     else
     {
         if (pageSize == CursorUtils.DefaultPageSize)
         {
             return(Message.Create(db, flags, RedisCommand.SCAN, cursor, RedisLiterals.MATCH, pattern));
         }
         else
         {
             return(Message.Create(db, flags, RedisCommand.SCAN, cursor, RedisLiterals.MATCH, pattern, RedisLiterals.COUNT, pageSize));
         }
     }
 }
        public IEnumerable <RedisKey> Keys(int database = 0, RedisValue pattern = default(RedisValue), int pageSize = CursorUtils.DefaultPageSize, long cursor = CursorUtils.Origin, int pageOffset = 0, CommandFlags flags = CommandFlags.None)
        {
            if (pageSize <= 0)
            {
                throw new ArgumentOutOfRangeException("pageSize");
            }
            if (CursorUtils.IsNil(pattern))
            {
                pattern = RedisLiterals.Wildcard;
            }

            if (multiplexer.CommandMap.IsAvailable(RedisCommand.SCAN))
            {
                var features = server.GetFeatures();

                if (features.Scan)
                {
                    return(new KeysScanEnumerable(this, database, pattern, pageSize, cursor, pageOffset, flags));
                }
            }

            if (cursor != 0 || pageOffset != 0)
            {
                throw ExceptionFactory.NoCursor(RedisCommand.KEYS);
            }
            Message msg = Message.Create(database, flags, RedisCommand.KEYS, pattern);

            return(ExecuteSync(msg, ResultProcessor.RedisKeyArray));
        }