A Moodle cache store plugin for RedisCluster.
- A Redis Cluster (version 4.0 or better)
 - PhpRedis extension (version 4.0 or better)
 - php-igbinary if using igbinary as the serialization method (recommended)
 
This is the main use of this plugin - providing a way to use a Redis Cluster as a Moodle™ cache.
Configurable options:
- failover mode: how phpredis handles reads/writes, one of:
- none
 - error (reads from a slave on error)
 - distribute (distributes reads over masters/slaves)
 
 - serializer: igbinary or php
 - compression: compresses data stored in redis - (de)compression occuring within phpredis
 
Moodle™ can be configured to use the Redis Cluster (or a different one) as the session store by setting:
$CFG->session_handler_class = '\cachestore_rediscluster\session';
Configuration options can be set with:
$CFG->session_rediscluster = [
    'server' => '192.168.1.100:6379',
    'serversecondary' => '192.168.1.101:6379:,
    'prefix' => "mdlsession_{$CFG->dbname}:",
    'acquire_lock_timeout' => 60,
    'lock_expire' => 600,
    'max_waiters' => 10,
];
The only required setting in the above array is server.
The following options govern session locking:
- acquire_lock_timeout: How long to wait for a lock to be released before giving up
 - lock_expire: How long before a lock is released automatically
 - max_waiters: How many threads can a session have waiting for a lock
 
Max waiters lets you define how many how many php threads a single user is allowed to have waiting for a session lock. Requests that don't take a session lock are unaffected.
By default, max_waiters is set to 10. Set it to 0 to use default Moodle™ behaviour.
Scripts with the NO_SESSION_LOCK define set to true ignore the max waiter behaviour.
If you use the auth_saml2 plugin, you can configure it to use Redis Cluster for session storage by setting:
$CFG->auth_saml2_store = '\\cachestore_rediscluster\\auth_saml2_store';
Configuration options can then be set with:
$CFG->auth_saml2_rediscluster = [
    // The same options as are available in the standard session handler are supported here.
];
Copyright (c) 2021 Open LMS (https://www.openlms.net)
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 3 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, see http://www.gnu.org/licenses/.