Skip to content

Winter Data Redis: PhpRedis Client Module

Winter Data Redis is a module that provides easy configuration and access to Redis from Winter Boot applications. It supports single nodes, Redis Cluster, Redis Arrays, Redis Sentinel, and token-based ring topologies such as Netflix Dynomite through the PhpRedis extension.

Terminal window
composer require suvera/winter-modules

Append the following code to your application.yml:

modules:
- module: 'dev\winterframework\data\redis\RedisModule'
enabled: true
configFile: redis-config.yml

PHP has two very good libraries that can be used to work with Redis:

  1. PhpRedis - C Extension
  2. Predis - Pure PHP Implementation

This module assumes that you have the PhpRedis extension already installed.

This module provides the following services automatically available to you.

Use PhpRedisTemplate when dealing with single Redis node(s).

Configuration for PhpRedisTemplate (redis-config.yml)

Section titled “Configuration for PhpRedisTemplate (redis-config.yml)”
phpredis:
singles:
- name: redisNode01Bean
host: 192.168.1.10
port: 6379
- name: redisNode02Bean
host: 192.168.1.12
port: 6379
#[Autowired]
private PhpRedisTemplate $redis; // This defaults to "redisNode01Bean"
#[Autowired("redisNode01Bean")]
private PhpRedisTemplate $redis1; // This is also the same object as above, but with named Autowired
#[Autowired("redisNode02Bean")]
private PhpRedisTemplate $redis2;

Use PhpRedisClusterTemplate when dealing with Redis Cluster.

Configuration for PhpRedisClusterTemplate (redis-config.yml)

Section titled “Configuration for PhpRedisClusterTemplate (redis-config.yml)”
phpredis:
clusters:
- name: cluster01Bean
clusterName: cluster01
hosts: [ 192.168.1.10:6379, 192.168.1.11:6379, 192.168.1.12:6379]
- name: cluster02Bean
clusterName: cluster02
hosts: [ 192.168.1.14:6379, 192.168.1.15:6379]
#[Autowired]
private PhpRedisClusterTemplate $redis; // This defaults to "cluster01Bean"
#[Autowired("cluster01Bean")]
private PhpRedisClusterTemplate $redis1; // This is also the same object as above, but with named Autowired
#[Autowired("cluster02Bean")]
private PhpRedisClusterTemplate $redis2;

Use PhpRedisArrayTemplate when dealing with Redis Arrays.

Configuration for PhpRedisArrayTemplate (redis-config.yml)

Section titled “Configuration for PhpRedisArrayTemplate (redis-config.yml)”
phpredis:
arrays:
- name: beanUniqueName01
arrayName: arrayName01
hosts: [192.168.1.10:6379, 192.168.1.11:6379, 192.168.1.12:6379],
options:
- consistent: true
auth: mysecretpassword
function: extract_key_part_func
previous: [ ]
retry_timeout: 0
lazy_connect: false
connect_timeout: 0.5
read_timeout: 0.5
algorithm: sha256
distributor: dist_func
#[Autowired]
private PhpRedisArrayTemplate $redis; // This defaults to "beanUniqueName01"
#[Autowired("beanUniqueName01")]
private PhpRedisArrayTemplate $redis1; // This is also the same object as above, but with named Autowired

Use PhpRedisSentinelTemplate when dealing with Redis Sentinel.

Configuration for PhpRedisSentinelTemplate (redis-config.yml)

Section titled “Configuration for PhpRedisSentinelTemplate (redis-config.yml)”
phpredis:
sentinels:
- name: sentinel01
persistence: true
host: 127.0.0.1
port: 6379
timeout: 0
readTimeout: 0
#[Autowired]
private PhpRedisSentinelTemplate $redis; // This defaults to "sentinel01"

Use PhpRedisTokenTemplate when dealing with token-based ring topology Redis clusters such as Netflix Dynomite.

Configuration for PhpRedisTokenTemplate (redis-config.yml)

Section titled “Configuration for PhpRedisTokenTemplate (redis-config.yml)”
phpredis:
tokens:
# 1st Cluster
- name: DynomiteCluster01
hosts:
- host: 10.1.2.3
port: 7801
token: 4294967295
- host: 10.1.2.4
port: 7801
token: 2863311530
- host: 10.1.2.5
port: 7801
token: 1431655765
persistence: false
strictTokenRing: false
timeout: 0
retryInterval:
reserved:
readTimeout: 0
idleTimeout: 300
hashProvider: dev\winterframework\util\hash\MurmurHash3Provider
# 2nd Cluster
- name: DynomiteCluster02
# ...settings here ...
#[Autowired("DynomiteCluster01")]
private PhpRedisTokenTemplate $redis;