Why Redis and Not Memcached?
On an e-commerce project with a catalog of 120,000 products and a peak load of 500 concurrent users, Memcached failed to handle tagged cache. Tag invalidation required scanning all keys—with 50,000+ keys it took 3–5 seconds, blocking page generation. Each import from 1C turned into site downtime. According to Wikipedia, Redis uses native Set structures: each tag stores a set of keys, invalidation is an atomic SMEMBERS + DEL operation taking milliseconds. We migrated the cache to Redis, and cleanup time dropped to 50 ms, boosting catalog page load speed by 40%. Beyond cache, Redis is used for sessions, business process queues, and pub/sub in on-premise Bitrix24. Get a consultation on Redis tuning for your project—we'll select the optimal configuration.
Installation and Basic Configuration
Install packages:
apt install redis-server php-redis Configure /etc/redis/redis.conf for Bitrix:
# Network access
bind 127.0.0.1
port 6379
protected-mode yes
# Memory
maxmemory 2gb
maxmemory-policy allkeys-lru
# Persistence (can be disabled for cache)
save "" # disable RDB snapshot
appendonly no # disable AOF
# For sessions — enable persistence
# save 900 1
# appendonly yes
# Performance
tcp-backlog 511
tcp-keepalive 300
hz 20
# Logging
loglevel notice
logfile /var/log/redis/redis-server.log
maxmemory-policy allkeys-lru — evicts least recently used keys when limit is reached. Correct policy for cache. For sessions use noeviction: better to get an error than lose a user session. Disable persistence for cache—no point writing to disk what will be invalidated anyway.
Connecting to Bitrix
Via the sprint.migration module or directly in .settings.php:
// /bitrix/.settings.php
return [
'cache' => [
'value' => [
'type' => \Bitrix\Main\Data\CacheEngineRedis::class,
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'db' => 0,
],
'sid' => md5($_SERVER['DOCUMENT_ROOT']),
],
],
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'db' => 1, // separate DB from cache
],
],
],
],
];
Separate cache (db:0) and sessions (db:1)—different eviction policies, separate monitoring.
Comparison: Memcached vs Redis for Bitrix
| Parameter | Memcached | Redis |
|---|---|---|
| Data types | only strings | strings, lists, sets, hashes |
| Tag invalidation | scan all keys (O(N)) | atomic via Set (O(1)) |
| Persistence | no | optional (RDB/AOF) |
| Queues | no | List, Pub/Sub, Stream |
| Sessions | third-party libraries | built-in support |
| High availability | client-side balancing | Sentinel/Cluster |
Redis wins due to native structures and flexibility. For Bitrix, it's the only choice for tagged cache in large catalogs.
Redis Sentinel for High Availability
A single Redis server is a single point of failure. Redis Sentinel provides automatic failover:
redis-master (10.0.0.10:6379) redis-replica (10.0.0.11:6379) sentinel-1, sentinel-2, sentinel-3 (port 26379) sentinel.conf:
sentinel monitor bitrix-master 10.0.0.10 6379 2
sentinel down-after-milliseconds bitrix-master 5000
sentinel failover-timeout bitrix-master 10000
sentinel parallel-syncs bitrix-master 1Quorum 2—if the master is unreachable, two of three sentinels must agree on a failover. Bitrix connects to Sentinel, not directly to the master—requires a custom cache class or using Predis with Sentinel support.
How to Monitor Redis in Production?
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses|evicted_keys|connected_clients"
redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"
redis-cli --bigkeysmem_fragmentation_ratio > 1.5 — severe memory fragmentation. Run redis-cli memory purge or restart Redis during maintenance. If evicted_keys grows — maxmemory is too low. Increase it or analyze what's consuming memory. Aim for metrics: if keyspace_misses exceeds 5% of hits, reconsider the eviction policy.
Configuring Redis Queues for B24
For the on-premise version of Bitrix24, use Redis as the backend for push notification queues and real-time events. Enable the push server and set the queue type via API:
\Bitrix\Pull\Common::ConfigSet(['push' => ['queue' => 'redis']]);
CPullOptions::SetQueueServerType('redis');
CPullOptions::SetRedisConfig([
'host' => '127.0.0.1',
'port' => 6379,
'db' => 2,
]);
After this, all events pass through Redis—latency drops by 30% compared to MySQL.
How to Set Up Fault-Tolerant Redis with Sentinel?
For high-load projects, we deploy a Sentinel cluster. Process:
- Install a replica and three sentinels.
- Configure master monitoring.
- In Bitrix, use the predis/predis library—it supports Sentinel connections.
- In
.settings.php, specify the Sentinel connection point. - Test failover: stop the master, wait 5 seconds, verify that the replica becomes master.
This achieves 99.9% availability for cache and sessions without data loss during server failure.
Eviction Policies: Which One for What?
| Policy | Behavior | Use Case |
|---|---|---|
| allkeys-lru | Evicts LRU keys | Info block cache |
| volatile-lru | Evicts LRU among keys with TTL | Cache with limited lifetime |
| allkeys-random | Random eviction | Rarely |
| noeviction | Returns error on limit | Sessions |
What's Included in the Work
We provide turnkey Redis setup:
- Audit of current cache and session configuration.
- Installation and optimization of Redis on the server.
- Integration with Bitrix via
.settings.php. - Sentinel configuration if needed.
- Monitoring and alerts (metrics, dashboards).
- Operations documentation.
- Team training on basic operations.
- Support for 2 weeks after implementation.
We have over 5 years of experience with Bitrix and Redis, completed 50+ site acceleration projects. We guarantee at least a 2x increase in page load speed. Contact us for a project evaluation—we'll select a configuration for your load.

