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.
composer require suvera/winter-modulesAppend the following code to your application.yml:
modules: - module: 'dev\winterframework\data\redis\RedisModule' enabled: true configFile: redis-config.ymlImplementation
Section titled “Implementation”PHP has two very good libraries that can be used to work with Redis:
This module assumes that you have the PhpRedis extension already installed.
Autowired Services
Section titled “Autowired Services”This module provides the following services automatically available to you.
1. PhpRedisTemplate
Section titled “1. PhpRedisTemplate”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: 6379PHP Example
Section titled “PHP Example”#[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;2. PhpRedisClusterTemplate
Section titled “2. PhpRedisClusterTemplate”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]PHP Example
Section titled “PHP Example”#[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;3. PhpRedisArrayTemplate
Section titled “3. PhpRedisArrayTemplate”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_funcPHP Example
Section titled “PHP Example”#[Autowired]private PhpRedisArrayTemplate $redis; // This defaults to "beanUniqueName01"
#[Autowired("beanUniqueName01")]private PhpRedisArrayTemplate $redis1; // This is also the same object as above, but with named Autowired4. PhpRedisSentinelTemplate
Section titled “4. PhpRedisSentinelTemplate”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: 0PHP Example
Section titled “PHP Example”#[Autowired]private PhpRedisSentinelTemplate $redis; // This defaults to "sentinel01"5. PhpRedisTokenTemplate
Section titled “5. PhpRedisTokenTemplate”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 ...PHP Example
Section titled “PHP Example”#[Autowired("DynomiteCluster01")]private PhpRedisTokenTemplate $redis;