diff --git a/composer.json b/composer.json
index f0c2e8f09dfbb9918a9783c09f14d801ba5e9840..97c8aa6d698460d4a3c36e205cd4ccbf8e1c73d2 100644
--- a/composer.json
+++ b/composer.json
@@ -148,7 +148,6 @@
         "drupal/recaptcha": "3.0",
         "drupal/recaptcha_v3": "^1.4",
         "drupal/redirect": "1.6",
-        "drupal/redis": "1.0",
         "drupal/roleassign": "1.0.0-beta1",
         "drupal/scheduler": "1.3",
         "drupal/search_api": "1.19",
diff --git a/composer.lock b/composer.lock
index 4f10bb902dfac7520856ca3d04ee0baad8aff1f6..8c56468a3d229e92ed52dc7cda106128c1731dfb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "34e3620260d4aa3a5e6a3c897b83f077",
+    "content-hash": "57672c9e8b696e724095b806e2f77021",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -6673,62 +6673,6 @@
                 "source": "https://git.drupalcode.org/project/redirect"
             }
         },
-        {
-            "name": "drupal/redis",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupalcode.org/project/redis.git",
-                "reference": "8.x-1.0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/redis-8.x-1.0.zip",
-                "reference": "8.x-1.0",
-                "shasum": "98cf460db5c9aaacf3d5c02ac51e0c9e8e85edbb"
-            },
-            "require": {
-                "drupal/core": "~8.0"
-            },
-            "suggest": {
-                "predis/predis": "^1.1.1"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "drupal": {
-                    "version": "8.x-1.0",
-                    "datestamp": "1541600580",
-                    "security-coverage": {
-                        "status": "covered",
-                        "message": "Covered by Drupal's security advisory policy"
-                    }
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Drupal\\redis\\": "src"
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Berdir",
-                    "homepage": "https://www.drupal.org/user/214652"
-                },
-                {
-                    "name": "pounard",
-                    "homepage": "https://www.drupal.org/user/240164"
-                }
-            ],
-            "description": "Provide a module placeholder, for using as dependency for module that needs Redis.",
-            "homepage": "https://www.drupal.org/project/redis",
-            "support": {
-                "source": "https://git.drupalcode.org/project/redis"
-            }
-        },
         {
             "name": "drupal/roleassign",
             "version": "1.0.0-beta1",
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
index c0b84bc572a8b42c5779a7caf1db3c8cc53dea47..17e2162afed14560c5ce505052a68615faf8e6b9 100644
--- a/vendor/composer/InstalledVersions.php
+++ b/vendor/composer/InstalledVersions.php
@@ -20,6 +20,8 @@
 
 
 
+
+
 class InstalledVersions
 {
 private static $installed = array (
@@ -30,7 +32,7 @@ class InstalledVersions
     'aliases' => 
     array (
     ),
-    'reference' => 'fd722e09f7d9335f684ac25ea358ef50741d799c',
+    'reference' => '0f8a8ac02e1ff090c2405d8b83248b5f4f75856b',
     'name' => 'osu-asc-webservices/d8-upstream',
   ),
   'versions' => 
@@ -1594,15 +1596,6 @@ class InstalledVersions
       ),
       'reference' => '8.x-1.6',
     ),
-    'drupal/redis' => 
-    array (
-      'pretty_version' => '1.0.0',
-      'version' => '1.0.0.0',
-      'aliases' => 
-      array (
-      ),
-      'reference' => '8.x-1.0',
-    ),
     'drupal/responsive_image' => 
     array (
       'replaced' => 
@@ -2269,7 +2262,7 @@ class InstalledVersions
       'aliases' => 
       array (
       ),
-      'reference' => 'fd722e09f7d9335f684ac25ea358ef50741d799c',
+      'reference' => '0f8a8ac02e1ff090c2405d8b83248b5f4f75856b',
     ),
     'pantheon-systems/quicksilver-pushback' => 
     array (
@@ -3125,7 +3118,6 @@ public static function getInstalledPackages()
 $packages[] = array_keys($installed['versions']);
 }
 
-
 if (1 === \count($packages)) {
 return $packages[0];
 }
@@ -3321,6 +3313,7 @@ public static function reload($data)
 
 
 
+
 private static function getInstalled()
 {
 if (null === self::$canGetVendors) {
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index e14700a4294302c82f732e44b516d1bc5c31f2d8..be43a76dc9e15e3a66d2db916be8f5ca096fbe14 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -2909,32 +2909,6 @@
     'Drupal\\Core\\Validation\\Plugin\\Validation\\Constraint\\UniqueFieldValueValidator' => $baseDir . '/web/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/UniqueFieldValueValidator.php',
     'Drupal\\Core\\Validation\\Plugin\\Validation\\Constraint\\UuidConstraint' => $baseDir . '/web/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/UuidConstraint.php',
     'Drupal\\Core\\Validation\\TranslatorInterface' => $baseDir . '/web/core/lib/Drupal/Core/Validation/TranslatorInterface.php',
-    'Drupal\\redis\\Cache\\CacheBackendFactory' => $baseDir . '/web/modules/redis/src/Cache/CacheBackendFactory.php',
-    'Drupal\\redis\\Cache\\CacheBase' => $baseDir . '/web/modules/redis/src/Cache/CacheBase.php',
-    'Drupal\\redis\\Cache\\PhpRedis' => $baseDir . '/web/modules/redis/src/Cache/PhpRedis.php',
-    'Drupal\\redis\\Cache\\Predis' => $baseDir . '/web/modules/redis/src/Cache/Predis.php',
-    'Drupal\\redis\\Cache\\RedisCacheTagsChecksum' => $baseDir . '/web/modules/redis/src/Cache/RedisCacheTagsChecksum.php',
-    'Drupal\\redis\\ClientFactory' => $baseDir . '/web/modules/redis/src/ClientFactory.php',
-    'Drupal\\redis\\ClientInterface' => $baseDir . '/web/modules/redis/src/ClientInterface.php',
-    'Drupal\\redis\\Client\\PhpRedis' => $baseDir . '/web/modules/redis/src/Client/PhpRedis.php',
-    'Drupal\\redis\\Client\\Predis' => $baseDir . '/web/modules/redis/src/Client/Predis.php',
-    'Drupal\\redis\\Flood\\FloodFactory' => $baseDir . '/web/modules/redis/src/Flood/FloodFactory.php',
-    'Drupal\\redis\\Flood\\PhpRedis' => $baseDir . '/web/modules/redis/src/Flood/PhpRedis.php',
-    'Drupal\\redis\\Flood\\Predis' => $baseDir . '/web/modules/redis/src/Flood/Predis.php',
-    'Drupal\\redis\\Lock\\LockFactory' => $baseDir . '/web/modules/redis/src/Lock/LockFactory.php',
-    'Drupal\\redis\\Lock\\PhpRedis' => $baseDir . '/web/modules/redis/src/Lock/PhpRedis.php',
-    'Drupal\\redis\\Lock\\Predis' => $baseDir . '/web/modules/redis/src/Lock/Predis.php',
-    'Drupal\\redis\\PersistentLock\\PhpRedis' => $baseDir . '/web/modules/redis/src/PersistentLock/PhpRedis.php',
-    'Drupal\\redis\\PersistentLock\\Predis' => $baseDir . '/web/modules/redis/src/PersistentLock/Predis.php',
-    'Drupal\\redis\\Queue\\PhpRedis' => $baseDir . '/web/modules/redis/src/Queue/PhpRedis.php',
-    'Drupal\\redis\\Queue\\Predis' => $baseDir . '/web/modules/redis/src/Queue/Predis.php',
-    'Drupal\\redis\\Queue\\QueueBase' => $baseDir . '/web/modules/redis/src/Queue/QueueBase.php',
-    'Drupal\\redis\\Queue\\QueueRedisFactory' => $baseDir . '/web/modules/redis/src/Queue/QueueRedisFactory.php',
-    'Drupal\\redis\\Queue\\ReliablePhpRedis' => $baseDir . '/web/modules/redis/src/Queue/ReliablePhpRedis.php',
-    'Drupal\\redis\\Queue\\ReliablePredis' => $baseDir . '/web/modules/redis/src/Queue/ReliablePredis.php',
-    'Drupal\\redis\\Queue\\ReliableQueueBase' => $baseDir . '/web/modules/redis/src/Queue/ReliableQueueBase.php',
-    'Drupal\\redis\\Queue\\ReliableQueueRedisFactory' => $baseDir . '/web/modules/redis/src/Queue/ReliableQueueRedisFactory.php',
-    'Drupal\\redis\\RedisPrefixTrait' => $baseDir . '/web/modules/redis/src/RedisPrefixTrait.php',
     'Drush\\Application' => $vendorDir . '/drush/drush/src/Application.php',
     'Drush\\Backend\\BackendPathEvaluator' => $vendorDir . '/drush/drush/src/Backend/BackendPathEvaluator.php',
     'Drush\\Boot\\AutoloaderAwareInterface' => $vendorDir . '/drush/drush/src/Boot/AutoloaderAwareInterface.php',
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 03750cd806ef8fdc1cc7611a73024cdc906ca837..22c46907f79be287f855f621149744b1e8863549 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -102,7 +102,6 @@
     'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'),
     'Drush\\Internal\\' => array($vendorDir . '/drush/drush/src/internal-forks'),
     'Drush\\' => array($vendorDir . '/drush/drush/src'),
-    'Drupal\\redis\\' => array($baseDir . '/web/modules/redis/src'),
     'Drupal\\Driver\\' => array($baseDir . '/web/drivers/lib/Drupal/Driver'),
     'Drupal\\Core\\' => array($baseDir . '/web/core/lib/Drupal/Core'),
     'Drupal\\Console\\Core\\' => array($vendorDir . '/drupal/console-core/src'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 7ea61a481d0362d24785128d9cd4e79e52c97376..af0e2856f299f178d951d37519fc3f7b0a9e12bf 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -181,7 +181,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             'Drush\\Internal\\' => 15,
             'Drush\\' => 6,
-            'Drupal\\redis\\' => 13,
             'Drupal\\Driver\\' => 14,
             'Drupal\\Core\\' => 12,
             'Drupal\\Console\\Core\\' => 20,
@@ -604,10 +603,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/drush/drush/src',
         ),
-        'Drupal\\redis\\' => 
-        array (
-            0 => __DIR__ . '/../..' . '/web/modules/redis/src',
-        ),
         'Drupal\\Driver\\' => 
         array (
             0 => __DIR__ . '/../..' . '/web/drivers/lib/Drupal/Driver',
@@ -3687,32 +3682,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Core\\Validation\\Plugin\\Validation\\Constraint\\UniqueFieldValueValidator' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/UniqueFieldValueValidator.php',
         'Drupal\\Core\\Validation\\Plugin\\Validation\\Constraint\\UuidConstraint' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/UuidConstraint.php',
         'Drupal\\Core\\Validation\\TranslatorInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Validation/TranslatorInterface.php',
-        'Drupal\\redis\\Cache\\CacheBackendFactory' => __DIR__ . '/../..' . '/web/modules/redis/src/Cache/CacheBackendFactory.php',
-        'Drupal\\redis\\Cache\\CacheBase' => __DIR__ . '/../..' . '/web/modules/redis/src/Cache/CacheBase.php',
-        'Drupal\\redis\\Cache\\PhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/Cache/PhpRedis.php',
-        'Drupal\\redis\\Cache\\Predis' => __DIR__ . '/../..' . '/web/modules/redis/src/Cache/Predis.php',
-        'Drupal\\redis\\Cache\\RedisCacheTagsChecksum' => __DIR__ . '/../..' . '/web/modules/redis/src/Cache/RedisCacheTagsChecksum.php',
-        'Drupal\\redis\\ClientFactory' => __DIR__ . '/../..' . '/web/modules/redis/src/ClientFactory.php',
-        'Drupal\\redis\\ClientInterface' => __DIR__ . '/../..' . '/web/modules/redis/src/ClientInterface.php',
-        'Drupal\\redis\\Client\\PhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/Client/PhpRedis.php',
-        'Drupal\\redis\\Client\\Predis' => __DIR__ . '/../..' . '/web/modules/redis/src/Client/Predis.php',
-        'Drupal\\redis\\Flood\\FloodFactory' => __DIR__ . '/../..' . '/web/modules/redis/src/Flood/FloodFactory.php',
-        'Drupal\\redis\\Flood\\PhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/Flood/PhpRedis.php',
-        'Drupal\\redis\\Flood\\Predis' => __DIR__ . '/../..' . '/web/modules/redis/src/Flood/Predis.php',
-        'Drupal\\redis\\Lock\\LockFactory' => __DIR__ . '/../..' . '/web/modules/redis/src/Lock/LockFactory.php',
-        'Drupal\\redis\\Lock\\PhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/Lock/PhpRedis.php',
-        'Drupal\\redis\\Lock\\Predis' => __DIR__ . '/../..' . '/web/modules/redis/src/Lock/Predis.php',
-        'Drupal\\redis\\PersistentLock\\PhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/PersistentLock/PhpRedis.php',
-        'Drupal\\redis\\PersistentLock\\Predis' => __DIR__ . '/../..' . '/web/modules/redis/src/PersistentLock/Predis.php',
-        'Drupal\\redis\\Queue\\PhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/PhpRedis.php',
-        'Drupal\\redis\\Queue\\Predis' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/Predis.php',
-        'Drupal\\redis\\Queue\\QueueBase' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/QueueBase.php',
-        'Drupal\\redis\\Queue\\QueueRedisFactory' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/QueueRedisFactory.php',
-        'Drupal\\redis\\Queue\\ReliablePhpRedis' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/ReliablePhpRedis.php',
-        'Drupal\\redis\\Queue\\ReliablePredis' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/ReliablePredis.php',
-        'Drupal\\redis\\Queue\\ReliableQueueBase' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/ReliableQueueBase.php',
-        'Drupal\\redis\\Queue\\ReliableQueueRedisFactory' => __DIR__ . '/../..' . '/web/modules/redis/src/Queue/ReliableQueueRedisFactory.php',
-        'Drupal\\redis\\RedisPrefixTrait' => __DIR__ . '/../..' . '/web/modules/redis/src/RedisPrefixTrait.php',
         'Drush\\Application' => __DIR__ . '/..' . '/drush/drush/src/Application.php',
         'Drush\\Backend\\BackendPathEvaluator' => __DIR__ . '/..' . '/drush/drush/src/Backend/BackendPathEvaluator.php',
         'Drush\\Boot\\AutoloaderAwareInterface' => __DIR__ . '/..' . '/drush/drush/src/Boot/AutoloaderAwareInterface.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 8b48633c32e2dce9323eacfc5a81d5b72e0dcf0e..b15055f50a27c47d987d5b01b5c8a38ab479dd46 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -6884,68 +6884,6 @@
             },
             "install-path": "../../web/modules/redirect"
         },
-        {
-            "name": "drupal/redis",
-            "version": "1.0.0",
-            "version_normalized": "1.0.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupalcode.org/project/redis.git",
-                "reference": "8.x-1.0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/redis-8.x-1.0.zip",
-                "reference": "8.x-1.0",
-                "shasum": "98cf460db5c9aaacf3d5c02ac51e0c9e8e85edbb"
-            },
-            "require": {
-                "drupal/core": "~8.0"
-            },
-            "suggest": {
-                "predis/predis": "^1.1.1"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.0",
-                    "datestamp": "1527699484",
-                    "security-coverage": {
-                        "status": "covered",
-                        "message": "Covered by Drupal's security advisory policy"
-                    }
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Drupal\\redis\\": "src"
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Berdir",
-                    "homepage": "https://www.drupal.org/user/214652"
-                },
-                {
-                    "name": "pounard",
-                    "homepage": "https://www.drupal.org/user/240164"
-                }
-            ],
-            "description": "Provide a module placeholder, for using as dependency for module that needs Redis.",
-            "homepage": "https://www.drupal.org/project/redis",
-            "support": {
-                "source": "http://cgit.drupalcode.org/redis"
-            },
-            "install-path": "../../web/modules/redis"
-        },
         {
             "name": "drupal/roleassign",
             "version": "1.0.0-beta1",
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 0e3d10123924ec0a35d5685e3d59db525abef569..447187c225e90628dc08014de6f557344ecf0f38 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -6,7 +6,7 @@
     'aliases' => 
     array (
     ),
-    'reference' => 'fd722e09f7d9335f684ac25ea358ef50741d799c',
+    'reference' => '0f8a8ac02e1ff090c2405d8b83248b5f4f75856b',
     'name' => 'osu-asc-webservices/d8-upstream',
   ),
   'versions' => 
@@ -1570,15 +1570,6 @@
       ),
       'reference' => '8.x-1.6',
     ),
