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 1 Quorum 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 --bigkeys mem_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.

