PHPackages                             aloware/redis-mock - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. aloware/redis-mock

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

aloware/redis-mock
==================

Library providing a PHP mock for Redis extension

03.2k[1 PRs](https://github.com/aloware/RedisMock/pulls)PHP

Since Mar 21Pushed 2y agoCompare

[ Source](https://github.com/aloware/RedisMock)[ Packagist](https://packagist.org/packages/aloware/redis-mock)[ RSS](/packages/aloware-redis-mock/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (3)Used By (0)

Redis PHP Mock [![Build Status](https://github.com/BedrockStreaming/RedisMock/actions/workflows/ci.yml/badge.svg)](https://github.com/BedrockStreaming/RedisMock/actions/workflows/ci.yml) [![Total Downloads](https://camo.githubusercontent.com/2d12e69dba97dd2475110e1ed5c1541987adee526f8beb0427569ca86f9374a9/68747470733a2f2f706f7365722e707567782e6f72672f6d367765622f72656469732d6d6f636b2f646f776e6c6f6164732e737667)](https://packagist.org/packages/m6web/redis-mock)
================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

[](#redis-php-mock--)

PHP 8.2 library providing a Redis PHP mock for your tests.

**Work for now only with phpredis**

Installation
------------

[](#installation)

```
$ composer require aloware/redis-mock:dev-master
```

Functions
---------

[](#functions)

It currently mocks these Redis commands :

Redis commandDescription**DBSIZE**Returns the number of keys in the selected database**DEL** *key* *\[key ...\]*Deletes one or more keys**DECR** *key*Decrements the integer value of a key by one**DECRBY** *key* *decrement*Decrements the integer value of a key by `decrement` value**DECRBYFLOAT** *key* *decrement*Decrements the float value of a key by `decrement` value**EXISTS** *key*Determines if a key exists**EXPIRE** *key* *seconds*Sets a key's time to live in seconds**FLUSHDB**Flushes the database**GET** *key*Gets the value of a key**HDEL** *key* *array&lt;fields&gt;*Delete hash fields**HEXISTS** *key* *field*Determines if a hash field exists**HMGET** *key* *array&lt;field&gt;*Gets the values of multiple hash fields**HGET** *key* *field*Gets the value of a hash field**HGETALL** *key*Gets all the fields and values in a hash**HKEYS** *key*Gets all the fields in a hash**HLEN** *key*Gets the number of fields in a hash**HMSET** *key* *array&lt;field, value&gt;*Sets each value in the corresponding field**HSET** *key* *field* *value*Sets the string value of a hash field**HSETNX** *key* *field* *value*Sets field in the hash stored at key to value, only if field does not yet exist**HINCRBY** *key* *field* *increment*Increments the integer stored at `field` in the hash stored at `key` by `increment`.**INCR** *key*Increments the integer value of a key by one**INCRBY** *key* *increment*Increments the integer value of a key by `increment` value**INCRBYFLOAT** *key* *increment*Increments the float value of a key by `increment` value**KEYS** *pattern*Finds all keys matching the given pattern**LINDEX** *key* *index*Returns the element at index *index* in the list stored at *key***LLEN** *key*Returns the length of the list stored at *key***LPUSH** *key* *value* *\[value ...\]*Pushs values at the head of a list**LPOP** *key*Pops values at the head of a list**LREM** *key* *value* *count*Removes `count` instances of `value` from the head of a list (follows the [`predis` parameters order](https://github.com/phpredis/phpredis#lrem-lremove))**LTRIM** *key* *start* *stop*Removes the values of the `key` list which are outside the range `start`...`stop`**LRANGE** *key* *start* *stop*Gets a range of elements from a list**MGET** *array&lt;field&gt;*Gets the values of multiple keys**MSET** *array&lt;field, value&gt;*Sets the string values of multiple keys**QUIT**Quit the REDIS**RPUSH** *key* *value*Pushs values at the tail of a list**RPOP** *key*Pops values at the tail of a list**SCAN**Iterates the set of keys in the currently selected Redis database.**SSCAN**Iterates elements of Sets types.**SET** *key* *value*Sets the string value of a key**SETEX** *key* *seconds* *value*Sets the value and expiration of a key**SETNX** *key* *value*Sets key to hold value if key does not exist**SADD** *key* *member* *\[member ...\]*Adds one or more members to a set**SDIFF** *key* *key* *\[key ...\]*Returns the members of the set resulting from the difference between the first set and all the successive sets.**SISMEMBER** *key* *member*Determines if a member is in a set**SMEMBERS** *key*Gets all the members in a set**SUNION** *key* *\[key ...\]*Returns the members of the set resulting from the union of all the given sets.**SINTER** *key* *\[key ...\]*Returns the members of the set resulting from the intersection of all the given sets.**SCARD** *key*Get cardinality of set (count of members)**SREM** *key* *member* *\[member ...\]*Removes one or more members from a set**TTL** *key* Gets the time to live for a key**TYPE** *key*Returns the string representation of the type of the value stored at key.**ZADD** *key* *score* *member*Adds one member to a sorted set, or update its score if it already exists**ZINCRBY** *key* *increment* *member*Increments the score of *member* in the sorted set stored at *key* by *increment***ZCARD** *key*Returns the sorted set cardinality (number of elements) of the sorted set stored at *key***ZCOUNT** **key** **min** **max**Returns the number of elements in the stored set at *key* with a score between *min* and *max*.**ZRANGE** *key* *start* *stop* *\[withscores\]*Returns the specified range of members in a sorted set**ZRANGEBYSCORE** *key* *min* *max* *options*Returns a range of members in a sorted set, by score**ZRANK** *key* *member*Returns the rank of *member* in the sorted set stored at *key*, with the scores ordered from low to high**ZREVRANK** *key* *member*Returns the rank of *member* in the sorted set stored at *key*, with the scores ordered from high to low**ZREM** *key* *member*Removes one membner from a sorted set**ZREMRANGEBYSCORE** *key* *min* *max*Removes all members in a sorted set within the given scores**ZREVRANGE** *key* *start* *stop* *\[withscores\]*Returns the specified range of members in a sorted set, with scores ordered from high to low**ZREVRANGEBYSCORE** *key* *min* *max* *options*Returns a range of members in a sorted set, by score, with scores ordered from high to low**ZSCORE** *key* *member*Returns the score of *member* in the sorted set at *key***ZUNIONSTORE** *dest* *numkeys* *key* ... *\[weights ...\]* *\[aggregate SUM/MIN/MAX\]*Computes the union of the stored sets given by the specified keys, store the result in the destination key, and returns the number of elements of the new sorted set.It mocks **MULTI**, **DISCARD** and **EXEC** commands but without any transaction behaviors, they just make the interface fluent and return each command results. **PIPELINE** and **EXECUTE** pseudo commands (client pipelining) are also mocked. **EVAL**, **EVALSHA**, **WATCH** and **UNWATCH** are just stubs—they won't execute anything

Usage
-----

[](#usage)

RedisMock library provides a factory able to build a mocked class of your Redis library that can be directly injected in your application :

```
$factory          = new \M6Web\Component\RedisMock\RedisMockFactory();
$myRedisMockClass = $factory->getAdapterClass('My\Redis\Library');
$myRedisMock      = new $myRedisMockClass($myParameters);
```

In a simpler way, if you don't need to instanciate the mocked class with custom parameters (e.g. to easier inject the mock using Symfony config file), you can use `getAdapter` instead of `getAdapterClass` to directly create the adapter :

```
$factory     = new \M6Web\Component\RedisMock\RedisMockFactory();
$myRedisMock = $factory->getAdapter('My\Redis\Library');
```

**WARNING !**

- *RedisMock doesn't implement all Redis features and commands. The mock can have undesired behavior if your parent class uses unsupported features.*
- *Storage is static and therefore shared by all instances.*

*Note : the factory will throw an exception by default if your parent class implements unsupported commands. If you want even so partially use the mock, you can specify the second parameter when you build it `$factory->getAdapter('My\Redis\Library', true)`. The exception will then thrown only when the command is called.*

### Static storage &amp; Multiple servers

[](#static-storage--multiple-servers)

The storage in the RedisMock class is organized by named areas. The default area's name is the empty string `''` but you can specify an alternate area name when calling the factory's `getAdapter` method.

```
getAdapter($classToExtend, $failOnlyAtRuntime = false, $ignoreConstructor = true, $storage = '')
```

This enables the mocking of several remote Redis servers, each one with its own storage area.

However, one same area remains statically shared across all the instances bound to it.

Tests
-----

[](#tests)

The development environment is provided by Vagrant and the [Xotelia box](https://github.com/Xotelia/VagrantBox).

```
$ cp Vagrantfile.dist Vagrantfile
$ vagrant up
$ vagrant ssh
```

```
$ cd /vagrant
$ composer install
$ ./vendor/bin/atoum
```

Credits
-------

[](#credits)

Developped by the [Cytron Team](http://cytron.fr/) of [M6 Web](http://tech.m6web.fr/).
Tested with [atoum](http://atoum.org).

License
-------

[](#license)

RedisMock is licensed under the [MIT license](LICENSE).

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity16

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity25

Early-stage or recently created project

 Bus Factor4

4 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/9d00dc1effffdce98e6d0361dd894c518d2db261730590c4b695093c27ef5950?d=identicon)[SohrabZ](/maintainers/SohrabZ)

---

Top Contributors

[![omansour](https://avatars.githubusercontent.com/u/1131098?v=4)](https://github.com/omansour "omansour (31 commits)")[![fdubost](https://avatars.githubusercontent.com/u/3973818?v=4)](https://github.com/fdubost "fdubost (25 commits)")[![KuiKui](https://avatars.githubusercontent.com/u/748924?v=4)](https://github.com/KuiKui "KuiKui (23 commits)")[![dchancogne](https://avatars.githubusercontent.com/u/696635?v=4)](https://github.com/dchancogne "dchancogne (14 commits)")[![amir-the-h](https://avatars.githubusercontent.com/u/59755964?v=4)](https://github.com/amir-the-h "amir-the-h (12 commits)")[![syffer](https://avatars.githubusercontent.com/u/4788060?v=4)](https://github.com/syffer "syffer (11 commits)")[![asilgalis](https://avatars.githubusercontent.com/u/3510588?v=4)](https://github.com/asilgalis "asilgalis (5 commits)")[![tomlankhorst](https://avatars.githubusercontent.com/u/675432?v=4)](https://github.com/tomlankhorst "tomlankhorst (5 commits)")[![magnetik](https://avatars.githubusercontent.com/u/345029?v=4)](https://github.com/magnetik "magnetik (5 commits)")[![aburakovskiy](https://avatars.githubusercontent.com/u/1153385?v=4)](https://github.com/aburakovskiy "aburakovskiy (4 commits)")[![mikaelrandy](https://avatars.githubusercontent.com/u/187703?v=4)](https://github.com/mikaelrandy "mikaelrandy (4 commits)")[![SohrabZ](https://avatars.githubusercontent.com/u/1913404?v=4)](https://github.com/SohrabZ "SohrabZ (4 commits)")[![Oliboy50](https://avatars.githubusercontent.com/u/2571084?v=4)](https://github.com/Oliboy50 "Oliboy50 (4 commits)")[![vdechenaux](https://avatars.githubusercontent.com/u/1501825?v=4)](https://github.com/vdechenaux "vdechenaux (4 commits)")[![thirsch](https://avatars.githubusercontent.com/u/1055937?v=4)](https://github.com/thirsch "thirsch (3 commits)")[![lnahiro](https://avatars.githubusercontent.com/u/14995154?v=4)](https://github.com/lnahiro "lnahiro (3 commits)")[![sevrugin](https://avatars.githubusercontent.com/u/4169835?v=4)](https://github.com/sevrugin "sevrugin (2 commits)")[![rajivraman](https://avatars.githubusercontent.com/u/2066344?v=4)](https://github.com/rajivraman "rajivraman (2 commits)")[![DocRoms](https://avatars.githubusercontent.com/u/12815769?v=4)](https://github.com/DocRoms "DocRoms (2 commits)")[![zzgab](https://avatars.githubusercontent.com/u/3754439?v=4)](https://github.com/zzgab "zzgab (1 commits)")

### Embed Badge

![Health badge](/badges/aloware-redis-mock/health.svg)

```
[![Health](https://phpackages.com/badges/aloware-redis-mock/health.svg)](https://phpackages.com/packages/aloware-redis-mock)
```

###  Alternatives

[bazilio/yii2-stubs-generator

Yii2 component stubs generator for Yii::$app

146720.4k1](/packages/bazilio-yii2-stubs-generator)[imanghafoori/php-search-replace

Smart search replace functionality for php source code

32496.5k3](/packages/imanghafoori-php-search-replace)[marabesi/laration

Easy package to list all variables in a Laravel application

4738.7k](/packages/marabesi-laration)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
