diff --git a/config/install/mailchimp.settings.yml b/config/install/mailchimp.settings.yml
index d80a7f8..4baaa86 100644
--- a/config/install/mailchimp.settings.yml
+++ b/config/install/mailchimp.settings.yml
@@ -3,3 +3,4 @@ cron: FALSE
 batch_limit: 100
 api_classname: 'Mailchimp\Mailchimp'
 test_mode: FALSE
+memberinfo_expire: -1
diff --git a/config/schema/mailchimp.schema.yml b/config/schema/mailchimp.schema.yml
index e091811..a3dd7fd 100644
--- a/config/schema/mailchimp.schema.yml
+++ b/config/schema/mailchimp.schema.yml
@@ -29,3 +29,6 @@ mailchimp.settings:
     connected_paths:
       type: string
       label: 'The ID of the Mailchimp connected site linked to this site.'
+    memberinfo_expire:
+      type: integer
+      label: 'Memberinfo expiry length (in seconds)'
diff --git a/mailchimp.module b/mailchimp.module
index 4a9a273..4ee6caa 100644
--- a/mailchimp.module
+++ b/mailchimp.module
@@ -291,6 +291,7 @@ function mailchimp_get_mergevars($list_ids, $reset = FALSE) {
  *   Member info object, empty if there is no valid info.
  */
 function mailchimp_get_memberinfo($list_id, $email, $reset = FALSE) {
+  $config = \Drupal::config('mailchimp.settings');
   $cache = \Drupal::cache('mailchimp');
 
   if (!$reset) {
@@ -301,6 +302,13 @@ function mailchimp_get_memberinfo($list_id, $email, $reset = FALSE) {
     }
   }
 
+  // Calculate the expiry time.
+  $memberinfo_expire = $config->get('memberinfo_expire');
+  if (!is_null($memberinfo_expire) && $memberinfo_expire != -1) {
+    $now = new DrupalDateTime("now + {$memberinfo_expire} seconds");
+    $memberinfo_expire = $now->getTimestamp();
+  }
+
   // Query lists from the MCAPI and store in cache:
   $memberinfo = new stdClass();
 
@@ -313,7 +321,7 @@ function mailchimp_get_memberinfo($list_id, $email, $reset = FALSE) {
     $result = $mc_lists->getMemberInfo($list_id, $email);
     if (!empty($result->id)) {
       $memberinfo = $result;
-      $cache->set($list_id . '-' . $email, $memberinfo);
+      $cache->set($list_id . '-' . $email, $memberinfo, $memberinfo_expire);
     }
   }
   catch (\Exception $e) {
@@ -321,7 +329,7 @@ function mailchimp_get_memberinfo($list_id, $email, $reset = FALSE) {
     // information for given email address. This is not an error and we can
     // cache this information.
     if ($e->getCode() == 404) {
-      $cache->set($list_id . '-' . $email, $memberinfo);
+      $cache->set($list_id . '-' . $email, $memberinfo, $memberinfo_expire);
     }
     else {
       \Drupal::logger('mailchimp')->error('An error occurred requesting memberinfo for {email} in list {list}. "{message}"', array(
diff --git a/src/Form/MailchimpAdminSettingsForm.php b/src/Form/MailchimpAdminSettingsForm.php
index 2b3cb72..40153aa 100644
--- a/src/Form/MailchimpAdminSettingsForm.php
+++ b/src/Form/MailchimpAdminSettingsForm.php
@@ -144,6 +144,35 @@ class MailchimpAdminSettingsForm extends ConfigFormBase {
       '#default_value' => $config->get('batch_limit'),
     );
 
+    $form['memberinfo_expire'] = [
+      '#type' => 'select',
+      '#options' => array(
+        '-1' => $this->t('Never'),
+        '300' => $this->t('5 minutes'),
+        '600' => $this->t('10 minutes'),
+        '900' => $this->t('15 minutes'),
+        '1800' => $this->t('30 minutes'),
+        '2700' => $this->t('45 minutes'),
+        '3600' => $this->t('1 hour'),
+        '7200' => $this->t('2 hours'),
+        '14400' => $this->t('4 hours'),
+        '21600' => $this->t('6 hours'),
+        '43200' => $this->t('12 hours'),
+        '86400' => $this->t('1 day'),
+        '172800' => $this->t('2 days'),
+        '259200' => $this->t('3 days'),
+        '345600' => $this->t('4 days'),
+        '1728000' => $this->t('5 days'),
+        '2073600' => $this->t('6 days'),
+        '2419200' => $this->t('1 week'),
+        '4838400' => $this->t('2 weeks'),
+        '9676800' => $this->t('4 weeks'),
+      ),
+      '#title' => t('Memberinfo Expire'),
+      '#description' => t('How long we should cache data from MailChimp about memberinfo.'),
+      '#default_value' => $config->get('memberinfo_expire'),
+    ];
+
     return parent::buildForm($form, $form_state);
   }
 
@@ -166,6 +195,7 @@ class MailchimpAdminSettingsForm extends ConfigFormBase {
       ->set('connected_paths', $form_state->getValue('connected_paths'))
       ->set('cron', $form_state->getValue('cron'))
       ->set('batch_limit', $form_state->getValue('batch_limit'))
+      ->set('memberinfo_expire', $form_state->getValue('memberinfo_expire'))
       ->save();
 
     parent::submitForm($form, $form_state);
