diff options
-rw-r--r-- | PHPINFO | 4 | ||||
-rw-r--r-- | REFLECTION | 197 | ||||
-rw-r--r-- | php-pecl-redis6.spec | 108 | ||||
-rw-r--r-- | redis-8.0.patch | 122 | ||||
-rw-r--r-- | redis-upstream.patch | 116 |
5 files changed, 352 insertions, 195 deletions
@@ -2,7 +2,7 @@ redis Redis Support => enabled -Redis Version => 6.0.2 +Redis Version => 6.2.0 Redis Sentinel Version => 1.0 Available serializers => php, json, igbinary, msgpack Available compression => lzf, zstd, lz4 @@ -40,3 +40,5 @@ redis.session.lock_expire => 0 => 0 redis.session.lock_retries => 100 => 100 redis.session.lock_wait_time => 20000 => 20000 redis.session.early_refresh => 0 => 0 +redis.session.compression => none => none +redis.session.compression_level => 3 => 3 @@ -1,4 +1,4 @@ -Extension [ <persistent> extension #122 redis version 6.0.2 ] { +Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Dependencies { Dependency [ igbinary (Required) ] @@ -104,12 +104,18 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Entry [ redis.session.early_refresh <ALL> ] Current = '0' } + Entry [ redis.session.compression <ALL> ] + Current = 'none' + } + Entry [ redis.session.compression_level <ALL> ] + Current = '3' + } } - Classes [6] { Class [ <internal:redis> class Redis ] { - - Constants [49] { + - Constants [51] { Constant [ public int REDIS_NOT_FOUND ] { 0 } Constant [ public int REDIS_STRING ] { 1 } Constant [ public int REDIS_SET ] { 2 } @@ -128,6 +134,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Constant [ public int OPT_REPLY_LITERAL ] { 8 } Constant [ public int OPT_COMPRESSION_LEVEL ] { 9 } Constant [ public int OPT_NULL_MULTIBULK_AS_NULL ] { 10 } + Constant [ public int OPT_PACK_IGNORE_NUMBERS ] { 15 } Constant [ public int SERIALIZER_NONE ] { 0 } Constant [ public int SERIALIZER_PHP ] { 1 } Constant [ public int SERIALIZER_IGBINARY ] { 2 } @@ -137,6 +144,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Constant [ public int COMPRESSION_LZF ] { 1 } Constant [ public int COMPRESSION_ZSTD ] { 2 } Constant [ public int COMPRESSION_ZSTD_DEFAULT ] { 3 } + Constant [ public int COMPRESSION_ZSTD_MIN ] { -131072 } Constant [ public int COMPRESSION_ZSTD_MAX ] { 22 } Constant [ public int COMPRESSION_LZ4 ] { 3 } Constant [ public int OPT_SCAN ] { 4 } @@ -170,7 +178,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Properties [0] { } - - Methods [254] { + - Methods [260] { Method [ <internal:redis, ctor> public method __construct ] { - Parameters [1] { @@ -280,6 +288,16 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Return [ Redis|bool ] } + Method [ <internal:redis> public method waitaof ] { + + - Parameters [3] { + Parameter #0 [ <required> int $numlocal ] + Parameter #1 [ <required> int $numreplicas ] + Parameter #2 [ <required> int $timeout ] + } + - Return [ Redis|array|false ] + } + Method [ <internal:redis> public method bitcount ] { - Parameters [4] { @@ -535,7 +553,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [1] { Parameter #0 [ <required> string $key ] } - - Return [ Redis|string ] + - Return [ Redis|string|false ] } Method [ <internal:redis> public method echo ] { @@ -819,6 +837,14 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Return [ mixed ] } + Method [ <internal:redis> public method getWithMeta ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ Redis|array|false ] + } + Method [ <internal:redis> public method getAuth ] { - Parameters [0] { @@ -902,6 +928,20 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Return [ int ] } + Method [ <internal:redis> public method serverName ] { + + - Parameters [0] { + } + - Return [ string|false ] + } + + Method [ <internal:redis> public method serverVersion ] { + + - Parameters [0] { + } + - Return [ string|false ] + } + Method [ <internal:redis> public method getRange ] { - Parameters [3] { @@ -1055,15 +1095,14 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Parameter #0 [ <required> string $key ] Parameter #1 [ <optional> ?array $options = null ] } - - Return [ Redis|array|string ] + - Return [ Redis|array|string|false ] } Method [ <internal:redis> public method hSet ] { - - Parameters [3] { + - Parameters [2] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> string $member ] - Parameter #2 [ <required> mixed $value ] + Parameter #1 [ <optional> mixed ...$fields_and_vals ] } - Return [ Redis|int|false ] } @@ -1073,7 +1112,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key ] Parameter #1 [ <required> string $field ] - Parameter #2 [ <required> string $value ] + Parameter #2 [ <required> mixed $value ] } - Return [ Redis|bool ] } @@ -1099,13 +1138,34 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } - Return [ Redis|array|bool ] } + Method [ <internal:redis> public method expiremember ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> string $field ] + Parameter #2 [ <required> int $ttl ] + Parameter #3 [ <optional> ?string $unit = null ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method expirememberat ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> string $field ] + Parameter #2 [ <required> int $timestamp ] + } + - Return [ Redis|int|false ] + } + Method [ <internal:redis> public method incr ] { - Parameters [2] { @@ -1312,7 +1372,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [1] { Parameter #0 [ <required> array $keys ] } - - Return [ Redis|array ] + - Return [ Redis|array|false ] } Method [ <internal:redis> public method migrate ] { @@ -1721,7 +1781,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Parameter #0 [ <required> string $key ] Parameter #1 [ <optional> int $count = 0 ] } - - Return [ Redis|array|string|false ] + - Return [ mixed ] } Method [ <internal:redis> public method sUnion ] { @@ -1753,7 +1813,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Method [ <internal:redis> public method scan ] { - Parameters [4] { - Parameter #0 [ <required> ?int &$iterator ] + Parameter #0 [ <required> string|int|null &$iterator ] Parameter #1 [ <optional> ?string $pattern = null ] Parameter #2 [ <optional> int $count = 0 ] Parameter #3 [ <optional> ?string $type = null ] @@ -1972,7 +2032,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -2269,8 +2329,8 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> string $start ] - Parameter #2 [ <required> string $end ] + Parameter #1 [ <required> string|int $start ] + Parameter #2 [ <required> string|int $end ] } - Return [ Redis|int|false ] } @@ -2531,7 +2591,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -2672,7 +2732,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [0] { } - - Return [ ?bool ] + - Return [ array|bool|null ] } Method [ <internal:redis> public method flushall ] { @@ -2701,7 +2761,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -2765,7 +2825,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Method [ <internal:redis> public method scan ] { - Parameters [4] { - Parameter #0 [ <required> ?int &$iterator ] + Parameter #0 [ <required> string|int|null &$iterator ] Parameter #1 [ <required> string $node ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] @@ -2794,7 +2854,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -2821,7 +2881,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -2849,7 +2909,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Properties [0] { } - - Methods [222] { + - Methods [228] { Method [ <internal:redis, ctor> public method __construct ] { - Parameters [7] { @@ -2960,6 +3020,17 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Return [ RedisCluster|bool ] } + Method [ <internal:redis> public method waitaof ] { + + - Parameters [4] { + Parameter #0 [ <required> array|string $key_or_address ] + Parameter #1 [ <required> int $numlocal ] + Parameter #2 [ <required> int $numreplicas ] + Parameter #3 [ <required> int $timeout ] + } + - Return [ RedisCluster|array|false ] + } + Method [ <internal:redis> public method bgsave ] { - Parameters [1] { @@ -3129,7 +3200,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> array|string $key_or_address ] Parameter #1 [ <required> string $subcommand ] - Parameter #2 [ <optional> ?string $arg = NULL ] + Parameter #2 [ <optional> ?string $arg = null ] } - Return [ array|string|bool ] } @@ -3317,7 +3388,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key ] Parameter #1 [ <required> int $timeout ] - Parameter #2 [ <optional> ?string $mode = NULL ] + Parameter #2 [ <optional> ?string $mode = null ] } - Return [ RedisCluster|bool ] } @@ -3327,7 +3398,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key ] Parameter #1 [ <required> int $timestamp ] - Parameter #2 [ <optional> ?string $mode = NULL ] + Parameter #2 [ <optional> ?string $mode = null ] } - Return [ RedisCluster|bool ] } @@ -3492,6 +3563,31 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Return [ mixed ] } + Method [ <internal:redis> public method getdel ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ mixed ] + } + + Method [ <internal:redis> public method getWithMeta ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method getex ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <optional> array $options = [] ] + } + - Return [ RedisCluster|string|false ] + } + Method [ <internal:redis> public method getbit ] { - Parameters [2] { @@ -3538,7 +3634,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key1 ] Parameter #1 [ <required> string $key2 ] - Parameter #2 [ <optional> ?array $options = NULL ] + Parameter #2 [ <optional> ?array $options = null ] } - Return [ RedisCluster|array|string|int|false ] } @@ -3660,13 +3756,34 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } - Return [ array|bool ] } + Method [ <internal:redis> public method expiremember ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> string $field ] + Parameter #2 [ <required> int $ttl ] + Parameter #3 [ <optional> ?string $unit = null ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method expirememberat ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> string $field ] + Parameter #2 [ <required> int $timestamp ] + } + - Return [ Redis|int|false ] + } + Method [ <internal:redis> public method hrandfield ] { - Parameters [2] { @@ -3934,7 +4051,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key ] Parameter #1 [ <required> int $timeout ] - Parameter #2 [ <optional> ?string $mode = NULL ] + Parameter #2 [ <optional> ?string $mode = null ] } - Return [ RedisCluster|bool ] } @@ -3944,7 +4061,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [3] { Parameter #0 [ <required> string $key ] Parameter #1 [ <required> int $timestamp ] - Parameter #2 [ <optional> ?string $mode = NULL ] + Parameter #2 [ <optional> ?string $mode = null ] } - Return [ RedisCluster|bool ] } @@ -3979,7 +4096,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [2] { Parameter #0 [ <required> array|string $key_or_address ] - Parameter #1 [ <optional> ?string $message = NULL ] + Parameter #1 [ <optional> ?string $message = null ] } - Return [ mixed ] } @@ -4017,7 +4134,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Parameter #0 [ <required> string $channel ] Parameter #1 [ <required> string $message ] } - - Return [ RedisCluster|bool ] + - Return [ RedisCluster|int|bool ] } Method [ <internal:redis> public method pubsub ] { @@ -4080,7 +4197,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Parameter #0 [ <required> string $key ] Parameter #1 [ <required> int $timeout ] Parameter #2 [ <required> string $value ] - Parameter #3 [ <optional> ?array $options = NULL ] + Parameter #3 [ <optional> ?array $options = null ] } - Return [ RedisCluster|bool ] } @@ -4159,7 +4276,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { Method [ <internal:redis> public method scan ] { - Parameters [4] { - Parameter #0 [ <required> ?int &$iterator ] + Parameter #0 [ <required> string|int|null &$iterator ] Parameter #1 [ <required> array|string $key_or_address ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] @@ -4338,7 +4455,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [2] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <optional> ?array $options = NULL ] + Parameter #1 [ <optional> ?array $options = null ] } - Return [ RedisCluster|array|string|int|bool ] } @@ -4347,7 +4464,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [2] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <optional> ?array $options = NULL ] + Parameter #1 [ <optional> ?array $options = null ] } - Return [ RedisCluster|array|string|int|bool ] } @@ -4384,7 +4501,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -4879,7 +4996,7 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $key ] - Parameter #1 [ <required> ?int &$iterator ] + Parameter #1 [ <required> string|int|null &$iterator ] Parameter #2 [ <optional> ?string $pattern = null ] Parameter #3 [ <optional> int $count = 0 ] } @@ -4910,8 +5027,8 @@ Extension [ <persistent> extension #122 redis version 6.0.2 ] { - Parameters [4] { Parameter #0 [ <required> string $dst ] Parameter #1 [ <required> array $keys ] - Parameter #2 [ <optional> ?array $weights = NULL ] - Parameter #3 [ <optional> ?string $aggregate = NULL ] + Parameter #2 [ <optional> ?array $weights = null ] + Parameter #3 [ <optional> ?string $aggregate = null ] } - Return [ RedisCluster|int|false ] } diff --git a/php-pecl-redis6.spec b/php-pecl-redis6.spec index 04d0456..5de3bc6 100644 --- a/php-pecl-redis6.spec +++ b/php-pecl-redis6.spec @@ -1,8 +1,8 @@ # remirepo spec file for php-pecl-redis6 # -# Copyright (c) 2012-2024 Remi Collet -# License: CC-BY-SA-4.0 -# http://creativecommons.org/licenses/by-sa/4.0/ +# SPDX-FileCopyrightText: Copyright 2012-2025 Remi Collet +# SPDX-License-Identifier: CECILL-2.1 +# http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt # # Please, preserve the changelog entries # @@ -16,26 +16,24 @@ %endif %bcond_without igbinary %bcond_without msgpack -%if 0%{?fedora} >= 41 || 0%{?rhel} >= 10 -%bcond_without valkey -%else -# Use valkey instead of redis for tests -%bcond_with valkey -%endif -# Use keydb instead of redis for tests +# use redis instead of valkey for tests +%bcond_with redis +# Use keydb instead of valkey for tests %bcond_with keydb +%global pie_vend phpredis +%global pie_proj phpredis %global pecl_name redis %global with_zts 0%{!?_without_zts:%{?__ztsphp:1}} # after 20-json, 40-igbinary and 40-msgpack %global ini_name 50-%{pecl_name}.ini -%global upstream_version 6.0.2 +%global upstream_version 6.2.0 #global upstream_prever RC2 %global sources %{pecl_name}-%{upstream_version}%{?upstream_prever} %global _configure ../%{sources}/configure -Summary: Extension for communicating with the Redis key-value store +Summary: PHP extension for interfacing with key-value stores Name: %{?scl_prefix}php-pecl-redis6 Version: %{upstream_version}%{?upstream_prever:~%{upstream_prever}} Release: 2%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} @@ -43,11 +41,11 @@ License: PHP-3.01 URL: https://pecl.php.net/package/redis Source0: https://pecl.php.net/get/%{sources}.tgz -Patch0: %{pecl_name}-upstream.patch +Patch0: redis-8.0.patch BuildRequires: make BuildRequires: %{?dtsprefix}gcc -BuildRequires: %{?scl_prefix}php-devel >= 7.2 +BuildRequires: %{?scl_prefix}php-devel >= 7.4 BuildRequires: %{?scl_prefix}php-pear BuildRequires: %{?scl_prefix}php-json %if %{with igbinary} @@ -61,13 +59,13 @@ BuildRequires: pkgconfig(libzstd) >= 1.3.0 BuildRequires: pkgconfig(liblz4) # to run Test suite %if %{with tests} -%if %{with valkey} -BuildRequires: valkey +%if %{with redis} +BuildRequires: redis %else %if %{with keydb} BuildRequires: keydb %else -BuildRequires: redis +BuildRequires: valkey %endif %endif %endif @@ -82,11 +80,13 @@ Requires: %{?scl_prefix}php-igbinary%{?_isa} Requires: %{?scl_prefix}php-msgpack%{?_isa} %endif -Obsoletes: %{?scl_prefix}php-%{pecl_name} < 3 -Provides: %{?scl_prefix}php-%{pecl_name} = %{version} -Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = %{version} -Provides: %{?scl_prefix}php-pecl(%{pecl_name}) = %{version} -Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version} +Obsoletes: %{?scl_prefix}php-%{pecl_name} < 3 +Provides: %{?scl_prefix}php-%{pecl_name} = %{version} +Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = %{version} +Provides: %{?scl_prefix}php-pecl(%{pecl_name}) = %{version} +Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version} +Provides: %{?scl_prefix}php-pie(%{pie_vend}/%{pie_proj}) = %{version} +Provides: %{?scl_prefix}php-%{pie_vend}-%{pie_proj} = %{version} %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 || "%{php_version}" > "8.3" Obsoletes: %{?scl_prefix}php-pecl-%{pecl_name} < 6 @@ -107,12 +107,12 @@ Conflicts: %{?scl_prefix}php-pecl-%{pecl_name}5 < 6 %description -The phpredis extension provides an API for communicating -with the Redis key-value store. +This extension provides an API for communicating with RESP-based key-value +stores, such as Redis, Valkey, and KeyDB. -This Redis client implements most of the latest Redis API. -As method only only works when also implemented on the server side, -some doesn't work with an old redis server version. +This client implements most of the latest API. +As method only works when also implemented on the server side, +some doesn't work with an old server version. Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')%{?scl: as Software Collection (%{scl} by %{?scl_vendor}%{!?scl_vendor:rh})}. @@ -193,6 +193,8 @@ extension = %{pecl_name}.so ;redis.session.lock_retries = 100 ;redis.session.lock_wait_time = 20000 ;redis.session.early_refresh = 0 +;redis.session.compression = none +;redis.session.compression_level = 3 EOF @@ -220,15 +222,16 @@ peclconf() { cd %{sources} %{__phpize} +sed -e 's/INSTALL_ROOT/DESTDIR/' -i build/Makefile.global cd ../NTS peclconf %{__phpconfig} -make %{?_smp_mflags} +%make_build %if %{with_zts} cd ../ZTS peclconf %{__ztsphpconfig} -make %{?_smp_mflags} +%make_build %endif @@ -236,12 +239,12 @@ make %{?_smp_mflags} %{?dtsenable} # Install the NTS stuff -make -C NTS install INSTALL_ROOT=%{buildroot} +%make_install -C NTS install -D -m 644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name} %if %{with_zts} # Install the ZTS stuff -make -C ZTS install INSTALL_ROOT=%{buildroot} +%make_install -C ZTS install -D -m 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name} %endif @@ -275,18 +278,16 @@ done %if %{with tests} cd %{sources}/tests -: Launch redis server -%if %{with valkey} +: Launch the server SRV=%{_root_bindir}/valkey-server CLI=%{_root_bindir}/valkey-cli -%else -%if %{with keydb} -SRV=%{_root_bindir}/keydb-server -CLI=%{_root_bindir}/keydb-cli -%else +%if %{with redis} SRV=%{_root_bindir}/redis-server CLI=%{_root_bindir}/redis-cli %endif +%if %{with keydb} +SRV=%{_root_bindir}/keydb-server +CLI=%{_root_bindir}/keydb-cli %endif mkdir -p data @@ -338,6 +339,37 @@ exit $ret %changelog +* Tue Jun 24 2025 Remi Collet <remi@remirepo.net> - 6.2.0-2 +- add upstream patch for redis 8 +- use valkey by default for tests + +* Tue Mar 25 2025 Remi Collet <remi@remirepo.net> - 6.2.0-1 +- update to 6.2.0 + +* Fri Mar 21 2025 Remi Collet <remi@remirepo.net> - 6.2.0-0.1 +- new test build for upcoming 6.2.0 + +* Wed Mar 19 2025 Remi Collet <remi@remirepo.net> - 6.2.0-0 +- test build for upcoming 6.2.0 + +* Tue Mar 18 2025 Remi Collet <remi@remirepo.net> - 6.1.1-0 +- test build for upcoming 6.1.1 +- re-license spec file to CECILL-2.1 + +* Sat Oct 5 2024 Remi Collet <remi@remirepo.net> - 6.1.0-1 +- update to 6.1.0 + +* Tue Sep 24 2024 Remi Collet <remi@remirepo.net> - 6.1.0~RC2-1 +- update to 6.1.0RC2 + +* Mon Sep 23 2024 Remi Collet <remi@remirepo.net> - 6.1.0~RC2-0 +- test build for upcoming 6.1.0RC2 + +* Mon Aug 5 2024 Remi Collet <remi@remirepo.net> - 6.1.0~RC1-1 +- update to 6.1.0RC1 +- open https://github.com/phpredis/phpredis/pull/2532 missing file +- drop support for PHP < 7.4 + * Thu Jul 11 2024 Remi Collet <remi@remirepo.net> - 6.0.2-2 - add upstream patch for PHP 8.4 - allow to build with valkey diff --git a/redis-8.0.patch b/redis-8.0.patch new file mode 100644 index 0000000..fd713c5 --- /dev/null +++ b/redis-8.0.patch @@ -0,0 +1,122 @@ +From 593ba012ac49065343f6bbf10adca5047414ce85 Mon Sep 17 00:00:00 2001 +From: michael-grunder <michael.grunder@gmail.com> +Date: Sun, 4 May 2025 10:20:01 -0700 +Subject: [PATCH] Check for `dragonfly_version` in `HELLO` response + +DragonflyDB will report to be Redis but also include `dragonfly_version` +in the hello response, which we can use to identify the fork. + +Also fix parsing of the `HELLO` response for `serverName()` and +`serverVersion()`. Starting in Redis 8.0 there seem to always be modules +running, which the previous function was not expecting or parsing. +--- + library.c | 39 ++++++++++++++++++++++++++------------- + redis.c | 2 +- + tests/RedisTest.php | 2 ++ + 3 files changed, 29 insertions(+), 14 deletions(-) + +diff --git a/library.c b/library.c +index a9fb523e48..ce3e2672d0 100644 +--- a/library.c ++++ b/library.c +@@ -2018,26 +2018,31 @@ static int + redis_hello_response(INTERNAL_FUNCTION_PARAMETERS, + RedisSock *redis_sock, zval *z_tab, void *ctx) + { +- int numElems; + zval z_ret, *zv; ++ int numElems; + +- if (read_mbulk_header(redis_sock, &numElems) < 0) { +- if (IS_ATOMIC(redis_sock)) { +- RETVAL_FALSE; +- } else { +- add_next_index_bool(z_tab, 0); +- } +- return FAILURE; +- } ++ if (read_mbulk_header(redis_sock, &numElems) < 0) ++ goto fail; + + array_init(&z_ret); +- redis_mbulk_reply_zipped_raw_variant(redis_sock, &z_ret, numElems); ++ ++ if (redis_read_multibulk_recursive(redis_sock, numElems, 0, &z_ret) != SUCCESS || ++ array_zip_values_recursive(&z_ret) != SUCCESS) ++ { ++ zval_dtor(&z_ret); ++ goto fail; ++ } + + if (redis_sock->hello.server) { + zend_string_release(redis_sock->hello.server); + } +- zv = zend_hash_str_find(Z_ARRVAL(z_ret), ZEND_STRL("server")); +- redis_sock->hello.server = zv ? zval_get_string(zv) : ZSTR_EMPTY_ALLOC(); ++ ++ if ((zv = zend_hash_str_find(Z_ARRVAL(z_ret), ZEND_STRL("dragonfly_version")))) { ++ redis_sock->hello.server = zend_string_init(ZEND_STRL("dragonfly"), 0); ++ } else { ++ zv = zend_hash_str_find(Z_ARRVAL(z_ret), ZEND_STRL("server")); ++ redis_sock->hello.server = zv ? zval_get_string(zv) : ZSTR_EMPTY_ALLOC(); ++ } + + if (redis_sock->hello.version) { + zend_string_release(redis_sock->hello.version); +@@ -2063,6 +2068,14 @@ redis_hello_response(INTERNAL_FUNCTION_PARAMETERS, + } + + return SUCCESS; ++ ++fail: ++ if (IS_ATOMIC(redis_sock)) { ++ RETVAL_FALSE; ++ } else { ++ add_next_index_bool(z_tab, 0); ++ } ++ return FAILURE; + } + + +@@ -4302,7 +4315,7 @@ redis_read_multibulk_recursive(RedisSock *redis_sock, long long elements, int st + elements--; + } + +- return 0; ++ return SUCCESS; + } + + static int +diff --git a/redis.c b/redis.c +index 3f13a59888..629dd5c20b 100644 +--- a/redis.c ++++ b/redis.c +@@ -2131,7 +2131,7 @@ redis_sock_read_multibulk_multi_reply_loop(INTERNAL_FUNCTION_PARAMETERS, + + int num = atol(inbuf + 1); + +- if (num > 0 && redis_read_multibulk_recursive(redis_sock, num, 0, &z_ret) < 0) { ++ if (num > 0 && redis_read_multibulk_recursive(redis_sock, num, 0, &z_ret) != SUCCESS) { + return FAILURE; + } + } +diff --git a/tests/RedisTest.php b/tests/RedisTest.php +index e7854da442..1ebcc61e51 100644 +--- a/tests/RedisTest.php ++++ b/tests/RedisTest.php +@@ -2476,6 +2476,7 @@ public function testServerInfo() { + $this->markTestSkipped(); + + $hello = $this->execHello(); ++ + if ( ! $this->assertArrayKey($hello, 'server') || + ! $this->assertArrayKey($hello, 'version')) + { +@@ -2486,6 +2487,7 @@ public function testServerInfo() { + $this->assertEquals($hello['version'], $this->redis->serverVersion()); + + $info = $this->redis->info(); ++ + $cmd1 = $info['total_commands_processed']; + + /* Shouldn't hit the server */ diff --git a/redis-upstream.patch b/redis-upstream.patch deleted file mode 100644 index 03bd34f..0000000 --- a/redis-upstream.patch +++ /dev/null @@ -1,116 +0,0 @@ -From a51215ce2b22bcd1f506780c35b6833471e0b8cb Mon Sep 17 00:00:00 2001 -From: michael-grunder <michael.grunder@gmail.com> -Date: Mon, 18 Mar 2024 14:42:35 -0700 -Subject: [PATCH] Update random includes. - -PHP 8.4 has some breaking changes with respect to where PHP's random methods and -helpers are. This commit fixes those issues while staying backward compatible. - -Fixes #2463 ---- - backoff.c | 12 ++++++------ - library.c | 7 ++++++- - redis.c | 6 +++++- - 3 files changed, 17 insertions(+), 8 deletions(-) - -diff --git a/backoff.c b/backoff.c -index d0961fcfaf..1be04a8fe8 100644 ---- a/backoff.c -+++ b/backoff.c -@@ -1,14 +1,14 @@ - #include "common.h" - -+#if PHP_VERSION_ID < 80400 - #include <ext/standard/php_rand.h> -- --#if PHP_VERSION_ID >= 70100 --#include <ext/standard/php_mt_rand.h> - #else -+#include <ext/random/php_random.h> -+#endif -+ -+#if PHP_VERSION_ID < 70100 - static zend_long php_mt_rand_range(zend_long min, zend_long max) { -- zend_long number = php_rand(); -- RAND_RANGE(number, min, max, PHP_RAND_MAX); -- return number; -+ return min + php_rand() % (max - min + 1) - } - #endif - -diff --git a/library.c b/library.c -index 3d65c8529d..f81556a9ed 100644 ---- a/library.c -+++ b/library.c -@@ -56,9 +56,14 @@ - #include <ext/json/php_json.h> - #endif - --#include <ext/standard/php_rand.h> - #include <ext/hash/php_hash.h> - -+#if PHP_VERSION_ID < 80400 -+#include <ext/standard/php_rand.h> -+#else -+#include <ext/random/php_random.h> -+#endif -+ - #define UNSERIALIZE_NONE 0 - #define UNSERIALIZE_KEYS 1 - #define UNSERIALIZE_VALS 2 -diff --git a/redis.c b/redis.c -index ec6f65d2ed..2330bf7edf 100644 ---- a/redis.c -+++ b/redis.c -@@ -27,12 +27,16 @@ - #include "redis_cluster.h" - #include "redis_commands.h" - #include "redis_sentinel.h" --#include <standard/php_random.h> - #include <ext/spl/spl_exceptions.h> - #include <zend_exceptions.h> - #include <ext/standard/info.h> - #include <ext/hash/php_hash.h> - -+#if PHP_VERSION_ID < 80400 -+#include <ext/standard/php_random.h> -+#else -+#include <ext/random/php_random.h> -+#endif - - #ifdef PHP_SESSION - #include <ext/session/php_session.h> -From c139de3abac1dd33b97ef0de5af41b6e3a78f7ab Mon Sep 17 00:00:00 2001 -From: michael-grunder <michael.grunder@gmail.com> -Date: Sat, 1 Jun 2024 13:09:30 -0700 -Subject: [PATCH] We don't need to use a ranom value for our ECHO liveness - challenge. - -A microsecond resolution timestamp combined with a monotonically -incremented counter should be sufficient. - -This also fixes PHP 8.4 compilation as PHP 8.4 doesn't seem to have -`php_rand()`. ---- - library.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/library.c b/library.c -index ce0cbda26..42a132c4c 100644 ---- a/library.c -+++ b/library.c -@@ -2886,11 +2886,13 @@ redis_sock_create(char *host, int host_len, int port, - } - - static int redis_uniqid(char *buf, size_t buflen) { -+ static unsigned long counter = 0; - struct timeval tv; -+ - gettimeofday(&tv, NULL); - - return snprintf(buf, buflen, "phpredis:%08lx%05lx:%08lx", -- (long)tv.tv_sec, (long)tv.tv_usec, (long)php_rand()); -+ (long)tv.tv_sec, (long)tv.tv_usec, counter++); - } - - static int redis_stream_liveness_check(php_stream *stream) { |