Resource icon

Unmaintained Zend Redis Cache 1.6.0

No permission to download
XF2 version

Q. Upgrading to XF2 fails with PHP message: PHP Fatal error: Uncaught Error: Class 'XenForo_Application' not found in library/config.php
A. You must disable pipelining before upgrading to XF2, and I recommend disabling caching entirely as it is uses a XF1 aware caching provider which may cause issues during upgrading.

Q: There are a lot of the errors; "CredisException: read error on connection" or "CredisException: protocol error, got 'xxx' as reply type byte" being logged
A: Please be aware that Redis is very sensitive to latency in a virtual environment. If repeated connection failures or protocol errors are experienced disable any Redis Persistence options. Additionally, check CPU steal as this can also cause latency issues.

Additionally, check the redis log file ( /var/log/redis/redis.log ) for any warnings. Key things to look for:
  • WARNING you have Transparent Huge Pages (THP) support enabled in your kernel
    Run:
    Code:
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    Add to /etc/rc.local
    Code:
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • WARNING /proc/sys/net/core/somaxconn is set to the lower value of 128
    Run:
    Code:
    sysctl -w net.core.somaxconn=512
    Add to /etc/sysctl.d/redis.conf (or /etc/sysctl.conf)
    Code:
    net.core.somaxconn=512
    You may require to adjust "net.ipv4.tcp_max_syn_backlog" to be larger!
  • WARNING overcommit_memory is set to 0! Background save may fail under low memory condition
    Run:
    Code:
    sysctl -w vm.overcommit_memory =1
    Add to /etc/sysctl.d/redis.conf (or /etc/sysctl.conf)
    Code:
    vm.overcommit_memory =1
(All 'fixes' require restarting redis to apply).

You may need to increase tcp-backlog from the stock 511, please ensure net.core.somaxconn is adjusted as well!

This server configuration advise is best effort, and not guarantied as it is well outside the scope of this add-on.

Q. CPU Steal is mentioned as causing latency issue, how do I check this.
A. On Linux, run:
Code:
screen
iostat -c -t 30 > /tmp/cpu_stats.log
Then after a day or so; check your max CPU steal:

Code:
cat /tmp/cpu_stats.log | grep -v iowait | awk '{print $5;}'  | sort -rn | more

Q: Support for earlier versions of XenForo
A: Only XenForo 1.4 or greater is supported.

Q: Support for later versions of XenForo (2.x)
A: See Redis Cache by Xon add-on for XenForo 2.x support

Q: Redis Configuration
A: Please see the Redis Documenatation.

Alternatively, you can use @eva2000's How to install Redis server on Centmin Mod LEMP stack Guide.

Q:Make Redis behave like Memcache
A: See Using Redis as an LRU cache, and make sure to set maxmemory!

For Redis 3.x, consider adding "maxmemory-policy allkeys-lru".

You may wish to disable the periodic 'save' directives which can cause latency on high-usage websites in virtual environments.

Q: Sample XenForo Configuration using TCP
A: Please see https://xenforo.com/help/cache/ for details on setting up the general XenForo Cache.

The minimum configuration is:
Code:
$config['cache']['enabled'] = true;
$config['cache']['frontend'] = 'Core';
$config['cache']['frontendOptions']['cache_id_prefix'] = 'xf_';
$config['cache']['backend'] = 'Redis';
$config['cache']['backendOptions'] = array(
        'server' => '127.0.0.1',
        'port' => 6379,
        'use_lua' => true,
        'compress_data' => 6,
    );
require(XenForo_Application::getInstance()->getConfigDir().'/SV/RedisCache/Installer.php');
Q: Sample XenForo Configuration using a socket
A: Please see https://xenforo.com/help/cache/ for details on setting up the general XenForo Cache.

The minimum configuration is:
Code:
$config['cache']['enabled'] = true;
$config['cache']['frontend'] = 'Core';
$config['cache']['frontendOptions']['cache_id_prefix'] = 'xf_';
$config['cache']['backend'] = 'Redis';
$config['cache']['backendOptions'] = array(
        'server' => 'unix:///tmp/redis.sock',
        'use_lua' => true,
        'compress_data' => 6,
    );
require(XenForo_Application::getInstance()->getConfigDir().'/SV/RedisCache/Installer.php');
Q. When trying to use a socket, an exception with "No such file or directory" is thrown
A. There are a few reasons this could happen;

After confirming that the socket path is correct, try the following suggestions:
  • selinux is preventing php from accessing the socket.
  • open_basedir is preventing php from accessing the socket.
  • chroot is preventing php from accessing the socket.
  • permissions are preventing php from reading/writing to the socket.
Q: Sample Single Redis Slave Configuration
A:

The minimum configuration is:
Code:
$config['cache']['enabled'] = true;
$config['cache']['frontend'] = 'Core';
$config['cache']['frontendOptions']['cache_id_prefix'] = 'xf_';
$config['cache']['backend'] = 'Redis';
$config['cache']['backendOptions'] = array(
        'server' => '127.0.0.1',
        'port' => 6379,
        'connect_retries' => 2,
        'use_lua' => true,
        'compress_data' => 2,
        'read_timeout' => 1,
        'timeout' => 1,
    );
$config['cache']['backendOptions']['load_from_slave'] = array(
        'server' => '127.0.0.1',
        'port' => 6378,
        'connect_retries' => 2,
        'use_lua' => true,
        'compress_data' => 2,
        'read_timeout' => 1,
        'timeout' => 1,
    );
require(XenForo_Application::getInstance()->getConfigDir().'/SV/RedisCache/Installer.php');
Q: Sample Redis Sentinel Configuration
A:

Redis Sentinel support for high-availability. See http://redis.io/topics/sentinel for more information.
Enable with:
Code:
$config['cache']['backendOptions']['sentinel_master'] = 'mymaster';
$config['cache']['backendOptions']['server'] = 'tcp://127.0.0.1:26379';
'server' now points to a comma delimited list of sentinel servers to find the master. Note; the port must be explicitly listed

To load data from slaves use;
Code:
$config['cache']['backendOptions']['load_from_slaves'] = true;
By default, a local slave is preferred, this can be changed by setting:
Code:
$config['cache']['backendOptions']['slave_select_callable'] = function (array $slaves) {
        $slaveKey = array_rand($slaves, 1);
        return $slaves[$slaveKey];
};
Setting to false (or some non-callable) will fall back to a random slave.


Q: Performance - XenForo

Don't double serialize the cached data, make sure 'automatic_serialization' is false!

Code:
$config['cache']['frontendOptions']['automatic_serialization'] = false;
This may break addons which directly talk to the Zend caching layer and bypass XenForo's caching layer.

Warning.
Changing this setting without flushing the cache will cause errors!

To flush all keys from redis execute:
Code:
redis-cli FLUSHALL
Q: Performance - Redis
A: See:
Q: phpredis supports persistent connection, are these recommended?
A: I do not recommend using persistent connections, as they appear to be quite buggy.

Q: Enabling Lua Scripting in Redis
A: This requires at least Redis 2.6.0, and setting "use_lua" the the configuraton:

Code:
$config['cache']['backend'] = 'Redis';
$config['cache']['backendOptions'] = array(
'server' => '127.0.0.1',
'port' => 6379,
'connect_retries' => 2,
'use_lua' => true
);
Top