-    'drupal/redis' => 
-    array (
-      'pretty_version' => '1.0.0',
-      'version' => '1.0.0.0',
-      'aliases' => 
-      array (
-      ),
-      'reference' => '8.x-1.0',
-    ),
     'drupal/responsive_image' => 
     array (
       'replaced' => 
@@ -2245,7 +2236,7 @@
       'aliases' => 
       array (
       ),
-      'reference' => 'fd722e09f7d9335f684ac25ea358ef50741d799c',
+      'reference' => '0f8a8ac02e1ff090c2405d8b83248b5f4f75856b',
     ),
     'pantheon-systems/quicksilver-pushback' => 
     array (
diff --git a/web/modules/redis/.gitignore b/web/modules/redis/.gitignore
deleted file mode 100644
index a48738a762840f167570b58001f8505883a061e5..0000000000000000000000000000000000000000
--- a/web/modules/redis/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-predis
diff --git a/web/modules/redis/.travis-before-script.sh b/web/modules/redis/.travis-before-script.sh
deleted file mode 100644
index 94f0b72c8e803c12e41c49a0e934fdbdd76ef367..0000000000000000000000000000000000000000
--- a/web/modules/redis/.travis-before-script.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-
-set -e $DRUPAL_TI_DEBUG
-
-# Ensure the right Drupal version is installed.
-# Note: This function is re-entrant.
-drupal_ti_ensure_drupal
-
-# Add needed dependencies.
-cd "$DRUPAL_TI_DRUPAL_DIR"
-
-# Download predis
-composer require predis/predis
-
-
-# These variables come from environments/drupal-*.sh
-mkdir -p "$DRUPAL_TI_MODULES_PATH"
-cd "$DRUPAL_TI_MODULES_PATH"
-
-#Enable php-redis
-echo "extension = redis.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
\ No newline at end of file
diff --git a/web/modules/redis/.travis.yml b/web/modules/redis/.travis.yml
deleted file mode 100644
index 400d14326b983ce0bbaffa1f92f2fb6224940136..0000000000000000000000000000000000000000
--- a/web/modules/redis/.travis.yml
+++ /dev/null
@@ -1,116 +0,0 @@
-# @file
-# .travis.yml - Drupal for Travis CI Integration
-#
-# Template provided by https://github.com/LionsAd/drupal_ti.
-#
-# Based for simpletest upon:
-#   https://github.com/sonnym/travis-ci-drupal-module-example
-
-language: php
-
-php:
-  - 5.5
-  - 5.6
-  - 7
-
-matrix:
-  fast_finish: true
-
-env:
-  global:
-    # add composer's global bin directory to the path
-    # see: https://github.com/drush-ops/drush#install---composer
-    - PATH="$PATH:$HOME/.composer/vendor/bin"
-
-    # Configuration variables.
-    - DRUPAL_TI_MODULE_NAME="redis"
-    - DRUPAL_TI_SIMPLETEST_GROUP="redis"
-
-    # Define runners and environment vars to include before and after the
-    # main runners / environment vars.
-    #- DRUPAL_TI_SCRIPT_DIR_BEFORE="./.drupal_ti/before"
-    #- DRUPAL_TI_SCRIPT_DIR_AFTER="./drupal_ti/after"
-
-    # The environment to use, supported are: drupal-7, drupal-8
-    - DRUPAL_TI_ENVIRONMENT="drupal-8"
-
-    # Drupal specific variables.
-    - DRUPAL_TI_DB="drupal_travis_db"
-    - DRUPAL_TI_DB_URL="mysql://root:@127.0.0.1/drupal_travis_db"
-    # Note: Do not add a trailing slash here.
-    - DRUPAL_TI_WEBSERVER_URL="http://127.0.0.1"
-    - DRUPAL_TI_WEBSERVER_PORT="8080"
-
-    # Simpletest specific commandline arguments, the DRUPAL_TI_SIMPLETEST_GROUP is appended at the end.
-    - DRUPAL_TI_SIMPLETEST_ARGS="--verbose --color --concurrency 4 --url $DRUPAL_TI_WEBSERVER_URL:$DRUPAL_TI_WEBSERVER_PORT"
-
-    # === Behat specific variables.
-    # This is relative to $TRAVIS_BUILD_DIR
-    - DRUPAL_TI_BEHAT_DIR="./tests/behat"
-    # These arguments are passed to the bin/behat command.
-    - DRUPAL_TI_BEHAT_ARGS=""
-    # Specify the filename of the behat.yml with the $DRUPAL_TI_DRUPAL_DIR variables.
-    - DRUPAL_TI_BEHAT_YML="behat.yml.dist"
-    # This is used to setup Xvfb.
-    - DRUPAL_TI_BEHAT_SCREENSIZE_COLOR="1280x1024x16"
-    # The version of seleniumthat should be used.
-    - DRUPAL_TI_BEHAT_SELENIUM_VERSION="2.44"
-    # Set DRUPAL_TI_BEHAT_DRIVER to "selenium" to use "firefox" or "chrome" here.
-    - DRUPAL_TI_BEHAT_DRIVER="phantomjs"
-    - DRUPAL_TI_BEHAT_BROWSER="firefox"
-
-    # Use Drupal 8.3.x to run tests.
-    - DRUPAL_TI_CORE_BRANCH="8.5.x"
-
-    # PHPUnit specific commandline arguments.
-    - DRUPAL_TI_PHPUNIT_ARGS="--verbose --debug"
-    # Specifying the phpunit-core src/ directory is useful when e.g. a vendor/
-    # directory is present in the module directory, which phpunit would then
-    # try to find tests in. This option is relative to $TRAVIS_BUILD_DIR.
-    #- DRUPAL_TI_PHPUNIT_CORE_SRC_DIRECTORY="./tests/src"
-
-    # Code coverage via coveralls.io
-    - DRUPAL_TI_COVERAGE="satooshi/php-coveralls:0.6.*"
-    # This needs to match your .coveralls.yml file.
-    - DRUPAL_TI_COVERAGE_FILE="build/logs/clover.xml"
-
-    # Debug options
-    #- DRUPAL_TI_DEBUG="-x -v"
-    # Set to "all" to output all files, set to e.g. "xvfb selenium" or "selenium",
-    # etc. to only output those channels.
-    #- DRUPAL_TI_DEBUG_FILE_OUTPUT="selenium xvfb webserver"
-
-    # [[[ SELECT ANY OR MORE OPTIONS ]]]
-    #- DRUPAL_TI_RUNNERS="phpunit"
-    #- DRUPAL_TI_RUNNERS="simpletest"
-    #- DRUPAL_TI_RUNNERS="behat"
-    - DRUPAL_TI_RUNNERS="phpunit-core"
-  matrix:
-    - REDIS_INTERFACE=PhpRedis
-    - REDIS_INTERFACE=Predis
-
-# This will create the database
-mysql:
-  database: drupal_travis_db
-  username: root
-  encoding: utf8
-
-services:
-  - redis-server
-
-before_install:
-  - composer global require "lionsad/drupal_ti:dev-master#396d11d200005eb68491d24170da0a98ae7f51b3"
-  - drupal-ti before_install
-
-install:
-  - drupal-ti install
-
-before_script:
-  - drupal-ti --include .travis-before-script.sh
-  - drupal-ti before_script
-
-script:
-  - drupal-ti script
-
-after_script:
-  - drupal-ti after_script
diff --git a/web/modules/redis/LICENSE.txt b/web/modules/redis/LICENSE.txt
deleted file mode 100644
index d159169d1050894d3ea3b98e1c965c4058208fe1..0000000000000000000000000000000000000000
--- a/web/modules/redis/LICENSE.txt
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/web/modules/redis/README.PhpRedis.txt b/web/modules/redis/README.PhpRedis.txt
deleted file mode 100644
index 178458c4b52e848449140db47e50c785fda6bb87..0000000000000000000000000000000000000000
--- a/web/modules/redis/README.PhpRedis.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-PhpRedis cache backend
-======================
-
-This client, for now, is only able to use the PhpRedis extension.
-
-Get PhpRedis
-------------
-
-You can download this library at:
-
-  https://github.com/nicolasff/phpredis
-
-This is PHP extension, too recent for being packaged in most distribution, you
-will probably need to compile it yourself.
-
-Default behavior is to connect via tcp://localhost:6379 but you might want to
-connect differently.
-
-Use the Sentinel high availability mode
----------------------------------------
-
-Redis can provide a master/slave mode with sentinels server monitoring them.
-More information about setting it : https://redis.io/topics/sentinel.
-
-This mode needs the following settings:
-
-Modify the host as follow:
-    // Sentinels instances list with hostname:port format.
-    $settings['redis.connection']['host']      = ['1.2.3.4:5000','1.2.3.5:5000','1.2.3.6:5000'];
-
-Add the new instance setting:
-
-    // Redis instance name.
-    $settings['redis.connection']['instance']  = 'instance_name';
-
-Connect via UNIX socket
------------------------
-
-Just add this line to your settings.php file:
-
-  $conf['redis_cache_socket'] = '/tmp/redis.sock';
-
-Don't forget to change the path depending on your operating system and Redis
-server configuration.
-
-Connect to a remote host and database
--------------------------------------
-
-See README.md file.
-
-For this particular implementation, host settings are overridden by the
-UNIX socket parameter.
diff --git a/web/modules/redis/README.Predis.txt b/web/modules/redis/README.Predis.txt
deleted file mode 100644
index 09bbbcefb85ac2cd06f93d4b8856ba0be91feb9d..0000000000000000000000000000000000000000
--- a/web/modules/redis/README.Predis.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-Predis cache backend
-====================
-
-Using Predis for the Drupal 8 version of this module is still experimental.
-
-Get Predis
-----------
-
-Predis can be installed to the vendor directory using composer like so:
-
-composer require nrk/predis
-
-
-Configuration of module for use with Predis
-----------------------------
-
-There is not much different to configure about Predis.
-Adding this to settings.php should suffice for basic usage:
-
-$settings['redis.connection']['interface'] = 'Predis';
-$settings['redis.connection']['host']      = '1.2.3.4';  // Your Redis instance hostname.
-$settings['cache']['default'] = 'cache.backend.redis';
-
-To add more magic with a primary/replica setup you can use a config like this:
-
-$settings['redis.connection']['interface'] = 'Predis'; // Use predis library.
-$settings['redis.connection']['replication'] = TRUE; // Turns on replication.
-$settings['redis.connection']['replication.host'][1]['host'] = '1.2.3.4';  // Your Redis instance hostname.
-$settings['redis.connection']['replication.host'][1]['port'] = '6379'; // Only required if using non-standard port.
-$settings['redis.connection']['replication.host'][1]['role'] = 'primary'; // The redis instance role.
-$settings['redis.connection']['replication.host'][2]['host'] = '1.2.3.5';
-$settings['redis.connection']['replication.host'][2]['port'] = '6379';
-$settings['redis.connection']['replication.host'][2]['role'] = 'replica';
-$settings['redis.connection']['replication.host'][3]['host'] = '1.2.3.6';
-$settings['redis.connection']['replication.host'][3]['port'] = '6379';
-$settings['redis.connection']['replication.host'][3]['role'] = 'replica';
-$settings['cache']['default'] = 'cache.backend.redis';
\ No newline at end of file
diff --git a/web/modules/redis/README.md b/web/modules/redis/README.md
deleted file mode 100644
index 1648bb0db0b1deae494656584bd16a8288d0b635..0000000000000000000000000000000000000000
--- a/web/modules/redis/README.md
+++ /dev/null
@@ -1,338 +0,0 @@
-Redis backends
-====================
-
-This package provides two different Redis backends. If you want to use
-Redis as cache backend, you have to choose one of the two, but you cannot use
-both at the same time.
-
-PhpRedis
---------
-
-This implementation uses the PhpRedis PHP extension. In order to use it, you
-will need to compile the extension yourself.
-
-Predis
-------
-
-Support for the Predis PHP library is experimental, but feel free to try it out. 
-You can install the required library using composer. Check out the README.Predis.txt file 
-for more information.
-
-Important notice
-----------------
-
-This module requires at least Redis 2.4, additionally, the lock backend
-requires Redis 2.6 to support millisecond timeouts and atomic lock operations.
-
-Getting started
-===============
-
-Quick setup
------------
-
-Here is a simple yet working easy way to setup the module.
-
-This method will allow Drupal to use Redis for all caches.
-
-    $settings['redis.connection']['interface'] = 'PhpRedis'; // Can be "Predis".
-    $settings['redis.connection']['host']      = '1.2.3.4';  // Your Redis instance hostname.
-    $settings['cache']['default'] = 'cache.backend.redis';
-
-To use some Predis goodness, including a redis primary/replica setup you can use a config like this.
-
-    $settings['redis.connection']['interface'] = 'Predis'; // Use predis library.
-    $settings['redis.connection']['replication'] = TRUE; // Turns on replication.
-    $settings['redis.connection']['replication.host'][1]['host'] = '1.2.3.4';  // Your Redis instance hostname.
-    $settings['redis.connection']['replication.host'][1]['port'] = '6379'; // Only required if using non-standard port.
-    $settings['redis.connection']['replication.host'][1]['role'] = 'primary'; // The redis instance role.
-    $settings['redis.connection']['replication.host'][2]['host'] = '1.2.3.5';
-    $settings['redis.connection']['replication.host'][2]['port'] = '6379';
-    $settings['redis.connection']['replication.host'][2]['role'] = 'replica';
-    $settings['redis.connection']['replication.host'][3]['host'] = '1.2.3.6';
-    $settings['redis.connection']['replication.host'][3]['port'] = '6379';
-    $settings['redis.connection']['replication.host'][3]['role'] = 'replica';
-    $settings['cache']['default'] = 'cache.backend.redis';
-
-Either include the default example.services.yml from the module, which will
-replace all supported backend services (that currently includes the cache tags
-checksum service and the lock backends, check the file for the current list)
-or copy the service definitions into a site specific services.yml.
-
-    $settings['container_yamls'][] = 'modules/redis/example.services.yml';
-
-Note that for any of this, the redis module must be enabled. See next chapters
-for more information.
-
-Is there any cache bins that should *never* go into Redis?
-----------------------------------------------------------
-
-TL;DR: No.
-
-Redis has been maturing a lot over time, and will apply different sensible
-settings for different bins; It's today very stable.
-
-Advanced configuration
-======================
-
-Choose the Redis client library to use
---------------------------------------
-
-Note: This is not yet supported, only the PhpRedis interface is available.
-
-Add into your settings.php file:
-
-    $settings['redis.connection']['interface'] = 'PhpRedis';
-
-You can replace 'PhpRedis' with 'Predis', depending on the library you chose. 
-
-
-Tell Drupal to use the cache backend
-------------------------------------
-
-Usual cache backend configuration, as follows, to add into your settings.php
-file like any other backend:
-
-    # Use for all bins otherwise specified.
-    $settings['cache']['default'] = 'cache.backend.redis';
-  
-    # Use this to only use it for specific cache bins.
-    $settings['cache']['bins']['render'] = 'cache.backend.redis';
-
-Tell Drupal to use the lock backend
------------------------------------
-
-See the provided example.services.yml file on how to override the lock services.
-
-Tell Drupal to use the queue backend
-------------------------------------
-
-This module provides reliable and non-reliable queue implementations. Depending
-on which is to be use you need to choose "queue.redis" or "queue.redis_reliable"
-as a service name.
-
-When you have configured basic information (host, library, ... - see Quick setup)
-add this to your settings.php file:
-
-    # Use for all queues unless otherwise specified for a specific queue.
-    $settings['queue_default'] = 'queue.redis';
-
-    # Or if you want to use reliable queue implementation.
-    $settings['queue_default'] = 'queue.redis_reliable';
-
-
-    # Use this to only use Redis for a specific queue (aggregator_feeds in this case).
-    $settings['queue_service_aggregator_feeds'] = 'queue.redis';
-
-    # Or if you want to use reliable queue implementation.
-    $settings['queue_service_aggregator_feeds'] = 'queue.redis_reliable';
-
-
-Common settings
-===============
-
-Connect to a remote host
-------------------------
-
-If your Redis instance is remote, you can use this syntax:
-
-    $settings['redis.connection']['interface'] = 'PhpRedis'; // Can be "Predis".
-    $settings['redis.connection']['host']      = '1.2.3.4';  // Your Redis instance hostname.
-    $settings['redis.connection']['port']      = '6379';  // Redis port
-
-Port is optional, default is 6379 (default Redis port).
-
-Using a specific database
--------------------------
-
-Per default, Redis ships the database "0". All default connections will be use
-this one if nothing is specified.
-
-Depending on you OS or OS distribution, you might have numerous database. To
-use one in particular, just add to your settings.php file:
-
-    $settings['redis.connection']['base']      = 12;
-
-Connection to a password protected instance
--------------------------------------------
-
-If you are using a password protected instance, specify the password this way:
-
-    $settings['redis.connection']['password'] = "mypassword";
-
-Depending on the backend, using a wrong auth will behave differently:
-
- - Predis will throw an exception and make Drupal fail during early boostrap.
-
- - PhpRedis will make Redis calls silent and creates some PHP warnings, thus
-   Drupal will behave as if it was running with a null cache backend (no cache
-   at all).
-
-Prefixing site cache entries (avoiding sites name collision)
-------------------------------------------------------------
-
-If you need to differentiate multiple sites using the same Redis instance and
-database, you will need to specify a prefix for your site cache entries.
-
-Cache prefix configuration attempts to use a unified variable across contrib
-backends that support this feature. This variable name is 'cache_prefix'.
-
-This variable is polymorphic, the simplest version is to provide a raw string
-that will be the default prefix for all cache bins:
-
-    $settings['cache_prefix'] = 'mysite_';
-
-Alternatively, to provide the same functionality, you can provide the variable
-as an array:
-
-    $settings['cache_prefix']['default'] = 'mysite_';
-
-This allows you to provide different prefix depending on the bin name. Common
-usage is that each key inside the 'cache_prefix' array is a bin name, the value
-the associated prefix. If the value is FALSE, then no prefix is
-used for this bin.
-
-The 'default' meta bin name is provided to define the default prefix for non
-specified bins. It behaves like the other names, which means that an explicit
-FALSE will order the backend not to provide any prefix for any non specified
-bin.
-
-Here is a complex sample:
-
-    // Default behavior for all bins, prefix is 'mysite_'.
-    $settings['cache_prefix']['default'] = 'mysite_';
-  
-    // Set no prefix explicitely for 'cache' and 'cache_bootstrap' bins.
-    $settings['cache_prefix']['cache'] = FALSE;
-    $settings['cache_prefix']['cache_bootstrap'] = FALSE;
-  
-    // Set another prefix for 'cache_menu' bin.
-    $settings['cache_prefix']['cache_menu'] = 'menumysite_';
-
-Note that if you don't specify the default behavior, the Redis module will
-attempt to use the HTTP_HOST variable in order to provide a multisite safe
-default behavior. Notice that this is not failsafe, in such environment you
-are strongly advised to set at least an explicit default prefix.
-
-Note that this last notice is Redis only specific, because per default Redis
-server will not namespace data, thus sharing an instance for multiple sites
-will create conflicts. This is not true for every contributed backends.
-
-Flush mode
-----------
-
-@todo: Update for Drupal 8
-
-Redis allows to set a time-to-live at the key level, which frees us from
-handling the garbage collection at clear() calls; Unfortunately Drupal never
-explicitely clears single cached pages or blocks. If you didn't configure the
-"cache_lifetime" core variable, its value is "0" which means that temporary
-items never expire: in this specific case, we need to adopt a different
-behavior than leting Redis handling the TTL by itself; This is why we have
-three different implementations of the flush algorithm you can use:
-
- * 0: Never flush temporary: leave Redis handling the TTL; This mode is
-   not compatible for the "page" and "block" bins but is the default for
-   all others.
-
- * 1: Keep a copy of temporary items identifiers in a SET and flush them
-   accordingly to spec (DatabaseCache default backend mimic behavior):
-   this is the default for "page" and "block" bin if you don't change the
-   configuration.
-
- * 2: Flush everything including permanent or valid items on clear() calls:
-   this behavior mimics the pre-1.0 releases of this module. Use it only
-   if you experience backward compatibility problems on a production
-   environement - at the cost of potential performance issues; All other
-   users should ignore this parameter.
-
-You can configure a default flush mode which will override the sensible
-provided defaults by setting the 'redis_flush_mode' variable.
-
-  // For example this is the safer mode.
-  $conf['redis_flush_mode'] = 1;
-
-But you may also want to change the behavior for only a few bins.
-
-  // This will put mode 0 on "bootstrap" bin.
-  $conf['redis_flush_mode_cache_bootstrap'] = 0;
-
-  // And mode 2 to "page" bin.
-  $conf['redis_flush_mode_cache_page'] = 2;
-
-Note that you must prefix your bins with "cache" as the Drupal 7 bin naming
-convention requires it.
-
-Keep in mind that defaults will provide the best balance between performance
-and safety for most sites; Non advanced users should ever change them.
-
-Default lifetime for permanent items
-------------------------------------
-
-@todo: Update for Drupal 8
-
-Redis when reaching its maximum memory limit will stop writing data in its
-storage engine: this is a feature that avoid the Redis server crashing when
-there is no memory left on the machine.
-
-As a workaround, Redis can be configured as a LRU cache for both volatile or
-permanent items, which means it can behave like Memcache; Problem is that if
-you use Redis as a permanent storage for other business matters than this
-module you cannot possibly configure it to drop permanent items or you'll
-loose data.
-
-This workaround allows you to explicity set a very long or configured default
-lifetime for CACHE_PERMANENT items (that would normally be permanent) which
-will mark them as being volatile in Redis storage engine: this then allows you
-to configure a LRU behavior for volatile keys without engaging the permenent
-business stuff in a dangerous LRU mechanism; Cache items even if permament will
-be dropped when unused using this.
-
-Per default the TTL for permanent items will set to safe-enough value which is
-one year; No matter how Redis will be configured default configuration or lazy
-admin will inherit from a safe module behavior with zero-conf.
-
-For advanturous people, you can manage the TTL on a per bin basis and change
-the default one:
-
-    // Make CACHE_PERMANENT items being permanent once again
-    // 0 is a special value usable for all bins to explicitely tell the
-    // cache items will not be volatile in Redis.
-    $conf['redis_perm_ttl'] = 0;
-
-    // Make them being volatile with a default lifetime of 1 year.
-    $conf['redis_perm_ttl'] = "1 year";
-
-    // You can override on a per-bin basis;
-    // For example make cached field values live only 3 monthes:
-    $conf['redis_perm_ttl_cache_field'] = "3 months";
-
-    // But you can also put a timestamp in there; In this case the
-    // value must be a STRICTLY TYPED integer:
-    $conf['redis_perm_ttl_cache_field'] = 2592000; // 30 days.
-
-Time interval string will be parsed using DateInterval::createFromDateString
-please refer to its documentation:
-
-    http://www.php.net/manual/en/dateinterval.createfromdatestring.php
-
-Last but not least please be aware that this setting affects the
-CACHE_PERMANENT ONLY; All other use cases (CACHE_TEMPORARY or user set TTL
-on single cache entries) will continue to behave as documented in Drupal core
-cache backend documentation.
-
-Lock backends
--------------
-
-@todo: Update for Drupal 8
-
-Both implementations provides a Redis lock backend. Redis lock backend proved to
-be faster than the default SQL based one when using both servers on the same box.
-
-Both backends, thanks to the Redis WATCH, MULTI and EXEC commands provides a
-real race condition free mutexes if you use Redis >= 2.1.0.
-
-Testing
-=======
-
-I did not find any hint about making tests being configurable, so per default
-the tested Redis server must always be on localhost with default configuration.
diff --git a/web/modules/redis/composer.json b/web/modules/redis/composer.json
deleted file mode 100644
index ff18a35a011411a0288e26972a0dbf7813f9c636..0000000000000000000000000000000000000000
--- a/web/modules/redis/composer.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "name": "drupal/redis",
-  "type": "drupal-module",
-  "suggest": {
-    "predis/predis": "^1.1.1"
-  },
-  "license": "GPL-2.0",
-  "autoload": {
-    "psr-4": {
-      "Drupal\\redis\\": "src"
-    }
-  }
-}
diff --git a/web/modules/redis/example.services.yml b/web/modules/redis/example.services.yml
deleted file mode 100644
index 74a05f66efc6dd38c403d522e1126ee4da1ca3e0..0000000000000000000000000000000000000000
--- a/web/modules/redis/example.services.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# This file contains example services overrides.
-#
-# Enable with this line in settings.php
-#   $settings['container_yamls'][] = 'modules/redis/example.services.yml';
-#
-# Or copy & paste the desired services into sites/default/services.yml.
-#
-# Note that the redis module must be enabled for this to work.
-
-services:
-  # Cache tag checksum backend. Used by redis and most other cache backend
-  # to deal with cache tag invalidations.
-  cache_tags.invalidator.checksum:
-   class: Drupal\redis\Cache\RedisCacheTagsChecksum
-   arguments: ['@redis.factory']
-   tags:
-     - { name: cache_tags_invalidator }
-
-  # Replaces the default lock backend with a redis implementation.
-  lock:
-    class: Drupal\Core\Lock\LockBackendInterface
-    factory: ['@redis.lock.factory', get]
-
-  # Replaces the default persistent lock backend with a redis implementation.
-  lock.persistent:
-    class: Drupal\Core\Lock\LockBackendInterface
-    factory: ['@redis.lock.factory', get]
-    arguments: [true]
-
-  # Replaces the default flood backend with a redis implementation.
-  flood:
-    class: Drupal\Core\Flood\FloodInterface
-    factory: ['@redis.flood.factory', get]
diff --git a/web/modules/redis/redis.info.yml b/web/modules/redis/redis.info.yml
deleted file mode 100644
index 06a5bbcb67e04e43c7e325b53621ef3d26a816a4..0000000000000000000000000000000000000000
--- a/web/modules/redis/redis.info.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: Redis
-description: Provide a module placeholder, for using as dependency for module that needs Redis.
-package: Performance
-type: module
-# core: 8.x
-configure: redis.admin_display
-
-# Information added by Drupal.org packaging script on 2018-05-30
-version: '8.x-1.0'
-core: '8.x'
-project: 'redis'
-datestamp: 1527699489
diff --git a/web/modules/redis/redis.install b/web/modules/redis/redis.install
deleted file mode 100644
index 3730606bff35d347292dc1330b7cac319c5a544f..0000000000000000000000000000000000000000
--- a/web/modules/redis/redis.install
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/**
- * @file
- * Redis install related functions.
- */
-
-use \Drupal\redis\ClientFactory;
-
-/**
- * Implements hook_requirements().
- */
-function redis_requirements($phase) {
-
-  // This module is configured via settings.php file. Using any other phase
-  // than runtime to proceed to some consistency checks is useless.
-  if ('runtime' !== $phase) {
-    return [];
-  }
-
-  $requirements = [];
-
-  if (ClientFactory::hasClient()) {
-    $requirements['redis'] = [
-      'title'       => "Redis",
-      'value'       => t("Connected, using the <em>@name</em> client.", ['@name' => ClientFactory::getClientName()]),
-      'severity'    => REQUIREMENT_OK,
-    ];
-  }
-  else {
-    $requirements['redis'] = [
-      'title'       => "Redis",
-      'value'       => t("Not connected."),
-      'severity'    => REQUIREMENT_WARNING,
-      'description' => t("No Redis client connected, this module is useless thereof. Ensure that you enabled module using it or disable it."),
-    ];
-  }
-
-  return $requirements;
-}
diff --git a/web/modules/redis/redis.module b/web/modules/redis/redis.module
deleted file mode 100644
index a4d7db8e51b2e13fbe5a3b742697dddfecd7eaf1..0000000000000000000000000000000000000000
--- a/web/modules/redis/redis.module
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/**
- * @file
- * Redis module.
- *
- * This file is a placeholder for other modules that need the Redis client for
- * something else than lock and cache.
- */
-
-use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\redis\ClientFactory;
-
-/**
- * Implements hook_help().
- */
-function redis_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.redis':
-      if (ClientFactory::hasClient()) {
-        $messages = '<p><strong>' . t("Current connected client uses the <em>@name</em> library.", ['@name' => ClientFactory::getClientName()]) . '</strong></p>';
-      }
-      else {
-        $messages = '<p><strong>' . t('No redis connection configured.') . '</strong></p>';
-      }
-      return $messages;
-  }
-}
diff --git a/web/modules/redis/redis.services.yml b/web/modules/redis/redis.services.yml
deleted file mode 100644
index c7308ab720b62f8b8270b801fbc308e236af5436..0000000000000000000000000000000000000000
--- a/web/modules/redis/redis.services.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-services:
-  cache.backend.redis:
-    class: Drupal\redis\Cache\CacheBackendFactory
-    arguments: ['@redis.factory', '@cache_tags.invalidator.checksum', '@serialization.phpserialize']
-  redis.factory:
-    class: Drupal\redis\ClientFactory
-  redis.lock.factory:
-    class: Drupal\redis\Lock\LockFactory
-    arguments: ['@redis.factory']
-  redis.flood.factory:
-    class: Drupal\redis\Flood\FloodFactory
-    arguments: ['@redis.factory', '@request_stack']
-  queue.redis_reliable:
-    class: Drupal\redis\Queue\ReliableQueueRedisFactory
-    arguments: ['@redis.factory', '@settings']
-  queue.redis:
-    class: Drupal\redis\Queue\QueueRedisFactory
-    arguments: ['@redis.factory', '@settings']
diff --git a/web/modules/redis/src/Cache/CacheBackendFactory.php b/web/modules/redis/src/Cache/CacheBackendFactory.php
deleted file mode 100644
index 4efa1c650dae79d70a115ad07ad313a51e42a66e..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Cache/CacheBackendFactory.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace Drupal\redis\Cache;
-
-use Drupal\Component\Serialization\SerializationInterface;
-use Drupal\Core\Cache\CacheFactoryInterface;
-use Drupal\Core\Cache\CacheTagsChecksumInterface;
-use Drupal\redis\ClientFactory;
-
-/**
- * A cache backend factory responsible for the construction of redis cache bins.
- */
-class CacheBackendFactory implements CacheFactoryInterface {
-
-  /**
-   * @var \Drupal\redis\ClientInterface
-   */
-  protected $clientFactory;
-
-  /**
-   * The cache tags checksum provider.
-   *
-   * @var \Drupal\Core\Cache\CacheTagsChecksumInterface
-   */
-  protected $checksumProvider;
-
-  /**
-   * The serialization class to use.
-   *
-   * @var \Drupal\Component\Serialization\SerializationInterface
-   */
-  protected $serializer;
-
-  /**
-   * List of cache bins.
-   *
-   * Renderer and possibly other places fetch backends directly from the
-   * factory. Avoid that the backend objects have to fetch meta information like
-   * the last delete all timestamp multiple times.
-   *
-   * @var array
-   */
-  protected $bins = [];
-
-  /**
-   * Creates a redis CacheBackendFactory.
-   *
-   * @param \Drupal\redis\ClientFactory $client_factory
-   * @param \Drupal\Core\Cache\CacheTagsChecksumInterface $checksum_provider
-   * @param \Drupal\redis\Cache\SerializationInterface $serializer
-   *   The serialization class to use.
-   */
-  public function __construct(ClientFactory $client_factory, CacheTagsChecksumInterface $checksum_provider, SerializationInterface $serializer) {
-    $this->clientFactory = $client_factory;
-    $this->checksumProvider = $checksum_provider;
-    $this->serializer = $serializer;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function get($bin) {
-    if (!isset($this->bins[$bin])) {
-      $class_name = $this->clientFactory->getClass(ClientFactory::REDIS_IMPL_CACHE);
-      $this->bins[$bin] = new $class_name($bin, $this->clientFactory->getClient(), $this->checksumProvider, $this->serializer);
-    }
-    return $this->bins[$bin];
-  }
-
-}
diff --git a/web/modules/redis/src/Cache/CacheBase.php b/web/modules/redis/src/Cache/CacheBase.php
deleted file mode 100644
index 6daf590ace10869e55de1f99f9dfd2b917af0e4c..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Cache/CacheBase.php
+++ /dev/null
@@ -1,379 +0,0 @@
-<?php
-
-namespace Drupal\redis\Cache;
-
-use \DateInterval;
-use Drupal\Component\Assertion\Inspector;
-use Drupal\Component\Serialization\SerializationInterface;
-use Drupal\Core\Cache\Cache;
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Site\Settings;
-use Drupal\redis\RedisPrefixTrait;
-
-/**
- * Base class for redis cache backends.
- *
- *  *
- *
- */
-abstract class CacheBase implements CacheBackendInterface {
-
-  use RedisPrefixTrait;
-
-  /**
-   * Temporary cache items lifetime is infinite.
-   */
-  const LIFETIME_INFINITE = 0;
-
-  /**
-   * Default lifetime for permanent items.
-   * Approximatively 1 year.
-   */
-  const LIFETIME_PERM_DEFAULT = 31536000;
-
-  /**
-   * Computed keys are let's say arround 60 characters length due to
-   * key prefixing, which makes 1,000 keys DEL command to be something
-   * arround 50,000 bytes length: this is huge and may not pass into
-   * Redis, let's split this off.
-   * Some recommend to never get higher than 1,500 bytes within the same
-   * command which makes us forced to split this at a very low threshold:
-   * 20 seems a safe value here (1,280 average length).
-   */
-  const KEY_THRESHOLD = 20;
-
-  /**
-   * Latest delete all flush KEY name.
-   */
-  const LAST_DELETE_ALL_KEY = '_redis_last_delete_all';
-
-  /**
-   * @var string
-   */
-  protected $bin;
-
-  /**
-   * The serialization class to use.
-   *
-   * @var \Drupal\Component\Serialization\SerializationInterface
-   */
-  protected $serializer;
-
-  /**
-   * Default TTL for CACHE_PERMANENT items.
-   *
-   * See "Default lifetime for permanent items" section of README.md
-   * file for a comprehensive explaination of why this exists.
-   *
-   * @var int
-   */
-  protected $permTtl = self::LIFETIME_PERM_DEFAULT;
-
-  /**
-   * Minimal TTL to use.
-   *
-   * Note that this is for testing purposes. Do not specify the minimal TTL
-   * outside of unit-tests.
-   */
-  protected $minTtl = 0;
-
-  /**
-   * @var \Drupal\redis\ClientInterface
-   */
-  protected $client;
-
-  /**
-   * The cache tags checksum provider.
-   *
-   * @var \Drupal\Core\Cache\CacheTagsChecksumInterface|\Drupal\Core\Cache\CacheTagsInvalidatorInterface
-   */
-  protected $checksumProvider;
-
-  /**
-   * The last delete timestamp.
-   *
-   * @var float
-   */
-  protected $lastDeleteAll = NULL;
-
-  /**
-   * Get TTL for CACHE_PERMANENT items.
-   *
-   * @return int
-   *   Lifetime in seconds.
-   */
-  public function getPermTtl() {
-    return $this->permTtl;
-  }
-
-  /**
-   * CacheBase constructor.
-   * @param $bin
-   *   The cache bin for which the object is created.
-   * @param \Drupal\Component\Serialization\SerializationInterface $serializer
-   *   The serialization class to use.
-   */
-  public function __construct($bin, SerializationInterface $serializer) {
-    $this->bin = $bin;
-    $this->serializer = $serializer;
-    $this->setPermTtl();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function get($cid, $allow_invalid = FALSE) {
-    $cids = [$cid];
-    $cache = $this->getMultiple($cids, $allow_invalid);
-    return reset($cache);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setMultiple(array $items) {
-    foreach ($items as $cid => $item) {
-      $this->set($cid, $item['data'], isset($item['expire']) ? $item['expire'] : CacheBackendInterface::CACHE_PERMANENT, isset($item['tags']) ? $item['tags'] : []);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function delete($cid) {
-    $this->deleteMultiple([$cid]);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function removeBin() {
-    $this->deleteAll();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function invalidate($cid) {
-    $this->invalidateMultiple([$cid]);
-  }
-
-  /**
-   * Return the key for the given cache key.
-   */
-  public function getKey($cid = NULL) {
-    if (NULL === $cid) {
-      return $this->getPrefix() . ':' . $this->bin;
-    }
-    else {
-      return $this->getPrefix() . ':' . $this->bin . ':' . $cid;
-    }
-  }
-
-  /**
-   * Calculate the correct expiration time.
-   *
-   * @param int $expire
-   *   The expiration time provided for the cache set.
-   *
-   * @return int
-   *   The default expiration if expire is PERMANENT or higher than the default.
-   *   May return negative values if the item is already expired.
-   */
-  protected function getExpiration($expire) {
-    if ($expire == Cache::PERMANENT || $expire > $this->permTtl) {
-      return $this->permTtl;
-    }
-    return $expire - REQUEST_TIME;
-  }
-
-  /**
-   * Return the key for the tag used to specify the bin of cache-entries.
-   */
-  protected function getTagForBin() {
-    return 'x-redis-bin:' . $this->bin;
-  }
-
-  /**
-   * Set the minimum TTL (unit testing only).
-   */
-  public function setMinTtl($ttl) {
-    $this->minTtl = $ttl;
-  }
-
-  /**
-   * Set the permanent TTL.
-   */
-  public function setPermTtl($ttl = NULL) {
-    if (isset($ttl)) {
-      $this->permTtl = $ttl;
-    }
-    else {
-      // Attempt to set from settings.
-      if (($settings = Settings::get('redis.settings', [])) && isset($settings['perm_ttl_' . $this->bin])) {
-        $ttl = $settings['perm_ttl_' . $this->bin];
-        if ($ttl === (int) $ttl) {
-          $this->permTtl = $ttl;
-        }
-        else {
-          if ($iv = DateInterval::createFromDateString($ttl)) {
-            // http://stackoverflow.com/questions/14277611/convert-dateinterval-object-to-seconds-in-php
-            $this->permTtl = ($iv->y * 31536000 + $iv->m * 2592000 + $iv->days * 86400 + $iv->h * 3600 + $iv->i * 60 + $iv->s);
-          }
-          else {
-            // Log error about invalid ttl.
-            trigger_error(sprintf("Parsed TTL '%s' has an invalid value: switching to default", $ttl));
-            $this->permTtl = self::LIFETIME_PERM_DEFAULT;
-          }
-
-        }
-      }
-    }
-  }
-
-  /**
-   * Prepares a cached item.
-   *
-   * Checks that items are either permanent or did not expire, and unserializes
-   * data as appropriate.
-   *
-   * @param array $values
-   *   The hash returned from redis or false.
-   * @param bool $allow_invalid
-   *   If FALSE, the method returns FALSE if the cache item is not valid.
-   *
-   * @return mixed|false
-   *   The item with data unserialized as appropriate and a property indicating
-   *   whether the item is valid, or FALSE if there is no valid item to load.
-   */
-  protected function expandEntry(array $values, $allow_invalid) {
-    // Check for entry being valid.
-    if (empty($values['cid'])) {
-      return FALSE;
-    }
-
-    $cache = (object) $values;
-
-    $cache->tags = explode(' ', $cache->tags);
-
-    // Check expire time, allow to have a cache invalidated explicitly, don't
-    // check if already invalid.
-    if ($cache->valid) {
-      $cache->valid = $cache->expire == Cache::PERMANENT || $cache->expire >= REQUEST_TIME;
-
-      // Check if invalidateTags() has been called with any of the items's tags.
-      if ($cache->valid && !$this->checksumProvider->isValid($cache->checksum, $cache->tags)) {
-        $cache->valid = FALSE;
-      }
-    }
-
-    // Ensure the entry does not predate the last delete all time.
-    $last_delete_timestamp = $this->getLastDeleteAll();
-    if ($last_delete_timestamp && ((float)$values['created']) < $last_delete_timestamp) {
-      return FALSE;
-    }
-
-    if (!$allow_invalid && !$cache->valid) {
-      return FALSE;
-    }
-
-    if ($cache->serialized) {
-      $cache->data = $this->serializer->decode($cache->data);
-    }
-
-    return $cache;
-  }
-
-  /**
-   * Create cache entry.
-   *
-   * @param string $cid
-   * @param mixed $data
-   * @param int $expire
-   * @param string[] $tags
-   *
-   * @return array
-   */
-  protected function createEntryHash($cid, $data, $expire = Cache::PERMANENT, array $tags) {
-    // Always add a cache tag for the current bin, so that we can use that for
-    // invalidateAll().
-    $tags[] = $this->getTagForBin();
-    assert(Inspector::assertAllStrings($tags), 'Cache Tags must be strings.');
-    $hash = [
-      'cid' => $cid,
-      'created' => round(microtime(TRUE), 3),
-      'expire' => $expire,
-      'tags' => implode(' ', $tags),
-      'valid' => 1,
-      'checksum' => $this->checksumProvider->getCurrentChecksum($tags),
-    ];
-
-    // Let Redis handle the data types itself.
-    if (!is_string($data)) {
-      $hash['data'] = $this->serializer->encode($data);
-      $hash['serialized'] = 1;
-    }
-    else {
-      $hash['data'] = $data;
-      $hash['serialized'] = 0;
-    }
-
-    return $hash;
-  }
-  /**
-   * {@inheritdoc}
-   */
-  public function invalidateMultiple(array $cids) {
-    // Loop over all cache items, they are stored as a hash, so we can access
-    // the valid flag directly, only write if it exists and is not 0.
-    foreach ($cids as $cid) {
-      $key = $this->getKey($cid);
-      if ($this->client->hGet($key, 'valid')) {
-        $this->client->hSet($key, 'valid', 0);
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function invalidateAll() {
-    // To invalidate the whole bin, we invalidate a special tag for this bin.
-    $this->checksumProvider->invalidateTags([$this->getTagForBin()]);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function garbageCollection() {
-    // @todo Do we need to do anything here?
-  }
-
-  /**
-   *  Returns the last delete all timestamp.
-   *
-   * @return float
-   *   The last delete timestamp as a timestamp with a millisecond precision.
-   */
-  protected function getLastDeleteAll() {
-    // Cache the last delete all timestamp.
-    if ($this->lastDeleteAll === NULL) {
-      $this->lastDeleteAll = (float) $this->client->get($this->getKey(static::LAST_DELETE_ALL_KEY));
-    }
-    return $this->lastDeleteAll;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteAll() {
-    // The last delete timestamp is in milliseconds, ensure that no cache
-    // was written in the same millisecond.
-    // @todo This is needed to make the tests pass, is this safe enough for real
-    //   usage?
-    usleep(1000);
-    $this->lastDeleteAll = round(microtime(TRUE), 3);
-    $this->client->set($this->getKey(static::LAST_DELETE_ALL_KEY), $this->lastDeleteAll);
-  }
-
-}
diff --git a/web/modules/redis/src/Cache/PhpRedis.php b/web/modules/redis/src/Cache/PhpRedis.php
deleted file mode 100644
index cb30d6055aa36b5b2469279b6b82f9e5471ea91e..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Cache/PhpRedis.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace Drupal\redis\Cache;
-
-use Drupal\Component\Serialization\SerializationInterface;
-use Drupal\Core\Cache\Cache;
-use Drupal\Core\Cache\CacheTagsChecksumInterface;
-
-/**
- * PhpRedis cache backend.
- */
-class PhpRedis extends CacheBase {
-
-  /**
-   * @var \Redis
-   */
-  protected $client;
-
-  /**
-   * Creates a PHpRedis cache backend.
-   *
-   * @param $bin
-   *   The cache bin for which the object is created.
-   * @param \Redis $client
-   * @param \Drupal\Core\Cache\CacheTagsChecksumInterface $checksum_provider
-   * @param \Drupal\redis\Cache\SerializationInterface $serializer
-   *   The serialization class to use.
-   */
-  public function __construct($bin, \Redis $client, CacheTagsChecksumInterface $checksum_provider, SerializationInterface $serializer) {
-    parent::__construct($bin, $serializer);
-    $this->client = $client;
-    $this->checksumProvider = $checksum_provider;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMultiple(&$cids, $allow_invalid = FALSE) {
-    // Avoid an error when there are no cache ids.
-    if (empty($cids)) {
-      return [];
-    }
-
-    $return = [];
-
-    // Build the list of keys to fetch.
-    $keys = array_map([$this, 'getKey'], $cids);
-
-    // Optimize for the common case when only a single cache entry needs to
-    // be fetched, no pipeline is needed then.
-    if (count($keys) > 1) {
-      $pipe = $this->client->multi(\Redis::PIPELINE);
-      foreach ($keys as $key) {
-        $pipe->hgetall($key);
-      }
-      $result = $pipe->exec();
-    }
-    else {
-      $result = [$this->client->hGetAll(reset($keys))];
-    }
-
-    // Loop over the cid values to ensure numeric indexes.
-    foreach (array_values($cids) as $index => $key) {
-      // Check if a valid result was returned from Redis.
-      if (isset($result[$index]) && is_array($result[$index])) {
-        // Check expiration and invalidation and convert into an object.
-        $item = $this->expandEntry($result[$index], $allow_invalid);
-        if ($item) {
-          $return[$item->cid] = $item;
-        }
-      }
-    }
-
-    // Remove fetched cids from the list.
-    $cids = array_diff($cids, array_keys($return));
-
-    return $return;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function set($cid, $data, $expire = Cache::PERMANENT, array $tags = []) {
-
-    $ttl = $this->getExpiration($expire);
-
-    $key = $this->getKey($cid);
-
-    // If the item is already expired, delete it.
-    if ($ttl <= 0) {
-      $this->delete($key);
-    }
-
-    // Build the cache item and save it as a hash array.
-    $entry = $this->createEntryHash($cid, $data, $expire, $tags);
-    $pipe = $this->client->multi(\REdis::PIPELINE);
-    $pipe->hMset($key, $entry);
-    $pipe->expire($key, $ttl);
-    $pipe->exec();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteMultiple(array $cids) {
-    $keys = array_map([$this, 'getKey'], $cids);
-    $this->client->del($keys);
-  }
-
-
-}
diff --git a/web/modules/redis/src/Cache/Predis.php b/web/modules/redis/src/Cache/Predis.php
deleted file mode 100644
index 6ccd7817a1284c4207f6a8749122891428d3149a..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Cache/Predis.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-namespace Drupal\redis\Cache;
-
-use Drupal\Component\Serialization\SerializationInterface;
-use Drupal\Core\Cache\Cache;
-use Drupal\Core\Cache\CacheTagsChecksumInterface;
-
-/**
- * Predis cache backend.
- */
-class Predis extends CacheBase {
-
-  /**
-   * @var \Predis\Client
-   */
-  protected $client;
-
-  /**
-   * Creates a Predis cache backend.
-   *
-   * @param $bin
-   *   The cache bin for which the object is created.
-   * @param \Redis $client
-   * @param \Drupal\Core\Cache\CacheTagsChecksumInterface $checksum_provider
-   * @param \Drupal\redis\Cache\SerializationInterface $serializer
-   *   The serialization class to use.
-   */
-  public function __construct($bin, \Predis\Client $client, CacheTagsChecksumInterface $checksum_provider, SerializationInterface $serializer) {
-    parent::__construct($bin, $serializer);
-    $this->client = $client;
-    $this->checksumProvider = $checksum_provider;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMultiple(&$cids, $allow_invalid = FALSE) {
-    // Avoid an error when there are no cache ids.
-    if (empty($cids)) {
-      return [];
-    }
-
-    $return = [];
-
-    // Build the list of keys to fetch.
-    $keys = array_map([$this, 'getKey'], $cids);
-
-    // Optimize for the common case when only a single cache entry needs to
-    // be fetched, no pipeline is needed then.
-    if (count($keys) > 1) {
-      $pipe = $this->client->pipeline();
-      foreach ($keys as $key) {
-        $pipe->hgetall($key);
-      }
-      $result = $pipe->execute();
-    }
-    else {
-      $result = [$this->client->hGetAll(reset($keys))];
-    }
-
-    // Loop over the cid values to ensure numeric indexes.
-    foreach (array_values($cids) as $index => $key) {
-      // Check if a valid result was returned from Redis.
-      if (isset($result[$index]) && is_array($result[$index])) {
-        // Check expiration and invalidation and convert into an object.
-        $item = $this->expandEntry($result[$index], $allow_invalid);
-        if ($item) {
-          $return[$item->cid] = $item;
-        }
-      }
-    }
-
-    // Remove fetched cids from the list.
-    $cids = array_diff($cids, array_keys($return));
-
-    return $return;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function set($cid, $data, $expire = Cache::PERMANENT, array $tags = []) {
-
-    $ttl = $this->getExpiration($expire);
-
-    $key = $this->getKey($cid);
-
-    // If the item is already expired, delete it.
-    if ($ttl <= 0) {
-      $this->delete($key);
-    }
-
-    // Build the cache item and save it as a hash array.
-    $entry = $this->createEntryHash($cid, $data, $expire, $tags);
-    $pipe = $this->client->pipeline();
-    $pipe->hmset($key, $entry);
-    $pipe->expire($key, $ttl);
-    $pipe->execute();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteMultiple(array $cids) {
-    if (!empty($cids)) {
-      $keys = array_map([$this, 'getKey'], $cids);
-      $this->client->del($keys);
-    }
-  }
-
-
-}
diff --git a/web/modules/redis/src/Cache/RedisCacheTagsChecksum.php b/web/modules/redis/src/Cache/RedisCacheTagsChecksum.php
deleted file mode 100644
index 9992a2f504f670f2887b807cb035e9c96592323d..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Cache/RedisCacheTagsChecksum.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-namespace Drupal\redis\Cache;
-
-use Drupal\Core\Cache\CacheTagsChecksumInterface;
-use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
-use Drupal\redis\ClientFactory;
-use Drupal\redis\RedisPrefixTrait;
-
-/**
- * Cache tags invalidations checksum implementation that uses redis.
- */
-class RedisCacheTagsChecksum implements CacheTagsChecksumInterface, CacheTagsInvalidatorInterface {
-
-  use RedisPrefixTrait;
-
-  /**
-   * Contains already loaded cache invalidations from the database.
-   *
-   * @var array
-   */
-  protected $tagCache = [];
-
-  /**
-   * A list of tags that have already been invalidated in this request.
-   *
-   * Used to prevent the invalidation of the same cache tag multiple times.
-   *
-   * @var array
-   */
-  protected $invalidatedTags = [];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected $client;
-
-  /**
-   * @var string
-   */
-  protected $clientType;
-
-  /**
-   * Creates a PHpRedis cache backend.
-   */
-  public function __construct(ClientFactory $factory) {
-    $this->client = $factory->getClient();
-    $this->clientType = $factory->getClientName();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function invalidateTags(array $tags) {
-    $keys_to_increment = [];
-    foreach ($tags as $tag) {
-      // Only invalidate tags once per request unless they are written again.
-      if (isset($this->invalidatedTags[$tag])) {
-        continue;
-      }
-      $this->invalidatedTags[$tag] = TRUE;
-      unset($this->tagCache[$tag]);
-      $keys_to_increment[] = $this->getTagKey($tag);
-    }
-    if ($keys_to_increment) {
-
-      // We want to differentiate between PhpRedis and Redis clients.
-      if ($this->clientType === 'PhpRedis') {
-        $multi = $this->client->multi(\Redis::PIPELINE);
-        foreach ($keys_to_increment as $key) {
-          $multi->incr($key);
-        }
-        $multi->exec();
-      }
-      elseif ($this->clientType === 'Predis') {
-
-        $pipe = $this->client->pipeline();
-        foreach ($keys_to_increment as $key) {
-          $pipe->incr($key);
-        }
-        $pipe->execute();
-      }
-    }
-
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCurrentChecksum(array $tags) {
-    // Remove tags that were already invalidated during this request from the
-    // static caches so that another invalidation can occur later in the same
-    // request. Without that, written cache items would not be invalidated
-    // correctly.
-    foreach ($tags as $tag) {
-      unset($this->invalidatedTags[$tag]);
-    }
-    return $this->calculateChecksum($tags);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isValid($checksum, array $tags) {
-    return $checksum == $this->calculateChecksum($tags);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function calculateChecksum(array $tags) {
-    $checksum = 0;
-
-    $fetch = array_values(array_diff($tags, array_keys($this->tagCache)));
-    if ($fetch) {
-      $keys = array_map([$this, 'getTagKey'], $fetch);
-      foreach ($this->client->mget($keys) as $index => $invalidations) {
-        $this->tagCache[$fetch[$index]] = $invalidations ?: 0;
-      }
-    }
-
-    foreach ($tags as $tag) {
-      $checksum += $this->tagCache[$tag];
-    }
-
-    return $checksum;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function reset() {
-    $this->tagCache = [];
-    $this->invalidatedTags = [];
-  }
-
-  /**
-   * Return the key for the given cache tag.
-   *
-   * @param string $tag
-   *   The cache tag.
-   *
-   * @return string
-   *   The prefixed cache tag.
-   */
-  protected function getTagKey($tag) {
-    return $this->getPrefix() . ':cachetags:' . $tag;
-  }
-
-}
diff --git a/web/modules/redis/src/Client/PhpRedis.php b/web/modules/redis/src/Client/PhpRedis.php
deleted file mode 100644
index 147d2c78dad5966169879598e48fa231cde70903..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Client/PhpRedis.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-namespace Drupal\redis\Client;
-
-use Drupal\Core\Logger\RfcLogLevel;
-use Drupal\Core\Site\Settings;
-use Drupal\redis\ClientInterface;
-
-/**
- * PhpRedis client specific implementation.
- */
-class PhpRedis implements ClientInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getClient($host = NULL, $port = NULL, $base = NULL, $password = NULL) {
-    $client = new \Redis();
-
-    // Sentinel mode, get the real master.
-    if (is_array($host)) {
-      $ip_host = $this->askForMaster($client, $host, $password);
-      if (is_array($ip_host)) {
-        list($host, $port) = $ip_host;
-      }
-    }
-
-    $client->connect($host, $port);
-
-    if (isset($password)) {
-      $client->auth($password);
-    }
-
-    if (isset($base)) {
-      $client->select($base);
-    }
-
-    // Do not allow PhpRedis serialize itself data, we are going to do it
-    // ourself. This will ensure less memory footprint on Redis size when
-    // we will attempt to store small values.
-    $client->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_NONE);
-
-    return $client;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getName() {
-    return 'PhpRedis';
-  }
-
-  /**
-   * Connect to sentinels to get Redis master instance.
-   *
-   * Just asking one sentinels after another until given the master location.
-   * More info about this mode at https://redis.io/topics/sentinel.
-   *
-   * @param \Redis $client
-   *   The PhpRedis client.
-   * @param array $sentinels
-   *   An array of the sentinels' ip:port.
-   * @param string $password
-   *   An optional Sentinels' password.
-   *
-   * @return mixed
-   *   An array with ip & port of the Master instance or NULL.
-   */
-  protected function askForMaster(\Redis $client, array $sentinels = [], $password = NULL) {
-
-    $ip_port = NULL;
-    $settings = Settings::get('redis.connection', []);
-    $settings += ['instance' => NULL];
-
-    if ($settings['instance']) {
-      foreach ($sentinels as $sentinel) {
-        list($host, $port) = explode(':', $sentinel);
-        // 0.5s timeout.
-        $client->connect($host, $port, 0.5);
-
-        if (isset($password)) {
-          $client->auth($password);
-        }
-
-        if ($client->isConnected()) {
-          $ip_port = $client->rawcommand('SENTINEL', 'get-master-addr-by-name', $settings['instance']);
-          if ($ip_port) {
-            break;
-          }
-        }
-        $client->close();
-      }
-    }
-    return $ip_port;
-  }
-
-}
diff --git a/web/modules/redis/src/Client/Predis.php b/web/modules/redis/src/Client/Predis.php
deleted file mode 100644
index 747d73a46e07c7e9106436bfa01e19895de5e676..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Client/Predis.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace Drupal\redis\Client;
-
-use Drupal\redis\ClientInterface;
-use Predis\Client;
-
-
-/**
- * Predis client specific implementation.
- */
-class Predis implements ClientInterface {
-
-  public function getClient($host = NULL, $port = NULL, $base = NULL, $password = NULL, $replicationHosts = NULL) {
-    $connectionInfo = [
-      'password' => $password,
-      'host'     => $host,
-      'port'     => $port,
-      'database' => $base
-    ];
-
-    foreach ($connectionInfo as $key => $value) {
-      if (!isset($value)) {
-        unset($connectionInfo[$key]);
-      }
-    }
-
-    // I'm not sure why but the error handler is driven crazy if timezone
-    // is not set at this point.
-    // Hopefully Drupal will restore the right one this once the current
-    // account has logged in.
-    date_default_timezone_set(@date_default_timezone_get());
-
-    // If we are passed in an array of $replicationHosts, we should attempt a clustered client connection.
-    if ($replicationHosts !== NULL) {
-      $parameters = [];
-
-      foreach ($replicationHosts as $replicationHost) {
-        // Configure master.
-        if ($replicationHost['role'] === 'primary') {
-          $parameters[] = 'tcp://' . $replicationHost['host'] . ':' . $replicationHost['port'] . '?alias=master';
-        }
-        else {
-          $parameters[] = 'tcp://' . $replicationHost['host'] . ':' . $replicationHost['port'];
-        }
-      }
-
-      $options = ['replication' => true];
-      $client = new Client($parameters, $options);
-    }
-    else {
-      $client = new Client($connectionInfo);
-    }
-    return $client;
-
-  }
-
-  public function getName() {
-    return 'Predis';
-  }
-}
diff --git a/web/modules/redis/src/ClientFactory.php b/web/modules/redis/src/ClientFactory.php
deleted file mode 100644
index cddabd96ed061c37f45c82fa875b983223df999a..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/ClientFactory.php
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-
-namespace Drupal\redis;
-use Drupal\Core\Site\Settings;
-
-/**
- * Common code and client singleton, for all Redis clients.
- */
-class ClientFactory {
-  /**
-   * Redis default host.
-   */
-  const REDIS_DEFAULT_HOST = "127.0.0.1";
-
-  /**
-   * Redis default port.
-   */
-  const REDIS_DEFAULT_PORT = 6379;
-
-  /**
-   * Redis default database: will select none (Database 0).
-   */
-  const REDIS_DEFAULT_BASE = NULL;
-
-  /**
-   * Redis default password: will not authenticate.
-   */
-  const REDIS_DEFAULT_PASSWORD = NULL;
-
-  /**
-   * Cache implementation namespace.
-   */
-  const REDIS_IMPL_CACHE = '\\Drupal\\redis\\Cache\\';
-
-  /**
-   * Lock implementation namespace.
-   */
-  const REDIS_IMPL_LOCK = '\\Drupal\\redis\\Lock\\';
-
-  /**
-   * Lock implementation namespace.
-   */
-  const REDIS_IMPL_FLOOD = '\\Drupal\\redis\\Flood\\';
-
-  /**
-   * Persistent Lock implementation namespace.
-   */
-  const REDIS_IMPL_PERSISTENT_LOCK = '\\Drupal\\redis\\PersistentLock\\';
-
-  /**
-   * Client implementation namespace.
-   */
-  const REDIS_IMPL_CLIENT = '\\Drupal\\redis\\Client\\';
-
-  /**
-   * Queue implementation namespace.
-   */
-  const REDIS_IMPL_QUEUE = '\\Drupal\\redis\\Queue\\';
-
-  /**
-   * Reliable queue implementation namespace.
-   */
-  const REDIS_IMPL_RELIABLE_QUEUE = '\\Drupal\\redis\\Queue\\Reliable';
-
-  /**
-   * @var \Drupal\redis\ClientInterface
-   */
-  protected static $_clientInterface;
-
-  /**
-   * @var mixed
-   */
-  protected static $_client;
-
-  public static function hasClient() {
-    return isset(self::$_client);
-  }
-
-  /**
-   * Set client proxy.
-   */
-  public static function setClient(ClientInterface $interface) {
-    if (isset(self::$_client)) {
-      throw new \Exception("Once Redis client is connected, you cannot change client proxy instance.");
-    }
-
-    self::$_clientInterface = $interface;
-  }
-
-  /**
-   * Lazy instanciate client proxy depending on the actual configuration.
-   *
-   * If you are using a lock or cache backend using one of the Redis client
-   * implementations, this will be overridden at early bootstrap phase and
-   * configuration will be ignored.
-   *
-   * @return ClientInterface
-   */
-  public static function getClientInterface()
-  {
-    if (!isset(self::$_clientInterface))
-    {
-      $settings = Settings::get('redis.connection', []);
-      if (!empty($settings['interface']))
-      {
-        $className = self::getClass(self::REDIS_IMPL_CLIENT, $settings['interface']);
-        self::$_clientInterface = new $className();
-      }
-      elseif (class_exists('Predis\Client'))
-      {
-        // Transparent and abitrary preference for Predis library.
-        $className = self::getClass(self::REDIS_IMPL_CLIENT, 'Predis');
-        self::$_clientInterface = new $className();
-      }
-      elseif (class_exists('Redis'))
-      {
-        // Fallback on PhpRedis if available.
-        $className = self::getClass(self::REDIS_IMPL_CLIENT, 'PhpRedis');
-        self::$_clientInterface = new $className();
-      }
-      else
-      {
-        if (!isset(self::$_clientInterface))
-        {
-          throw new \Exception("No client interface set.");
-        }
-      }
-    }
-
-    return self::$_clientInterface;
-  }
-
-  /**
-   * Get underlaying library name.
-   *
-   * @return string
-   */
-  public static function getClientName() {
-    return self::getClientInterface()->getName();
-  }
-
-  /**
-   * Get client singleton.
-   */
-  public static function getClient() {
-    if (!isset(self::$_client)) {
-      $settings = Settings::get('redis.connection', []);
-      $settings += [
-        'host' => self::REDIS_DEFAULT_HOST,
-        'port' => self::REDIS_DEFAULT_PORT,
-        'base' => self::REDIS_DEFAULT_BASE,
-        'password' => self::REDIS_DEFAULT_PASSWORD,
-      ];
-
-      // If using replication, lets create the client appropriately.
-      if (isset($settings['replication']) && $settings['replication'] === TRUE) {
-        foreach ($settings['replication.host'] as $key => $replicationHost) {
-          if (!isset($replicationHost['port'])) {
-            $settings['replication.host'][$key]['port'] = self::REDIS_DEFAULT_PORT;
-          }
-        }
-
-        self::$_client = self::getClientInterface()->getClient(
-          $settings['host'],
-          $settings['port'],
-          $settings['base'],
-          $settings['password'],
-          $settings['replication.host']);
-      }
-      else {
-        self::$_client = self::getClientInterface()->getClient(
-          $settings['host'],
-          $settings['port'],
-          $settings['base'],
-          $settings['password']);
-      }
-    }
-
-    return self::$_client;
-  }
-
-  /**
-   * Get specific class implementing the current client usage for the specific
-   * asked core subsystem.
-   *
-   * @param string $system
-   *   One of the ClientFactory::IMPL_* constant.
-   * @param string $clientName
-   *   Client name, if fixed.
-   *
-   * @return string
-   *   Class name, if found.
-   *
-   * @throws \Exception
-   *   If not found.
-   */
-  public static function getClass($system, $clientName = NULL) {
-    $className = $system . ($clientName ?: self::getClientName());
-
-    if (!class_exists($className)) {
-      throw new \Exception($className . " does not exists");
-    }
-
-    return $className;
-  }
-
-  /**
-   * For unit testing only reset internals.
-   */
-  static public function reset() {
-    self::$_clientInterface = null;
-    self::$_client = null;
-  }
-}
-
diff --git a/web/modules/redis/src/ClientInterface.php b/web/modules/redis/src/ClientInterface.php
deleted file mode 100644
index 982dd75cf04ff803bf3797f2cec0018af1a46aa9..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/ClientInterface.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Drupal\redis;
-
-/**
- * Client proxy, client handling class tied to the bare mininum.
- */
-interface ClientInterface {
-  /**
-   * Get the connected client instance.
-   *
-   * @return mixed
-   *   Real client depends from the library behind.
-   */
-  public function getClient($host = NULL, $port = NULL, $base = NULL);
-
-  /**
-   * Get underlaying library name used.
-   *
-   * This can be useful for contribution code that may work with only some of
-   * the provided clients.
-   *
-   * @return string
-   */
-  public function getName();
-}
diff --git a/web/modules/redis/src/Flood/FloodFactory.php b/web/modules/redis/src/Flood/FloodFactory.php
deleted file mode 100644
index 65e169da508456a25bb5c153373d7b834feef7ee..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Flood/FloodFactory.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace Drupal\redis\Flood;
-
-use Drupal\redis\ClientFactory;
-use Symfony\Component\HttpFoundation\RequestStack;
-
-/**
- * Flood backend singleton handling.
- */
-class FloodFactory {
-
-  /**
-   * @var \Drupal\redis\ClientInterface
-   */
-  protected $clientFactory;
-
-  /**
-   * The request stack.
-   *
-   * @var \Symfony\Component\HttpFoundation\RequestStack
-   */
-  protected $requestStack;
-
-  /**
-   * Construct the PhpRedis flood backend factory.
-   *
-   * @param \Drupal\redis\ClientFactory $client_factory
-   *   The database connection which will be used to store the flood event
-   *   information.
-   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
-   *   The request stack used to retrieve the current request.
-   */
-  public function __construct(ClientFactory $client_factory, RequestStack $request_stack) {
-    $this->clientFactory = $client_factory;
-    $this->requestStack = $request_stack;
-  }
-
-  /**
-   * Get actual flood backend.
-   *
-   * @return \Drupal\Core\Flood\FloodInterface
-   *   Return flood instance.
-   */
-  public function get() {
-    $class_name = $this->clientFactory->getClass(ClientFactory::REDIS_IMPL_FLOOD);
-    return new $class_name($this->clientFactory, $this->requestStack);
-  }
-}
diff --git a/web/modules/redis/src/Flood/PhpRedis.php b/web/modules/redis/src/Flood/PhpRedis.php
deleted file mode 100644
index 06a36047c4cad186dd52b3ade98733ce23edfe14..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Flood/PhpRedis.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-namespace Drupal\redis\Flood;
-
-use Drupal\Core\Flood\FloodInterface;
-use Drupal\redis\ClientFactory;
-use Drupal\redis\RedisPrefixTrait;
-use Symfony\Component\HttpFoundation\RequestStack;
-
-/**
- * Defines the database flood backend. This is the default Drupal backend.
- */
-class PhpRedis implements FloodInterface {
-
-  use RedisPrefixTrait;
-
-  /**
-   * @var \Redis
-   */
-  protected $client;
-
-  /**
-   * The request stack.
-   *
-   * @var \Symfony\Component\HttpFoundation\RequestStack
-   */
-  protected $requestStack;
-
-  /**
-   * Construct the PhpRedis flood backend.
-   *
-   * @param \Drupal\redis\ClientFactory $client_factory
-   *   The database connection which will be used to store the flood event
-   *   information.
-   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
-   *   The request stack used to retrieve the current request.
-   */
-  public function __construct(ClientFactory $client_factory, RequestStack $request_stack) {
-    $this->client = $client_factory->getClient();
-    $this->requestStack = $request_stack;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function register($name, $window = 3600, $identifier = NULL) {
-    if (!isset($identifier)) {
-      $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
-    }
-
-    $key = $this->getPrefix() . ':flood:' . $name . ':' . $identifier;
-
-    // Add a key for the event to the sorted set, the score is timestamp, so we
-    // can count them easily.
-    $this->client->zAdd($key, $_SERVER['REQUEST_TIME'] + $window, microtime(TRUE));
-    // Set or update the expiration for the sorted set, it will be removed if
-    // the newest entry expired.
-    $this->client->expire($key, $_SERVER['REQUEST_TIME'] + $window);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function clear($name, $identifier = NULL) {
-    if (!isset($identifier)) {
-      $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
-    }
-
-    $key = $this->getPrefix() . ':flood:' . $name . ':' . $identifier;
-    $this->client->del($key);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isAllowed($name, $threshold, $window = 3600, $identifier = NULL) {
-    if (!isset($identifier)) {
-      $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
-    }
-
-    $key = $this->getPrefix() . ':flood:' . $name . ':' . $identifier;
-
-    // Count the in the last $window seconds.
-    $number = $this->client->zCount($key, $_SERVER['REQUEST_TIME'], 'inf');
-    return ($number < $threshold);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function garbageCollection() {
-    // No garbage collection necessary.
-  }
-
-}
diff --git a/web/modules/redis/src/Flood/Predis.php b/web/modules/redis/src/Flood/Predis.php
deleted file mode 100644
index de28b0496a1326aef08bcaba7a0c6296726eddad..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Flood/Predis.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-namespace Drupal\redis\Flood;
-
-use Drupal\Core\Flood\FloodInterface;
-use Drupal\redis\ClientFactory;
-use Drupal\redis\RedisPrefixTrait;
-use Symfony\Component\HttpFoundation\RequestStack;
-
-/**
- * Defines the database flood backend. This is the default Drupal backend.
- */
-class Predis implements FloodInterface {
-
-  use RedisPrefixTrait;
-
-  /**
-   * @var \Predis\Client
-   */
-  protected $client;
-
-  /**
-   * The request stack.
-   *
-   * @var \Symfony\Component\HttpFoundation\RequestStack
-   */
-  protected $requestStack;
-
-  /**
-   * Construct the PhpRedis flood backend.
-   *
-   * @param \Drupal\redis\ClientFactory $client_factory
-   *   The database connection which will be used to store the flood event
-   *   information.
-   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
-   *   The request stack used to retrieve the current request.
-   */
-  public function __construct(ClientFactory $client_factory, RequestStack $request_stack) {
-    $this->client = $client_factory->getClient();
-    $this->requestStack = $request_stack;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function register($name, $window = 3600, $identifier = NULL) {
-    if (!isset($identifier)) {
-      $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
-    }
-
-    $key = $this->getPrefix() . ':flood:' . $name . ':' . $identifier;
-
-    // Add a key for the event to the sorted set, the score is timestamp, so we
-    // can count them easily.
-    $this->client->zAdd($key, $_SERVER['REQUEST_TIME'] + $window, microtime(TRUE));
-    // Set or update the expiration for the sorted set, it will be removed if
-    // the newest entry expired.
-    $this->client->expire($key, $_SERVER['REQUEST_TIME'] + $window);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function clear($name, $identifier = NULL) {
-    if (!isset($identifier)) {
-      $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
-    }
-
-    $key = $this->getPrefix() . ':flood:' . $name . ':' . $identifier;
-    $this->client->del($key);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isAllowed($name, $threshold, $window = 3600, $identifier = NULL) {
-    if (!isset($identifier)) {
-      $identifier = $this->requestStack->getCurrentRequest()->getClientIp();
-    }
-
-    $key = $this->getPrefix() . ':flood:' . $name . ':' . $identifier;
-
-    // Count the in the last $window seconds.
-    $number = $this->client->zCount($key, $_SERVER['REQUEST_TIME'], 'inf');
-    return ($number < $threshold);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function garbageCollection() {
-    // No garbage collection necessary.
-  }
-
-}
diff --git a/web/modules/redis/src/Lock/LockFactory.php b/web/modules/redis/src/Lock/LockFactory.php
deleted file mode 100644
index 6e8c8b184f0f988558c1bcd1a27f8a28489bbafe..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Lock/LockFactory.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-namespace Drupal\redis\Lock;
-
-use Drupal\redis\ClientFactory;
-
-/**
- * Lock backend singleton handling.
- */
-class LockFactory {
-
-  /**
-   * @var \Drupal\redis\ClientInterface
-   */
-  protected $clientFactory;
-
-  /**
-   * Creates a redis LockFactory.
-   */
-  public function __construct(ClientFactory $client_factory) {
-    $this->clientFactory = $client_factory;
-  }
-
-  /**
-   * Get actual lock backend.
-   *
-   * @param bool $persistent
-   *   (optional) Whether to return a persistent lock implementation or not.
-   *
-   * @return \Drupal\Core\Lock\LockBackendInterface
-   *   Return lock backend instance.
-   */
-  public function get($persistent = FALSE) {
-    $class_name = $this->clientFactory->getClass($persistent ? ClientFactory::REDIS_IMPL_PERSISTENT_LOCK : ClientFactory::REDIS_IMPL_LOCK);
-    return new $class_name($this->clientFactory);
-  }
-}
diff --git a/web/modules/redis/src/Lock/PhpRedis.php b/web/modules/redis/src/Lock/PhpRedis.php
deleted file mode 100644
index 2f53e62ab2f323a252836239e41b34fb3107195c..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Lock/PhpRedis.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-namespace Drupal\redis\Lock;
-
-use Drupal\Core\Lock\LockBackendAbstract;
-use Drupal\redis\ClientFactory;
-use Drupal\redis\RedisPrefixTrait;
-
-/**
- * Predis lock backend implementation.
- */
-class PhpRedis extends LockBackendAbstract {
-
-  use RedisPrefixTrait;
-
-  /**
-   * @var \Redis
-   */
-  protected $client;
-
-  /**
-   * Creates a PHpRedis cache backend.
-   */
-  public function __construct(ClientFactory $factory) {
-    $this->client = $factory->getClient();
-    // __destruct() is causing problems with garbage collections, register a
-    // shutdown function instead.
-    drupal_register_shutdown_function([$this, 'releaseAll']);
-  }
-
-  /**
-   * Generate a redis key name for the current lock name.
-   *
-   * @param string $name
-   *   Lock name.
-   *
-   * @return string
-   *   The redis key for the given lock.
-   */
-  protected function getKey($name) {
-    return $this->getPrefix() . ':lock:' . $name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function acquire($name, $timeout = 30.0) {
-    $key    = $this->getKey($name);
-    $id     = $this->getLockId();
-
-    // Insure that the timeout is at least 1 ms.
-    $timeout = max($timeout, 0.001);
-
-    // If we already have the lock, check for his owner and attempt a new EXPIRE
-    // command on it.
-    if (isset($this->locks[$name])) {
-
-      // Create a new transaction, for atomicity.
-      $this->client->watch($key);
-
-      // Global tells us we are the owner, but in real life it could have expired
-      // and another process could have taken it, check that.
-      if ($this->client->get($key) != $id) {
-        // Explicit UNWATCH we are not going to run the MULTI/EXEC block.
-        $this->client->unwatch();
-        unset($this->locks[$name]);
-        return FALSE;
-      }
-
-      $result = $this->client->multi()
-        ->psetex($key, (int) ($timeout * 1000), $id)
-        ->exec();
-
-      // If the set failed, someone else wrote the key, we failed to acquire
-      // the lock.
-      if (FALSE === $result) {
-        unset($this->locks[$name]);
-        // Explicit transaction release which also frees the WATCH'ed key.
-        $this->client->discard();
-        return FALSE;
-      }
-
-      return ($this->locks[$name] = TRUE);
-    }
-    else {
-      // Use a SET with microsecond expiration and the NX flag, which will only
-      // succeed if the key does not exist yet.
-      $result = $this->client->set($key, $id, ['nx', 'px' => (int) ($timeout * 1000)]);
-
-      // If the result is FALSE, we failed to acquire the lock.
-      if (FALSE === $result) {
-        return FALSE;
-      }
-
-      // Register the lock.
-      return ($this->locks[$name] = TRUE);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function lockMayBeAvailable($name) {
-    $key    = $this->getKey($name);
-    $value = $this->client->get($key);
-
-    // In Drupal 7, this method treated the lock as available if the ID did
-    // match. The database backend and test expects it to return FALSE in that
-    // case, updated accordingly.
-    return FALSE === $value;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function release($name) {
-    $key    = $this->getKey($name);
-    $id     = $this->getLockId();
-
-    unset($this->locks[$name]);
-
-    // Ensure the lock deletion is an atomic transaction. If another thread
-    // manages to removes all lock, we can not alter it anymore else we will
-    // release the lock for the other thread and cause race conditions.
-    $this->client->watch($key);
-
-    if ($this->client->get($key) == $id) {
-      $this->client->multi();
-      $this->client->delete($key);
-      $this->client->exec();
-    }
-    else {
-      $this->client->unwatch();
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function releaseAll($lock_id = NULL) {
-    // We can afford to deal with a slow algorithm here, this should not happen
-    // on normal run because we should have removed manually all our locks.
-    foreach ($this->locks as $name => $foo) {
-      $this->release($name);
-    }
-  }
-}
diff --git a/web/modules/redis/src/Lock/Predis.php b/web/modules/redis/src/Lock/Predis.php
deleted file mode 100644
index aa67ca14350a71e3e4194137a845f5f23153f47a..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Lock/Predis.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-namespace Drupal\redis\Lock;
-
-use Drupal\Core\Lock\LockBackendAbstract;
-use Drupal\redis\ClientFactory;
-use Drupal\redis\RedisPrefixTrait;
-
-/**
- * Predis lock backend implementation.
- */
-class Predis extends LockBackendAbstract {
-
-  use RedisPrefixTrait;
-
-  /**
-   * @var \Predis\Client
-   */
-  protected $client;
-
-  /**
-   * Creates a PHpRedis cache backend.
-   */
-  public function __construct(ClientFactory $factory) {
-    $this->client = $factory->getClient();
-    // __destruct() is causing problems with garbage collections, register a
-    // shutdown function instead.
-    drupal_register_shutdown_function([$this, 'releaseAll']);
-  }
-
-  /**
-   * Generate a redis key name for the current lock name.
-   *
-   * @param string $name
-   *   Lock name.
-   *
-   * @return string
-   *   The redis key for the given lock.
-   */
-  protected function getKey($name) {
-    return $this->getPrefix() . ':lock:' . $name;
-  }
-
-  public function acquire($name, $timeout = 30.0) {
-    $key    = $this->getKey($name);
-    $id     = $this->getLockId();
-
-    // Insure that the timeout is at least 1 ms.
-    $timeout = max($timeout, 0.001);
-
-    // If we already have the lock, check for his owner and attempt a new EXPIRE
-    // command on it.
-    if (isset($this->locks[$name])) {
-
-      // Create a new transaction, for atomicity.
-      $this->client->watch($key);
-
-      // Global tells us we are the owner, but in real life it could have expired
-      // and another process could have taken it, check that.
-      if ($this->client->get($key) != $id) {
-        // Explicit UNWATCH we are not going to run the MULTI/EXEC block.
-        $this->client->unwatch();
-        unset($this->locks[$name]);
-        return FALSE;
-      }
-
-      $result = $this->client->pipeline()
-        ->psetex($key, (int) ($timeout * 1000), $id)
-        ->exec();
-
-      // If the set failed, someone else wrote the key, we failed to acquire
-      // the lock.
-      if (FALSE === $result) {
-        unset($this->locks[$name]);
-        // Explicit transaction release which also frees the WATCH'ed key.
-        $this->client->discard();
-        return FALSE;
-      }
-
-      return ($this->locks[$name] = TRUE);
-    }
-    else {
-      // Use a SET with microsecond expiration and the NX flag, which will only
-      // succeed if the key does not exist yet.
-      $result = $this->client->set($key, $id, 'nx', 'px', (int) ($timeout * 1000));
-
-      // If the result is FALSE or NULL, we failed to acquire the lock.
-      if (FALSE === $result || NULL === $result) {
-        return FALSE;
-      }
-
-      // Register the lock.
-      return ($this->locks[$name] = TRUE);
-    }
-  }
-
-  public function lockMayBeAvailable($name) {
-    $key = $this->getKey($name);
-    $value = $this->client->get($key);
-
-    // In Drupal 7, this method treated the lock as available if the ID did
-    // match. The database backend and test expects it to return FALSE in that
-    // case, updated accordingly.
-    return FALSE === $value;
-  }
-
-  public function release($name) {
-    $key    = $this->getKey($name);
-    $id     = $this->getLockId();
-
-    unset($this->locks[$name]);
-
-    // Ensure the lock deletion is an atomic transaction. If another thread
-    // manages to removes all lock, we can not alter it anymore else we will
-    // release the lock for the other thread and cause race conditions.
-    $this->client->watch($key);
-
-    if ($this->client->get($key) == $id) {
-      $pipe = $this->client->pipeline();
-      $pipe->del([$key]);
-      $pipe->execute();
-    }
-    else {
-      $this->client->unwatch();
-    }
-  }
-
-  public function releaseAll($lock_id = NULL) {
-    // We can afford to deal with a slow algorithm here, this should not happen
-    // on normal run because we should have removed manually all our locks.
-    foreach ($this->locks as $name => $foo) {
-      $this->release($name);
-    }
-  }
-}
-
diff --git a/web/modules/redis/src/PersistentLock/PhpRedis.php b/web/modules/redis/src/PersistentLock/PhpRedis.php
deleted file mode 100644
index 9805f72364910ca109db899a8887824d7f2c6e6e..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/PersistentLock/PhpRedis.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Drupal\redis\PersistentLock;
-
-use Drupal\redis\ClientFactory;
-
-/**
- * PHpRedis persistent lock backend
- */
-class PhpRedis extends \Drupal\redis\Lock\PhpRedis {
-
-  /**
-   * Creates a PHpRedis persistent lock backend.
-   */
-  public function __construct(ClientFactory $factory) {
-    // Do not call the parent constructor to avoid registering a shutdown
-    // function that releases all the locks at the end of a request.
-    $this->client = $factory->getClient();
-    // Set the lockId to a fixed string to make the lock ID the same across
-    // multiple requests. The lock ID is used as a page token to relate all the
-    // locks set during a request to each other.
-    // @see \Drupal\Core\Lock\LockBackendInterface::getLockId()
-    $this->lockId = 'persistent';
-  }
-
-}
diff --git a/web/modules/redis/src/PersistentLock/Predis.php b/web/modules/redis/src/PersistentLock/Predis.php
deleted file mode 100644
index 79252e77e5398f7561c34a01ce8c2f9f63a1b255..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/PersistentLock/Predis.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Drupal\redis\PersistentLock;
-
-use Drupal\redis\ClientFactory;
-
-/**
- * Predis persistent lock backend
- */
-class Predis extends \Drupal\redis\Lock\Predis {
-
-  /**
-   * Creates a Predis persistent lock backend.
-   */
-  public function __construct(ClientFactory $factory) {
-    // Do not call the parent constructor to avoid registering a shutdown
-    // function that releases all the locks at the end of a request.
-    $this->client = $factory->getClient();
-    // Set the lockId to a fixed string to make the lock ID the same across
-    // multiple requests. The lock ID is used as a page token to relate all the
-    // locks set during a request to each other.
-    // @see \Drupal\Core\Lock\LockBackendInterface::getLockId()
-    $this->lockId = 'persistent';
-  }
-
-}
diff --git a/web/modules/redis/src/Queue/PhpRedis.php b/web/modules/redis/src/Queue/PhpRedis.php
deleted file mode 100644
index 530be0dfb3e1c46acdf77902bdf978886493eaf0..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/PhpRedis.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-/**
- * Redis queue implementation using PhpRedis extension backend.
- *
- * @ingroup queue
- */
-class PhpRedis extends QueueBase {
-
-  /**
-   * The Redis connection.
-   *
-   * @var \Redis $client
-   */
-  protected $client;
-
-  /**
-   * Constructs a \Drupal\redis\Queue\PhpRedis object.
-   *
-   * @param string $name
-   *   The name of the queue.
-   * @param array $settings
-   *   Array of Redis-related settings for this queue.
-   * @param \Redis $client
-   *   The PhpRedis client.
-   */
-  public function __construct($name, array $settings, \Redis $client) {
-    parent::__construct($name, $settings);
-    $this->client = $client;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function createItem($data) {
-    $record = new \stdClass();
-    $record->data = $data;
-    $record->qid = $this->incrementId();
-    // We cannot rely on REQUEST_TIME because many items might be created
-    // by a single request which takes longer than 1 second.
-    $record->timestamp = time();
-
-    if (!$this->client->hsetnx($this->availableItems, $record->qid, serialize($record))) {
-      return FALSE;
-    }
-
-    $start_len = $this->client->lLen($this->availableListKey);
-    if ($start_len < $this->client->lpush($this->availableListKey, $record->qid)) {
-      return $record->qid;
-    }
-
-    return FALSE;
-  }
-
-  /**
-   * Gets next serial ID for Redis queue items.
-   *
-   * @return int
-   *   Next serial ID for Redis queue item.
-   */
-  protected function incrementId() {
-    return $this->client->incr($this->incrementCounterKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function numberOfItems() {
-    return $this->client->lLen($this->availableListKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function claimItem($lease_time = 30) {
-    // Is it OK to do garbage collection here (we need to loop list of claimed
-    // items)?
-    $this->garbageCollection();
-    $item = FALSE;
-
-    if ($this->reserveTimeout !== NULL) {
-      // A blocking version of claimItem to be used with long-running queue workers.
-      $qid = $this->client->brpoplpush($this->availableListKey, $this->claimedListKey, $this->reserveTimeout);
-    }
-    else {
-      $qid = $this->client->rpoplpush($this->availableListKey, $this->claimedListKey);
-    }
-
-    if ($qid) {
-      $job = $this->client->hget($this->availableItems, $qid);
-      if ($job) {
-        $item = unserialize($job);
-        $this->client->setex($this->leasedKeyPrefix . $item->qid, $lease_time, '1');
-      }
-    }
-
-    return $item;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function releaseItem($item) {
-    $this->client->lrem($this->claimedListKey, $item->qid, -1);
-    $this->client->lpush($this->availableListKey, $item->qid);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteItem($item) {
-    $this->client->lrem($this->claimedListKey, $item->qid, -1);
-    $this->client->hdel($this->availableItems, $item->qid);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteQueue() {
-    $keys_to_remove = [
-      $this->claimedListKey,
-      $this->availableListKey,
-      $this->availableItems,
-      $this->incrementCounterKey
-    ];
-
-    foreach ($this->client->keys($this->leasedKeyPrefix . '*') as $key) {
-      $keys_to_remove[] = $key;
-    }
-
-    $this->client->del($keys_to_remove);
-  }
-
-  /**
-   * Automatically release items, that have been claimed and exceeded lease time.
-   */
-  protected function garbageCollection() {
-    foreach ($this->client->lrange($this->claimedListKey, 0, -1) as $qid) {
-      if (!$this->client->exists($this->leasedKeyPrefix . $qid)) {
-        // The lease expired for this ID.
-        $this->client->lrem($this->claimedListKey, $qid, -1);
-        $this->client->lpush($this->availableListKey, $qid);
-      }
-    }
-  }
-}
diff --git a/web/modules/redis/src/Queue/Predis.php b/web/modules/redis/src/Queue/Predis.php
deleted file mode 100644
index 4eec38e8c3fa5c1eb6d4e8e6bf49f96260498188..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/Predis.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-/**
- * Redis queue implementation using Predis library backend.
- *
- * @ingroup queue
- */
-class Predis extends QueueBase {
-
-  /**
-   * The Redis connection.
-   *
-   * @var \Predis\Client $client
-   */
-  protected $client;
-
-  /**
-   * Constructs a \Drupal\redis\Queue\Predis object.
-   *
-   * @param string $name
-   *   The name of the queue.
-   * @param array $settings
-   *   Array of Redis-related settings for this queue.
-   * @param \Predis\Client $client
-   *   The Predis client.
-   */
-  public function __construct($name, array $settings, \Predis\Client $client) {
-    parent::__construct($name, $settings);
-    $this->client = $client;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function createItem($data) {
-    // TODO: Fixme
-    $record = new \stdClass();
-    $record->data = $data;
-    $record->qid = $this->incrementId();
-    // We cannot rely on REQUEST_TIME because many items might be created
-    // by a single request which takes longer than 1 second.
-    $record->timestamp = time();
-
-    if (!$this->client->hsetnx($this->availableItems, $record->qid, serialize($record))) {
-      return FALSE;
-    }
-
-    $start_len = $this->client->lLen($this->availableListKey);
-    if ($start_len < $this->client->lpush($this->availableListKey, $record->qid)) {
-      return $record->qid;
-    }
-  }
-
-  /**
-   * Gets next serial ID for Redis queue items.
-   *
-   * @return int
-   *   Next serial ID for Redis queue item.
-   */
-  protected function incrementId() {
-    // TODO: Fixme
-    return $this->client->incr($this->incrementCounterKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function numberOfItems() {
-    // TODO: Fixme
-    return $this->client->lLen($this->availableListKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function claimItem($lease_time = 30) {
-    // Is it OK to do garbage collection here (we need to loop list of claimed
-    // items)?
-    $this->garbageCollection();
-    $item = FALSE;
-
-    if ($this->reserveTimeout !== NULL) {
-      // A blocking version of claimItem to be used with long-running queue workers.
-      $qid = $this->client->brpoplpush($this->availableListKey, $this->claimedListKey, $this->reserveTimeout);
-    }
-    else {
-      $qid = $this->client->rpoplpush($this->availableListKey, $this->claimedListKey);
-    }
-
-    if ($qid) {
-      $job = $this->client->hget($this->availableItems, $qid);
-      if ($job) {
-        $item = unserialize($job);
-        $this->client->setex($this->leasedKeyPrefix . $item->qid, $lease_time, '1');
-      }
-    }
-
-    return $item;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function releaseItem($item) {
-    // TODO: Fixme
-    $this->client->lrem($this->claimedListKey, $item->qid, -1);
-    $this->client->lpush($this->availableListKey, $item->qid);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteItem($item) {
-    // TODO: Fixme
-    $this->client->lrem($this->claimedListKey, $item->qid, -1);
-    $this->client->hdel($this->availableItems, $item->qid);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteQueue() {
-    // TODO: Fixme
-    $keys_to_remove = [
-      $this->claimedListKey,
-      $this->availableListKey,
-      $this->availableItems,
-      $this->incrementCounterKey
-    ];
-
-    foreach ($this->client->keys($this->leasedKeyPrefix . '*') as $key) {
-      $keys_to_remove[] = $key;
-    }
-
-    $this->client->del($keys_to_remove);
-  }
-
-  /**
-   * Automatically release items, that have been claimed and exceeded lease time.
-   */
-  protected function garbageCollection() {
-    foreach ($this->client->lrange($this->claimedListKey, 0, -1) as $qid) {
-      if (!$this->client->exists($this->leasedKeyPrefix . $qid)) {
-        // The lease expired for this ID.
-        $this->client->lrem($this->claimedListKey, $qid, -1);
-        $this->client->lpush($this->availableListKey, $qid);
-      }
-    }
-  }
-}
diff --git a/web/modules/redis/src/Queue/QueueBase.php b/web/modules/redis/src/Queue/QueueBase.php
deleted file mode 100644
index a09148e0cccf0fac8cf3a1234f015d088fafe73b..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/QueueBase.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-use Drupal\Core\Queue\QueueInterface;
-
-/**
- * Redis queue implementation.
- *
- * @ingroup queue
- */
-abstract class QueueBase implements QueueInterface {
-
-  /**
-   * Prefix used with all keys.
-   */
-  const KEY_PREFIX = 'drupal:queue:';
-
-  /**
-   * The name of the queue this instance is working with.
-   *
-   * @var string
-   */
-  protected $name;
-
-  /**
-   * Key for list of available items.
-   *
-   * @var string
-   */
-  protected $availableListKey;
-
-  /**
-   * Key for list of claimed items.
-   *
-   * @var string
-   */
-  protected $claimedListKey;
-
-  /**
-   * Key prefix for items that are used to track expiration of leased items.
-   *
-   * @var string
-   */
-  protected $leasedKeyPrefix;
-
-  /**
-   * Key of increment counter key.
-   *
-   * @var string
-   */
-  protected $incrementCounterKey;
-
-  /**
-   * Key for hash table of available queue items.
-   *
-   * @var string
-   */
-  protected $availableItems;
-
-  /**
-   * Reserve timeout for blocking item claim.
-   *
-   * This will be set to number of seconds to wait for an item to be claimed.
-   * Non-blocking approach will be used when set to NULL.
-   *
-   * @var int|null
-   */
-  protected $reserveTimeout;
-
-  /**
-   * Constructs a \Drupal\Core\Queue\DatabaseQueue object.
-   *
-   * @param string $name
-   *   The name of the queue.
-   * @param array $settings
-   *   Array of Redis-related settings for this queue.
-   */
-  public function __construct($name, array $settings) {
-    $this->name = $name;
-    $this->reserveTimeout = $settings['reserve_timeout'];
-    $this->availableListKey = static::KEY_PREFIX . $name . ':avail';
-    $this->availableItems = static::KEY_PREFIX . $name . ':items';
-    $this->claimedListKey = static::KEY_PREFIX . $name . ':claimed';
-    $this->leasedKeyPrefix = static::KEY_PREFIX . $name . ':lease:';
-    $this->incrementCounterKey = static::KEY_PREFIX . $name . ':counter';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function createQueue() {
-    // Nothing to do here.
-  }
-
-}
diff --git a/web/modules/redis/src/Queue/QueueRedisFactory.php b/web/modules/redis/src/Queue/QueueRedisFactory.php
deleted file mode 100644
index aabc1b79ffa84870e2e930e0862810a02f8d1f50..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/QueueRedisFactory.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-use Drupal\Core\Site\Settings;
-use Drupal\redis\ClientFactory;
-
-/**
- * Defines the queue factory for the Redis backend.
- */
-class QueueRedisFactory {
-
-  /**
-   * Queue implementation class namespace prefix.
-   */
-  const CLASS_NAMESPACE = ClientFactory::REDIS_IMPL_QUEUE;
-
-  /**
-   * @var \Drupal\redis\ClientFactory
-   */
-  protected $clientFactory;
-
-  /**
-   * The settings array.
-   *
-   * @var \Drupal\Core\Site\Settings
-   */
-  protected $settings;
-
-  /**
-   * Constructs this factory object.
-   *
-   * @param \Drupal\Core\Database\Connection $connection
-   *   The Connection object containing the key-value tables.
-   */
-  public function __construct(ClientFactory $client_factory, Settings $settings) {
-    $this->clientFactory = $client_factory;
-    $this->settings = $settings;
-  }
-
-  /**
-   * Constructs a new queue object for a given name.
-   *
-   * @param string $name
-   *   The name of the collection holding key and value pairs.
-   *
-   * @return \Drupal\Core\Queue\DatabaseQueue
-   *   A key/value store implementation for the given $collection.
-   */
-  public function get($name) {
-    $settings = $this->settings->get('redis_queue_' . $name, ['reserve_timeout' => NULL]);
-    $class_name = $this->clientFactory->getClass(static::CLASS_NAMESPACE);
-    return new $class_name($name, $settings, $this->clientFactory->getClient());
-  }
-
-}
diff --git a/web/modules/redis/src/Queue/ReliablePhpRedis.php b/web/modules/redis/src/Queue/ReliablePhpRedis.php
deleted file mode 100644
index 76eb17810e301d71683a234581b6c70c5ae35af1..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/ReliablePhpRedis.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-/**
- * Redis queue implementation using PhpRedis extension backend.
- *
- * @ingroup queue
- */
-class ReliablePhpRedis extends ReliableQueueBase {
-
-  /**
-   * The Redis connection.
-   *
-   * @var \Redis $client
-   */
-  protected $client;
-
-  /**
-   * Constructs a \Drupal\redis\Queue\PhpRedis object.
-   *
-   * @param string $name
-   *   The name of the queue.
-   * @param array $settings
-   *   Array of Redis-related settings for this queue.
-   * @param \Redis $client
-   *   The PhpRedis client.
-   */
-  public function __construct($name, array $settings, \Redis $client) {
-    parent::__construct($name, $settings);
-    $this->client = $client;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function createItem($data) {
-    $record = new \stdClass();
-    $record->data = $data;
-    $record->qid = $this->incrementId();
-    // We cannot rely on REQUEST_TIME because many items might be created
-    // by a single request which takes longer than 1 second.
-    $record->timestamp = time();
-
-    $result = $this->client->multi()
-      ->hsetnx($this->availableItems, $record->qid, serialize($record))
-      ->lLen($this->availableListKey)
-      ->lpush($this->availableListKey, $record->qid)
-      ->exec();
-
-    $success = $result[0] && $result[2] > $result[1];
-
-    return $success ? $record->qid : FALSE;
-  }
-
-  /**
-   * Gets next serial ID for Redis queue items.
-   *
-   * @return int
-   *   Next serial ID for Redis queue item.
-   */
-  protected function incrementId() {
-    return $this->client->incr($this->incrementCounterKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function numberOfItems() {
-    return $this->client->lLen($this->availableListKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function claimItem($lease_time = 30) {
-    // Is it OK to do garbage collection here (we need to loop list of claimed
-    // items)?
-    $this->garbageCollection();
-    $item = FALSE;
-
-    if ($this->reserveTimeout !== NULL) {
-      // A blocking version of claimItem to be used with long-running queue workers.
-      $qid = $this->client->brpoplpush($this->availableListKey, $this->claimedListKey, $this->reserveTimeout);
-    }
-    else {
-      $qid = $this->client->rpoplpush($this->availableListKey, $this->claimedListKey);
-    }
-
-    if ($qid) {
-      $job = $this->client->hget($this->availableItems, $qid);
-      if ($job) {
-        $item = unserialize($job);
-        $this->client->setex($this->leasedKeyPrefix . $item->qid, $lease_time, '1');
-      }
-    }
-
-    return $item;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function releaseItem($item) {
-    $this->client->multi()
-      ->lrem($this->claimedListKey, $item->qid, -1)
-      ->lpush($this->availableListKey, $item->qid)
-      ->exec();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteItem($item) {
-    $this->client->multi()
-      ->lrem($this->claimedListKey, $item->qid, -1)
-      ->hdel($this->availableItems, $item->qid)
-      ->exec();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteQueue() {
-    $keys_to_remove = [
-      $this->claimedListKey,
-      $this->availableListKey,
-      $this->availableItems,
-      $this->incrementCounterKey
-    ];
-
-    foreach ($this->client->keys($this->leasedKeyPrefix . '*') as $key) {
-      $keys_to_remove[] = $key;
-    }
-
-    $this->client->del($keys_to_remove);
-  }
-
-  /**
-   * Automatically release items, that have been claimed and exceeded lease time.
-   */
-  protected function garbageCollection() {
-    foreach ($this->client->lrange($this->claimedListKey, 0, -1) as $qid) {
-      if (!$this->client->exists($this->leasedKeyPrefix . $qid)) {
-        // The lease expired for this ID.
-        $this->client->multi()
-          ->lrem($this->claimedListKey, $qid, -1)
-          ->lpush($this->availableListKey, $qid)
-          ->exec();
-      }
-    }
-  }
-}
diff --git a/web/modules/redis/src/Queue/ReliablePredis.php b/web/modules/redis/src/Queue/ReliablePredis.php
deleted file mode 100644
index 7458b745b983557dc45e7701f2520c71a54228a3..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/ReliablePredis.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-/**
- * Redis queue implementation using Predis library backend.
- *
- * @ingroup queue
- */
-class ReliablePredis extends ReliableQueueBase {
-
-  /**
-   * The Redis connection.
-   *
-   * @var \Predis\Client $client
-   */
-  protected $client;
-
-  /**
-   * Constructs a \Drupal\redis\Queue\Predis object.
-   *
-   * @param string $name
-   *   The name of the queue.
-   * @param array $settings
-   *   Array of Redis-related settings for this queue.
-   * @param \Predis\Client $client
-   *   The Predis client.
-   */
-  public function __construct($name, array $settings, \Predis\Client $client) {
-    parent::__construct($name, $settings);
-    $this->client = $client;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function createItem($data) {
-    $record = new \stdClass();
-    $record->data = $data;
-    $record->qid = $this->incrementId();
-    // We cannot rely on REQUEST_TIME because many items might be created
-    // by a single request which takes longer than 1 second.
-    $record->timestamp = time();
-
-    $pipe = $this->client->pipeline();
-    $pipe->hsetnx($this->availableItems, $record->qid, serialize($record));
-    $pipe->lLen($this->availableListKey);
-    $pipe->lpush($this->availableListKey, $record->qid);
-    $result = $pipe->execute();
-
-    $success = $result[0] && $result[2] > $result[1];
-
-    return $success ? $record->qid : FALSE;
-  }
-
-  /**
-   * Gets next serial ID for Redis queue items.
-   *
-   * @return int
-   *   Next serial ID for Redis queue item.
-   */
-  protected function incrementId() {
-    // TODO: Fixme
-    return $this->client->incr($this->incrementCounterKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function numberOfItems() {
-    // TODO: Fixme
-    return $this->client->lLen($this->availableListKey);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function claimItem($lease_time = 30) {
-    // Is it OK to do garbage collection here (we need to loop list of claimed
-    // items)?
-    $this->garbageCollection();
-    $item = FALSE;
-
-    if ($this->reserveTimeout !== NULL) {
-      // A blocking version of claimItem to be used with long-running queue workers.
-      $qid = $this->client->brpoplpush($this->availableListKey, $this->claimedListKey, $this->reserveTimeout);
-    }
-    else {
-      $qid = $this->client->rpoplpush($this->availableListKey, $this->claimedListKey);
-    }
-
-    if ($qid) {
-      $job = $this->client->hget($this->availableItems, $qid);
-      if ($job) {
-        $item = unserialize($job);
-        $this->client->setex($this->leasedKeyPrefix . $item->qid, $lease_time, '1');
-      }
-    }
-
-    return $item;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function releaseItem($item) {
-    // TODO: Fixme
-    $this->client->pipeline()
-      ->lrem($this->claimedListKey, $item->qid, -1)
-      ->lpush($this->availableListKey, $item->qid)
-      ->exec();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteItem($item) {
-    // TODO: Fixme
-    $this->client->pipeline()
-      ->lrem($this->claimedListKey, $item->qid, -1)
-      ->hdel($this->availableItems, $item->qid)
-      ->exec();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function deleteQueue() {
-    // TODO: Fixme
-    $keys_to_remove = [
-      $this->claimedListKey,
-      $this->availableListKey,
-      $this->availableItems,
-      $this->incrementCounterKey
-    ];
-
-    foreach ($this->client->keys($this->leasedKeyPrefix . '*') as $key) {
-      $keys_to_remove[] = $key;
-    }
-
-    $this->client->del($keys_to_remove);
-  }
-
-  /**
-   * Automatically release items, that have been claimed and exceeded lease time.
-   */
-  protected function garbageCollection() {
-    foreach ($this->client->lrange($this->claimedListKey, 0, -1) as $qid) {
-      if (!$this->client->exists($this->leasedKeyPrefix . $qid)) {
-        // The lease expired for this ID.
-        $this->client->lrem($this->claimedListKey, $qid, -1);
-        $this->client->lpush($this->availableListKey, $qid);
-      }
-    }
-  }
-}
diff --git a/web/modules/redis/src/Queue/ReliableQueueBase.php b/web/modules/redis/src/Queue/ReliableQueueBase.php
deleted file mode 100644
index f8caba2a01f8bfb032cb0f793cd33024ccfe71a4..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/ReliableQueueBase.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-use Drupal\Core\Queue\ReliableQueueInterface;
-
-/**
- * Redis queue implementation.
- *
- * @ingroup queue
- */
-abstract class ReliableQueueBase extends QueueBase implements ReliableQueueInterface {
-
-}
diff --git a/web/modules/redis/src/Queue/ReliableQueueRedisFactory.php b/web/modules/redis/src/Queue/ReliableQueueRedisFactory.php
deleted file mode 100644
index 0ce715674d863b154420e590b42a83a4fcda10cd..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/Queue/ReliableQueueRedisFactory.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Drupal\redis\Queue;
-
-use Drupal\redis\ClientFactory;
-
-/**
- * Defines the queue factory for the Redis backend.
- */
-class ReliableQueueRedisFactory extends QueueRedisFactory {
-
-  /**
-   * Queue implementation class namespace prefix.
-   */
-  const CLASS_NAMESPACE = ClientFactory::REDIS_IMPL_RELIABLE_QUEUE;
-
-}
diff --git a/web/modules/redis/src/RedisPrefixTrait.php b/web/modules/redis/src/RedisPrefixTrait.php
deleted file mode 100644
index 658af048da76091174e507a9086b25161f3d1002..0000000000000000000000000000000000000000
--- a/web/modules/redis/src/RedisPrefixTrait.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-namespace Drupal\redis;
-
-use Drupal\Core\Site\Settings;
-
-trait RedisPrefixTrait {
-
-  /**
-   * @var string
-   */
-  protected $prefix;
-
-  /**
-   * Get global default prefix
-   *
-   * @param string $suffix
-   *
-   * @return string
-   */
-  protected function getDefaultPrefix($suffix = NULL) {
-    $ret = NULL;
-
-    if ($test_prefix = drupal_valid_test_ua()) {
-      $ret = $test_prefix;
-    }
-    else {
-      $prefixes = Settings::get('cache_prefix', '');
-
-      if (is_string($prefixes)) {
-        // Variable can be a string which then considered as a default
-        // behavior.
-        $ret = $prefixes;
-      }
-      else if (NULL !== $suffix && isset($prefixes[$suffix])) {
-        if (FALSE !== $prefixes[$suffix]) {
-          // If entry is set and not false an explicit prefix is set
-          // for the bin.
-          $ret = $prefixes[$suffix];
-        }
-        else {
-          // If we have an explicit false it means no prefix whatever
-          // is the default configuration.
-          $ret = '';
-        }
-      }
-      else {
-        // Key is not set, we can safely rely on default behavior.
-        if (isset($prefixes['default']) && FALSE !== $prefixes['default']) {
-          $ret = $prefixes['default'];
-        }
-        else {
-          // When default is not set or an explicit false this means
-          // no prefix.
-          $ret = '';
-        }
-      }
-    }
-
-    if (empty($ret)) {
-      // If no prefix is given, use the same logic as core for APCu caching.
-      $ret = Settings::getApcuPrefix('redis', DRUPAL_ROOT);
-    }
-
-    return $ret;
-  }
-
-  /**
-   * Set prefix
-   *
-   * @param string $prefix
-   */
-  public function setPrefix($prefix) {
-    $this->prefix = $prefix;
-  }
-
-  /**
-   * Get prefix
-   *
-   * @return string
-   */
-  protected function getPrefix() {
-    if (!isset($this->prefix)) {
-      $this->prefix = $this->getDefaultPrefix();
-    }
-    return $this->prefix;
-  }
-
-}
diff --git a/web/modules/redis/tests/src/Functional/Lock/RedisLockFunctionalTest.php b/web/modules/redis/tests/src/Functional/Lock/RedisLockFunctionalTest.php
deleted file mode 100644
index d74a05ee2a87a63c220092a27622e0b8e4cc1b07..0000000000000000000000000000000000000000
--- a/web/modules/redis/tests/src/Functional/Lock/RedisLockFunctionalTest.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace Drupal\Tests\redis\Functional\Lock;
-
-use Drupal\Component\Utility\OpCodeCache;
-use Drupal\Core\Database\Database;
-use Drupal\Core\Site\Settings;
-use Drupal\Tests\system\Functional\Lock\LockFunctionalTest;
-use Drupal\Tests\redis\Traits\RedisTestInterfaceTrait;
-
-/**
- * Confirm locking works between two separate requests.
- *
- * @group redis
- */
-class RedisLockFunctionalTest extends LockFunctionalTest {
-
-  use RedisTestInterfaceTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['redis'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    // Write the containers_yaml update by hand, since writeSettings() doesn't
-    // support this syntax.
-    $filename = $this->siteDirectory . '/settings.php';
-    chmod($filename, 0666);
-    $contents = file_get_contents($filename);
-    $redis_interface = self::getRedisInterfaceEnv();
-    $contents .= "\n\n" . '$settings[\'container_yamls\'][] = \'modules/redis/example.services.yml\';';
-    $contents .= "\n\n" . '$settings["redis.connection"]["interface"] = \'' . $redis_interface . '\';';
-    file_put_contents($filename, $contents);
-    $settings = Settings::getAll();
-    $settings['container_yamls'][] = 'modules/redis/example.services.yml';
-    $settings['redis.connection']['interface'] = $redis_interface;
-    new Settings($settings);
-    OpCodeCache::invalidate(DRUPAL_ROOT . '/' . $filename);
-
-    $this->rebuildContainer();
-
-    // Get database schema.
-    $db_schema = Database::getConnection()->schema();
-    // Make sure that the semaphore table isn't used.
-    $db_schema->dropTable('semaphore');
-  }
-
-}
diff --git a/web/modules/redis/tests/src/Functional/WebTest.php b/web/modules/redis/tests/src/Functional/WebTest.php
deleted file mode 100644
index e49dfa3472ea47ddcf912668cb006493722499cf..0000000000000000000000000000000000000000
--- a/web/modules/redis/tests/src/Functional/WebTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-namespace Drupal\Tests\redis\Functional;
-
-use Drupal\Component\Utility\OpCodeCache;
-use Drupal\Core\Database\Database;
-use Drupal\Core\Site\Settings;
-use Drupal\field_ui\Tests\FieldUiTestTrait;
-use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\redis\Traits\RedisTestInterfaceTrait;
-
-/**
- * Tests complex processes like installing modules with redis backends.
- *
- * @group redis
- */
-class WebTest extends BrowserTestBase {
-
-  use FieldUiTestTrait;
-  use RedisTestInterfaceTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['redis', 'block'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->drupalPlaceBlock('system_breadcrumb_block');
-    $this->drupalPlaceBlock('local_tasks_block');
-
-    // Set in-memory settings.
-    $settings = Settings::getAll();
-
-    // Get REDIS_INTERFACE env variable.
-    $redis_interface = self::getRedisInterfaceEnv();
-    $settings['redis.connection']['interface'] = $redis_interface;
-
-    $settings['cache'] = [
-      'default' => 'cache.backend.redis',
-    ];
-
-    $settings['container_yamls'][] = drupal_get_path('module', 'redis') . '/example.services.yml';
-
-    $settings['bootstrap_container_definition'] = [
-      'parameters' => [],
-      'services' => [
-        'redis.factory' => [
-          'class' => 'Drupal\redis\ClientFactory',
-        ],
-        'cache.backend.redis' => [
-          'class' => 'Drupal\redis\Cache\CacheBackendFactory',
-          'arguments' => ['@redis.factory', '@cache_tags_provider.container', '@serialization.phpserialize'],
-        ],
-        'cache.container' => [
-          'class' => '\Drupal\redis\Cache\PhpRedis',
-          'factory' => ['@cache.backend.redis', 'get'],
-          'arguments' => ['container'],
-        ],
-        'cache_tags_provider.container' => [
-          'class' => 'Drupal\redis\Cache\RedisCacheTagsChecksum',
-          'arguments' => ['@redis.factory'],
-        ],
-        'serialization.phpserialize' => [
-          'class' => 'Drupal\Component\Serialization\PhpSerialize',
-        ],
-      ],
-    ];
-    new Settings($settings);
-
-    // Write the containers_yaml update by hand, since writeSettings() doesn't
-    // support some of the definitions.
-    $filename = $this->siteDirectory . '/settings.php';
-    chmod($filename, 0666);
-    $contents = file_get_contents($filename);
-
-    // Add the container_yaml and cache definition.
-    $contents .= "\n\n" . '$settings["container_yamls"][] = "' . drupal_get_path('module', 'redis') . '/example.services.yml";';
-    $contents .= "\n\n" . '$settings["cache"] = ' . var_export($settings['cache'], TRUE) . ';';
-
-    // Add the classloader.
-    $contents .= "\n\n" . '$class_loader->addPsr4(\'Drupal\\\\redis\\\\\', \'' . drupal_get_path('module', 'redis') . '/src\');';
-
-    // Add the bootstrap container definition.
-    $contents .= "\n\n" . '$settings["bootstrap_container_definition"] = ' . var_export($settings['bootstrap_container_definition'], TRUE) . ';';
-
-    file_put_contents($filename, $contents);
-    OpCodeCache::invalidate(DRUPAL_ROOT . '/' . $filename);
-
-    // Reset the cache factory.
-    $this->container->set('cache.factory', NULL);
-    $this->rebuildContainer();
-
-    // Get database schema.
-    $db_schema = Database::getConnection()->schema();
-
-    // Make sure that the cache and lock tables aren't used.
-    $db_schema->dropTable('cache_default');
-    $db_schema->dropTable('cache_render');
-    $db_schema->dropTable('cache_config');
-    $db_schema->dropTable('cache_container');
-    $db_schema->dropTable('cachetags');
-    $db_schema->dropTable('semaphore');
-    $db_schema->dropTable('flood');
-  }
-
-  /**
-   * Tests enabling modules and creating configuration.
-   */
-  public function testModuleInstallation() {
-    $admin_user = $this->createUser([], NULL, TRUE);
-    $this->drupalLogin($admin_user);
-
-    // Enable a few modules.
-    $edit["modules[node][enable]"] = TRUE;
-    $edit["modules[views][enable]"] = TRUE;
-    $edit["modules[field_ui][enable]"] = TRUE;
-    $edit["modules[text][enable]"] = TRUE;
-    $this->drupalPostForm('admin/modules', $edit, t('Install'));
-    $this->drupalPostForm(NULL, [], t('Continue'));
-
-    $assert = $this->assertSession();
-
-    // The order of the modules is not guaranteed, so just assert that they are
-    // all listed.
-    $assert->elementTextContains('css', '.messages--status', '6 modules have been enabled');
-    $assert->elementTextContains('css', '.messages--status', 'Field UI');
-    $assert->elementTextContains('css', '.messages--status', 'Node');
-    $assert->elementTextContains('css', '.messages--status', 'Text');
-    $assert->elementTextContains('css', '.messages--status', 'Views');
-    $assert->elementTextContains('css', '.messages--status', 'Field');
-    $assert->elementTextContains('css', '.messages--status', 'Filter');
-    $assert->checkboxChecked('edit-modules-field-ui-enable');
-
-    // Create a node type with a field.
-    $edit = [
-      'name' => $this->randomString(),
-      'type' => $node_type = mb_strtolower($this->randomMachineName()),
-    ];
-    $this->drupalPostForm('admin/structure/types/add', $edit, t('Save and manage fields'));
-    $field_name = mb_strtolower($this->randomMachineName());
-    $this->fieldUIAddNewField('admin/structure/types/manage/' . $node_type, $field_name, NULL, 'text');
-
-    // Create a node, check display, edit, verify that it has been updated.
-    $edit = [
-      'title[0][value]' => $this->randomMachineName(),
-      'body[0][value]' => $this->randomMachineName(),
-      'field_' . $field_name . '[0][value]' => $this->randomMachineName(),
-    ];
-    $this->drupalPostForm('node/add/' . $node_type, $edit, t('Save'));
-
-    // Test the output as anonymous user.
-    $this->drupalLogout();
-    $this->drupalGet('node');
-    $this->assertSession()->responseContains($edit['title[0][value]']);
-
-    $this->drupalLogin($admin_user);
-    $this->drupalGet('node');
-    $this->clickLink($edit['title[0][value]']);
-    $this->assertSession()->responseContains($edit['body[0][value]']);
-    $this->clickLink(t('Edit'));
-    $update = [
-      'title[0][value]' => $this->randomMachineName(),
-    ];
-    $this->drupalPostForm(NULL, $update, t('Save'));
-    $this->assertSession()->responseContains($update['title[0][value]']);
-    $this->drupalGet('node');
-    $this->assertSession()->responseContains($update['title[0][value]']);
-
-    $this->drupalLogout();
-    $this->drupalGet('node');
-    $this->clickLink($update['title[0][value]']);
-    $this->assertSession()->responseContains($edit['body[0][value]']);
-
-    // Get database schema.
-    $db_schema = Database::getConnection()->schema();
-    $this->assertFalse($db_schema->tableExists('cache_default'));
-    $this->assertFalse($db_schema->tableExists('cache_render'));
-    $this->assertFalse($db_schema->tableExists('cache_config'));
-    $this->assertFalse($db_schema->tableExists('cache_container'));
-    $this->assertFalse($db_schema->tableExists('cachetags'));
-    $this->assertFalse($db_schema->tableExists('semaphore'));
-    $this->assertFalse($db_schema->tableExists('flood'));
-  }
-
-}
diff --git a/web/modules/redis/tests/src/Kernel/RedisCacheTest.php b/web/modules/redis/tests/src/Kernel/RedisCacheTest.php
deleted file mode 100644
index 8668be316ed4af31d4b3273c7293629d389f0339..0000000000000000000000000000000000000000
--- a/web/modules/redis/tests/src/Kernel/RedisCacheTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace Drupal\Tests\redis\Kernel;
-
-use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Drupal\KernelTests\Core\Cache\GenericCacheBackendUnitTestBase;
-use Symfony\Component\DependencyInjection\Reference;
-use Drupal\Tests\redis\Traits\RedisTestInterfaceTrait;
-
-/**
- * Tests Redis cache backend using GenericCacheBackendUnitTestBase.
- *
- * @group redis
- */
-class RedisCacheTest extends GenericCacheBackendUnitTestBase {
-
-  use RedisTestInterfaceTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['system', 'redis'];
-
-  public function register(ContainerBuilder $container) {
-    self::setUpSettings();
-    parent::register($container);
-    // Replace the default checksum service with the redis implementation.
-    if ($container->has('redis.factory')) {
-      $container->register('cache_tags.invalidator.checksum', 'Drupal\redis\Cache\RedisCacheTagsChecksum')
-        ->addArgument(new Reference('redis.factory'))
-        ->addTag('cache_tags_invalidator');
-    }
-  }
-
-  /**
-   * Creates a new instance of PhpRedis cache backend.
-   *
-   * @return \Drupal\redis\Cache\PhpRedis
-   *   A new PhpRedis cache backend.
-   */
-  protected function createCacheBackend($bin) {
-    $cache = \Drupal::service('cache.backend.redis')->get($bin);
-    $cache->setMinTtl(10);
-    return $cache;
-  }
-
-}
diff --git a/web/modules/redis/tests/src/Kernel/RedisFloodTest.php b/web/modules/redis/tests/src/Kernel/RedisFloodTest.php
deleted file mode 100644
index 62dd416032c2b5b8875bdab51b3df356b11bac56..0000000000000000000000000000000000000000
--- a/web/modules/redis/tests/src/Kernel/RedisFloodTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-namespace Drupal\Tests\redis\Kernel;
-
-use Drupal\KernelTests\KernelTestBase;
-use Drupal\redis\Flood\PhpRedis;
-use Drupal\Tests\redis\Traits\RedisTestInterfaceTrait;
-
-/**
- * Tests Redis flood backend.
- *
- * @group redis
- */
-class RedisFloodTest extends KernelTestBase {
-
-  use RedisTestInterfaceTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['redis'];
-
-  /**
-   * Test flood control.
-   */
-  public function testFlood() {
-    self::setUpSettings();
-    $threshold = 2;
-    $window = 1;
-    $name = 'flood_test_cleanup';
-
-    $client_factory = \Drupal::service('redis.factory');
-    $request_stack = \Drupal::service('request_stack');
-    $flood = new PhpRedis($client_factory, $request_stack);
-
-    // By default the event is allowed.
-    $this->assertTrue($flood->isAllowed($name, $threshold));
-
-    // Register event.
-    $flood->register($name, $window);
-
-    // The event is still allowed.
-    $this->assertTrue($flood->isAllowed($name, $threshold));
-
-    $flood->register($name, $window);
-
-    // Verify event is not allowed.
-    $this->assertFalse($flood->isAllowed($name, $threshold));
-
-    // "Sleep" two seconds, then the event is allowed again.
-    $_SERVER['REQUEST_TIME'] += 2;
-    $this->assertTrue($flood->isAllowed($name, $threshold));
-
-  }
-
-}
diff --git a/web/modules/redis/tests/src/Kernel/RedisQueueTest.php b/web/modules/redis/tests/src/Kernel/RedisQueueTest.php
deleted file mode 100644
index 78110049ae689ec4a220eac8cf213cd9e2775967..0000000000000000000000000000000000000000
--- a/web/modules/redis/tests/src/Kernel/RedisQueueTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-namespace Drupal\Tests\redis\Kernel;
-
-use Drupal\redis\ClientFactory;
-use \Drupal\KernelTests\Core\Queue\QueueTest as CoreQueueTest;
-use Drupal\Tests\redis\Traits\RedisTestInterfaceTrait;
-
-/**
- * Tests the Redis queue functions.
- *
- * @group redis
- */
-class RedisQueueTest extends CoreQueueTest {
-
-  use RedisTestInterfaceTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['redis'];
-
-  /**
-   * Tests Redis non-blocking queue.
-   */
-  public function testRedisNonBlockingQueue() {
-    self::setUpSettings();
-    $client_factory = \Drupal::service('redis.factory');
-    $settings = ['reserve_timeout' => NULL];
-    $class_name = $client_factory->getClass(ClientFactory::REDIS_IMPL_QUEUE);
-
-    /** @var \Drupal\Core\Queue\QueueInterface $queue1 */
-    $queue1 = new $class_name($this->randomMachineName(), $settings, $client_factory->getClient());
-    $queue1->createQueue();
-
-    /** @var \Drupal\Core\Queue\QueueInterface $queue2 */
-    $queue2 = new $class_name($this->randomMachineName(), $settings, $client_factory->getClient());
-    $queue2->createQueue();
-
-    $this->runQueueTest($queue1, $queue2);
-    $queue1->deleteQueue();
-    $queue2->deleteQueue();
-
-    $class_name = $client_factory->getClass(ClientFactory::REDIS_IMPL_RELIABLE_QUEUE);
-
-    /** @var \Drupal\Core\Queue\QueueInterface $queue1 */
-    $queue1 = new $class_name($this->randomMachineName(), $settings, $client_factory->getClient());
-    $queue1->createQueue();
-
-    /** @var \Drupal\Core\Queue\QueueInterface $queue2 */
-    $queue2 = new $class_name($this->randomMachineName(), $settings, $client_factory->getClient());
-    $queue2->createQueue();
-
-    $this->runQueueTest($queue1, $queue2);
-  }
-
-  /**
-   * Tests Redis blocking queue.
-   */
-  public function testRedisBlockingQueue() {
-    self::setUpSettings();
-    // Create two queues.
-    $client_factory = \Drupal::service('redis.factory');
-    $settings = ['reserve_timeout' => 30];
-    $class_name = $client_factory->getClass(ClientFactory::REDIS_IMPL_QUEUE);
-
-    /** @var \Drupal\Core\Queue\QueueInterface $queue1 */
-    $queue1 = new $class_name($this->randomMachineName(), $settings, $client_factory->getClient());
-    $queue1->createQueue();
-
-    /** @var \Drupal\Core\Queue\QueueInterface $queue2 */
-    $queue2 = new $class_name($this->randomMachineName(), $settings, $client_factory->getClient());
-    $queue2->createQueue();
-
-    $this->runQueueTest($queue1, $queue2);
-  }
-
-  /**
-   * Overrides \Drupal\system\Tests\Queue\QueueTestQueueTest::testSystemQueue().
-   *
-   * We override tests from core class we extend to prevent them from running.
-   */
-  public function testSystemQueue() {}
-
-  /**
-   * Overrides \Drupal\system\Tests\Queue\QueueTestQueueTest::testMemoryQueue().
-   *
-   * We override tests from core class we extend to prevent them from running.
-   */
-  public function testMemoryQueue() {}
-
-}
-
diff --git a/web/modules/redis/tests/src/Traits/RedisTestInterfaceTrait.php b/web/modules/redis/tests/src/Traits/RedisTestInterfaceTrait.php
deleted file mode 100644
index 092b8c73e45e5161ba39c408cfce2fe0c92bd27b..0000000000000000000000000000000000000000
--- a/web/modules/redis/tests/src/Traits/RedisTestInterfaceTrait.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace Drupal\Tests\redis\Traits;
-
-use Drupal\Core\Site\Settings;
-
-trait RedisTestInterfaceTrait {
-
-  /**
- * Uses an env variable to set the redis client to use for this test.
- */
-  public function setUpSettings() {
-
-    // Write redis_interface settings manually.
-    $redis_interface = self::getRedisInterfaceEnv();
-    $settings = Settings::getAll();
-    $settings['redis.connection']['interface'] = $redis_interface;
-    new Settings($settings);
-  }
-
-  /**
-   * Uses an env variable to set the redis client to use for this test.
-   */
-  public function getRedisInterfaceEnv() {
-
-    // Get REDIS_INTERFACE from env variable.
-    $redis_interface = getenv('REDIS_INTERFACE');
-
-    // Default to PhpRedis is env variable not available.
-    if ($redis_interface == FALSE) {
-      $redis_interface = 'PhpRedis';
-    }
-    return $redis_interface;
-  }
-
-}