redis 6.0.0b2__py3-none-any.whl → 6.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- redis/__init__.py +9 -1
- redis/_parsers/resp3.py +2 -2
- redis/asyncio/client.py +75 -68
- redis/asyncio/cluster.py +67 -46
- redis/asyncio/connection.py +6 -4
- redis/asyncio/retry.py +12 -0
- redis/backoff.py +54 -0
- redis/client.py +100 -87
- redis/cluster.py +1087 -363
- redis/commands/core.py +104 -104
- redis/commands/helpers.py +19 -6
- redis/commands/json/__init__.py +1 -1
- redis/commands/json/commands.py +8 -8
- redis/commands/redismodules.py +20 -10
- redis/commands/search/commands.py +2 -2
- redis/commands/timeseries/__init__.py +1 -1
- redis/connection.py +18 -8
- redis/exceptions.py +18 -0
- redis/retry.py +25 -0
- {redis-6.0.0b2.dist-info → redis-6.1.1.dist-info}/METADATA +14 -8
- {redis-6.0.0b2.dist-info → redis-6.1.1.dist-info}/RECORD +23 -23
- {redis-6.0.0b2.dist-info → redis-6.1.1.dist-info}/WHEEL +0 -0
- {redis-6.0.0b2.dist-info → redis-6.1.1.dist-info}/licenses/LICENSE +0 -0
redis/commands/json/__init__.py
CHANGED
|
@@ -120,7 +120,7 @@ class JSON(JSONCommands):
|
|
|
120
120
|
startup_nodes=self.client.nodes_manager.startup_nodes,
|
|
121
121
|
result_callbacks=self.client.result_callbacks,
|
|
122
122
|
cluster_response_callbacks=self.client.cluster_response_callbacks,
|
|
123
|
-
cluster_error_retry_attempts=self.client.
|
|
123
|
+
cluster_error_retry_attempts=self.client.retry.get_retries(),
|
|
124
124
|
read_from_replicas=self.client.read_from_replicas,
|
|
125
125
|
reinitialize_steps=self.client.reinitialize_steps,
|
|
126
126
|
lock=self.client._lock,
|
redis/commands/json/commands.py
CHANGED
|
@@ -15,7 +15,7 @@ class JSONCommands:
|
|
|
15
15
|
|
|
16
16
|
def arrappend(
|
|
17
17
|
self, name: str, path: Optional[str] = Path.root_path(), *args: List[JsonType]
|
|
18
|
-
) -> List[
|
|
18
|
+
) -> List[Optional[int]]:
|
|
19
19
|
"""Append the objects ``args`` to the array under the
|
|
20
20
|
``path` in key ``name``.
|
|
21
21
|
|
|
@@ -33,7 +33,7 @@ class JSONCommands:
|
|
|
33
33
|
scalar: int,
|
|
34
34
|
start: Optional[int] = None,
|
|
35
35
|
stop: Optional[int] = None,
|
|
36
|
-
) -> List[
|
|
36
|
+
) -> List[Optional[int]]:
|
|
37
37
|
"""
|
|
38
38
|
Return the index of ``scalar`` in the JSON array under ``path`` at key
|
|
39
39
|
``name``.
|
|
@@ -53,7 +53,7 @@ class JSONCommands:
|
|
|
53
53
|
|
|
54
54
|
def arrinsert(
|
|
55
55
|
self, name: str, path: str, index: int, *args: List[JsonType]
|
|
56
|
-
) -> List[
|
|
56
|
+
) -> List[Optional[int]]:
|
|
57
57
|
"""Insert the objects ``args`` to the array at index ``index``
|
|
58
58
|
under the ``path` in key ``name``.
|
|
59
59
|
|
|
@@ -66,7 +66,7 @@ class JSONCommands:
|
|
|
66
66
|
|
|
67
67
|
def arrlen(
|
|
68
68
|
self, name: str, path: Optional[str] = Path.root_path()
|
|
69
|
-
) -> List[
|
|
69
|
+
) -> List[Optional[int]]:
|
|
70
70
|
"""Return the length of the array JSON value under ``path``
|
|
71
71
|
at key``name``.
|
|
72
72
|
|
|
@@ -79,7 +79,7 @@ class JSONCommands:
|
|
|
79
79
|
name: str,
|
|
80
80
|
path: Optional[str] = Path.root_path(),
|
|
81
81
|
index: Optional[int] = -1,
|
|
82
|
-
) -> List[
|
|
82
|
+
) -> List[Optional[str]]:
|
|
83
83
|
"""Pop the element at ``index`` in the array JSON value under
|
|
84
84
|
``path`` at key ``name``.
|
|
85
85
|
|
|
@@ -89,7 +89,7 @@ class JSONCommands:
|
|
|
89
89
|
|
|
90
90
|
def arrtrim(
|
|
91
91
|
self, name: str, path: str, start: int, stop: int
|
|
92
|
-
) -> List[
|
|
92
|
+
) -> List[Optional[int]]:
|
|
93
93
|
"""Trim the array JSON value under ``path`` at key ``name`` to the
|
|
94
94
|
inclusive range given by ``start`` and ``stop``.
|
|
95
95
|
|
|
@@ -113,7 +113,7 @@ class JSONCommands:
|
|
|
113
113
|
|
|
114
114
|
def objkeys(
|
|
115
115
|
self, name: str, path: Optional[str] = Path.root_path()
|
|
116
|
-
) -> List[
|
|
116
|
+
) -> List[Optional[List[str]]]:
|
|
117
117
|
"""Return the key names in the dictionary JSON value under ``path`` at
|
|
118
118
|
key ``name``.
|
|
119
119
|
|
|
@@ -357,7 +357,7 @@ class JSONCommands:
|
|
|
357
357
|
|
|
358
358
|
return set_files_result
|
|
359
359
|
|
|
360
|
-
def strlen(self, name: str, path: Optional[str] = None) -> List[
|
|
360
|
+
def strlen(self, name: str, path: Optional[str] = None) -> List[Optional[int]]:
|
|
361
361
|
"""Return the length of the string JSON value under ``path`` at key
|
|
362
362
|
``name``.
|
|
363
363
|
|
redis/commands/redismodules.py
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from json import JSONDecoder, JSONEncoder
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from .bf import BFBloom, CFBloom, CMSBloom, TDigestBloom, TOPKBloom
|
|
8
|
+
from .json import JSON
|
|
9
|
+
from .search import AsyncSearch, Search
|
|
10
|
+
from .timeseries import TimeSeries
|
|
11
|
+
from .vectorset import VectorSet
|
|
2
12
|
|
|
3
13
|
|
|
4
14
|
class RedisModuleCommands:
|
|
@@ -6,7 +16,7 @@ class RedisModuleCommands:
|
|
|
6
16
|
modules into the command namespace.
|
|
7
17
|
"""
|
|
8
18
|
|
|
9
|
-
def json(self, encoder=JSONEncoder(), decoder=JSONDecoder()):
|
|
19
|
+
def json(self, encoder=JSONEncoder(), decoder=JSONDecoder()) -> JSON:
|
|
10
20
|
"""Access the json namespace, providing support for redis json."""
|
|
11
21
|
|
|
12
22
|
from .json import JSON
|
|
@@ -14,7 +24,7 @@ class RedisModuleCommands:
|
|
|
14
24
|
jj = JSON(client=self, encoder=encoder, decoder=decoder)
|
|
15
25
|
return jj
|
|
16
26
|
|
|
17
|
-
def ft(self, index_name="idx"):
|
|
27
|
+
def ft(self, index_name="idx") -> Search:
|
|
18
28
|
"""Access the search namespace, providing support for redis search."""
|
|
19
29
|
|
|
20
30
|
from .search import Search
|
|
@@ -22,7 +32,7 @@ class RedisModuleCommands:
|
|
|
22
32
|
s = Search(client=self, index_name=index_name)
|
|
23
33
|
return s
|
|
24
34
|
|
|
25
|
-
def ts(self):
|
|
35
|
+
def ts(self) -> TimeSeries:
|
|
26
36
|
"""Access the timeseries namespace, providing support for
|
|
27
37
|
redis timeseries data.
|
|
28
38
|
"""
|
|
@@ -32,7 +42,7 @@ class RedisModuleCommands:
|
|
|
32
42
|
s = TimeSeries(client=self)
|
|
33
43
|
return s
|
|
34
44
|
|
|
35
|
-
def bf(self):
|
|
45
|
+
def bf(self) -> BFBloom:
|
|
36
46
|
"""Access the bloom namespace."""
|
|
37
47
|
|
|
38
48
|
from .bf import BFBloom
|
|
@@ -40,7 +50,7 @@ class RedisModuleCommands:
|
|
|
40
50
|
bf = BFBloom(client=self)
|
|
41
51
|
return bf
|
|
42
52
|
|
|
43
|
-
def cf(self):
|
|
53
|
+
def cf(self) -> CFBloom:
|
|
44
54
|
"""Access the bloom namespace."""
|
|
45
55
|
|
|
46
56
|
from .bf import CFBloom
|
|
@@ -48,7 +58,7 @@ class RedisModuleCommands:
|
|
|
48
58
|
cf = CFBloom(client=self)
|
|
49
59
|
return cf
|
|
50
60
|
|
|
51
|
-
def cms(self):
|
|
61
|
+
def cms(self) -> CMSBloom:
|
|
52
62
|
"""Access the bloom namespace."""
|
|
53
63
|
|
|
54
64
|
from .bf import CMSBloom
|
|
@@ -56,7 +66,7 @@ class RedisModuleCommands:
|
|
|
56
66
|
cms = CMSBloom(client=self)
|
|
57
67
|
return cms
|
|
58
68
|
|
|
59
|
-
def topk(self):
|
|
69
|
+
def topk(self) -> TOPKBloom:
|
|
60
70
|
"""Access the bloom namespace."""
|
|
61
71
|
|
|
62
72
|
from .bf import TOPKBloom
|
|
@@ -64,7 +74,7 @@ class RedisModuleCommands:
|
|
|
64
74
|
topk = TOPKBloom(client=self)
|
|
65
75
|
return topk
|
|
66
76
|
|
|
67
|
-
def tdigest(self):
|
|
77
|
+
def tdigest(self) -> TDigestBloom:
|
|
68
78
|
"""Access the bloom namespace."""
|
|
69
79
|
|
|
70
80
|
from .bf import TDigestBloom
|
|
@@ -72,7 +82,7 @@ class RedisModuleCommands:
|
|
|
72
82
|
tdigest = TDigestBloom(client=self)
|
|
73
83
|
return tdigest
|
|
74
84
|
|
|
75
|
-
def vset(self):
|
|
85
|
+
def vset(self) -> VectorSet:
|
|
76
86
|
"""Access the VectorSet commands namespace."""
|
|
77
87
|
|
|
78
88
|
from .vectorset import VectorSet
|
|
@@ -82,7 +92,7 @@ class RedisModuleCommands:
|
|
|
82
92
|
|
|
83
93
|
|
|
84
94
|
class AsyncRedisModuleCommands(RedisModuleCommands):
|
|
85
|
-
def ft(self, index_name="idx"):
|
|
95
|
+
def ft(self, index_name="idx") -> AsyncSearch:
|
|
86
96
|
"""Access the search namespace, providing support for redis search."""
|
|
87
97
|
|
|
88
98
|
from .search import AsyncSearch
|
|
@@ -23,7 +23,6 @@ ALTER_CMD = "FT.ALTER"
|
|
|
23
23
|
SEARCH_CMD = "FT.SEARCH"
|
|
24
24
|
ADD_CMD = "FT.ADD"
|
|
25
25
|
ADDHASH_CMD = "FT.ADDHASH"
|
|
26
|
-
DROP_CMD = "FT.DROP"
|
|
27
26
|
DROPINDEX_CMD = "FT.DROPINDEX"
|
|
28
27
|
EXPLAIN_CMD = "FT.EXPLAIN"
|
|
29
28
|
EXPLAINCLI_CMD = "FT.EXPLAINCLI"
|
|
@@ -35,7 +34,6 @@ SPELLCHECK_CMD = "FT.SPELLCHECK"
|
|
|
35
34
|
DICT_ADD_CMD = "FT.DICTADD"
|
|
36
35
|
DICT_DEL_CMD = "FT.DICTDEL"
|
|
37
36
|
DICT_DUMP_CMD = "FT.DICTDUMP"
|
|
38
|
-
GET_CMD = "FT.GET"
|
|
39
37
|
MGET_CMD = "FT.MGET"
|
|
40
38
|
CONFIG_CMD = "FT.CONFIG"
|
|
41
39
|
TAGVALS_CMD = "FT.TAGVALS"
|
|
@@ -406,6 +404,7 @@ class SearchCommands:
|
|
|
406
404
|
doc_id, conn=None, score=score, language=language, replace=replace
|
|
407
405
|
)
|
|
408
406
|
|
|
407
|
+
@deprecated_function(version="2.0.0", reason="deprecated since redisearch 2.0")
|
|
409
408
|
def delete_document(self, doc_id, conn=None, delete_actual_document=False):
|
|
410
409
|
"""
|
|
411
410
|
Delete a document from index
|
|
@@ -440,6 +439,7 @@ class SearchCommands:
|
|
|
440
439
|
|
|
441
440
|
return Document(id=id, **fields)
|
|
442
441
|
|
|
442
|
+
@deprecated_function(version="2.0.0", reason="deprecated since redisearch 2.0")
|
|
443
443
|
def get(self, *ids):
|
|
444
444
|
"""
|
|
445
445
|
Returns the full contents of multiple documents.
|
|
@@ -84,7 +84,7 @@ class TimeSeries(TimeSeriesCommands):
|
|
|
84
84
|
startup_nodes=self.client.nodes_manager.startup_nodes,
|
|
85
85
|
result_callbacks=self.client.result_callbacks,
|
|
86
86
|
cluster_response_callbacks=self.client.cluster_response_callbacks,
|
|
87
|
-
cluster_error_retry_attempts=self.client.
|
|
87
|
+
cluster_error_retry_attempts=self.client.retry.get_retries(),
|
|
88
88
|
read_from_replicas=self.client.read_from_replicas,
|
|
89
89
|
reinitialize_steps=self.client.reinitialize_steps,
|
|
90
90
|
lock=self.client._lock,
|
redis/connection.py
CHANGED
|
@@ -820,7 +820,7 @@ class CacheProxyConnection(ConnectionInterface):
|
|
|
820
820
|
self.credential_provider = conn.credential_provider
|
|
821
821
|
self._pool_lock = pool_lock
|
|
822
822
|
self._cache = cache
|
|
823
|
-
self._cache_lock = threading.
|
|
823
|
+
self._cache_lock = threading.RLock()
|
|
824
824
|
self._current_command_cache_key = None
|
|
825
825
|
self._current_options = None
|
|
826
826
|
self.register_connect_callback(self._enable_tracking_callback)
|
|
@@ -1028,7 +1028,7 @@ class SSLConnection(Connection):
|
|
|
1028
1028
|
ssl_cert_reqs="required",
|
|
1029
1029
|
ssl_ca_certs=None,
|
|
1030
1030
|
ssl_ca_data=None,
|
|
1031
|
-
ssl_check_hostname=
|
|
1031
|
+
ssl_check_hostname=True,
|
|
1032
1032
|
ssl_ca_path=None,
|
|
1033
1033
|
ssl_password=None,
|
|
1034
1034
|
ssl_validate_ocsp=False,
|
|
@@ -1083,7 +1083,9 @@ class SSLConnection(Connection):
|
|
|
1083
1083
|
self.ca_certs = ssl_ca_certs
|
|
1084
1084
|
self.ca_data = ssl_ca_data
|
|
1085
1085
|
self.ca_path = ssl_ca_path
|
|
1086
|
-
self.check_hostname =
|
|
1086
|
+
self.check_hostname = (
|
|
1087
|
+
ssl_check_hostname if self.cert_reqs != ssl.CERT_NONE else False
|
|
1088
|
+
)
|
|
1087
1089
|
self.certificate_password = ssl_password
|
|
1088
1090
|
self.ssl_validate_ocsp = ssl_validate_ocsp
|
|
1089
1091
|
self.ssl_validate_ocsp_stapled = ssl_validate_ocsp_stapled
|
|
@@ -1418,8 +1420,16 @@ class ConnectionPool:
|
|
|
1418
1420
|
# object of this pool. subsequent threads acquiring this lock
|
|
1419
1421
|
# will notice the first thread already did the work and simply
|
|
1420
1422
|
# release the lock.
|
|
1421
|
-
|
|
1422
|
-
self.
|
|
1423
|
+
|
|
1424
|
+
self._fork_lock = threading.RLock()
|
|
1425
|
+
|
|
1426
|
+
if self.cache is None:
|
|
1427
|
+
self._lock = threading.RLock()
|
|
1428
|
+
else:
|
|
1429
|
+
# TODO: To avoid breaking changes during the bug fix, we have to keep non-reentrant lock.
|
|
1430
|
+
# TODO: Remove this before next major version (7.0.0)
|
|
1431
|
+
self._lock = threading.Lock()
|
|
1432
|
+
|
|
1423
1433
|
self.reset()
|
|
1424
1434
|
|
|
1425
1435
|
def __repr__(self) -> (str, str):
|
|
@@ -1502,7 +1512,7 @@ class ConnectionPool:
|
|
|
1502
1512
|
@deprecated_args(
|
|
1503
1513
|
args_to_warn=["*"],
|
|
1504
1514
|
reason="Use get_connection() without args instead",
|
|
1505
|
-
version="5.0
|
|
1515
|
+
version="5.3.0",
|
|
1506
1516
|
)
|
|
1507
1517
|
def get_connection(self, command_name=None, *keys, **options) -> "Connection":
|
|
1508
1518
|
"Get a connection from the pool"
|
|
@@ -1611,7 +1621,7 @@ class ConnectionPool:
|
|
|
1611
1621
|
"""Close the pool, disconnecting all connections"""
|
|
1612
1622
|
self.disconnect()
|
|
1613
1623
|
|
|
1614
|
-
def set_retry(self, retry:
|
|
1624
|
+
def set_retry(self, retry: Retry) -> None:
|
|
1615
1625
|
self.connection_kwargs.update({"retry": retry})
|
|
1616
1626
|
for conn in self._available_connections:
|
|
1617
1627
|
conn.retry = retry
|
|
@@ -1730,7 +1740,7 @@ class BlockingConnectionPool(ConnectionPool):
|
|
|
1730
1740
|
@deprecated_args(
|
|
1731
1741
|
args_to_warn=["*"],
|
|
1732
1742
|
reason="Use get_connection() without args instead",
|
|
1733
|
-
version="5.0
|
|
1743
|
+
version="5.3.0",
|
|
1734
1744
|
)
|
|
1735
1745
|
def get_connection(self, command_name=None, *keys, **options):
|
|
1736
1746
|
"""
|
redis/exceptions.py
CHANGED
|
@@ -221,3 +221,21 @@ class SlotNotCoveredError(RedisClusterException):
|
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
class MaxConnectionsError(ConnectionError): ...
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class CrossSlotTransactionError(RedisClusterException):
|
|
227
|
+
"""
|
|
228
|
+
Raised when a transaction or watch is triggered in a pipeline
|
|
229
|
+
and not all keys or all commands belong to the same slot.
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
pass
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class InvalidPipelineStack(RedisClusterException):
|
|
236
|
+
"""
|
|
237
|
+
Raised on unexpected response length on pipelines. This is
|
|
238
|
+
most likely a handling error on the stack.
|
|
239
|
+
"""
|
|
240
|
+
|
|
241
|
+
pass
|
redis/retry.py
CHANGED
|
@@ -34,6 +34,19 @@ class Retry:
|
|
|
34
34
|
self._retries = retries
|
|
35
35
|
self._supported_errors = supported_errors
|
|
36
36
|
|
|
37
|
+
def __eq__(self, other: Any) -> bool:
|
|
38
|
+
if not isinstance(other, Retry):
|
|
39
|
+
return NotImplemented
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
self._backoff == other._backoff
|
|
43
|
+
and self._retries == other._retries
|
|
44
|
+
and set(self._supported_errors) == set(other._supported_errors)
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def __hash__(self) -> int:
|
|
48
|
+
return hash((self._backoff, self._retries, frozenset(self._supported_errors)))
|
|
49
|
+
|
|
37
50
|
def update_supported_errors(
|
|
38
51
|
self, specified_errors: Iterable[Type[Exception]]
|
|
39
52
|
) -> None:
|
|
@@ -44,6 +57,18 @@ class Retry:
|
|
|
44
57
|
set(self._supported_errors + tuple(specified_errors))
|
|
45
58
|
)
|
|
46
59
|
|
|
60
|
+
def get_retries(self) -> int:
|
|
61
|
+
"""
|
|
62
|
+
Get the number of retries.
|
|
63
|
+
"""
|
|
64
|
+
return self._retries
|
|
65
|
+
|
|
66
|
+
def update_retries(self, value: int) -> None:
|
|
67
|
+
"""
|
|
68
|
+
Set the number of retries.
|
|
69
|
+
"""
|
|
70
|
+
self._retries = value
|
|
71
|
+
|
|
47
72
|
def call_with_retry(
|
|
48
73
|
self,
|
|
49
74
|
do: Callable[[], T],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redis
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.1.1
|
|
4
4
|
Summary: Python client for Redis database and key-value store
|
|
5
5
|
Project-URL: Changes, https://github.com/redis/redis-py/releases
|
|
6
6
|
Project-URL: Code, https://github.com/redis/redis-py
|
|
@@ -32,7 +32,7 @@ Requires-Dist: async-timeout>=4.0.3; python_full_version < '3.11.3'
|
|
|
32
32
|
Provides-Extra: hiredis
|
|
33
33
|
Requires-Dist: hiredis>=3.0.0; extra == 'hiredis'
|
|
34
34
|
Provides-Extra: jwt
|
|
35
|
-
Requires-Dist: pyjwt
|
|
35
|
+
Requires-Dist: pyjwt>=2.9.0; extra == 'jwt'
|
|
36
36
|
Provides-Extra: ocsp
|
|
37
37
|
Requires-Dist: cryptography>=36.0.1; extra == 'ocsp'
|
|
38
38
|
Requires-Dist: pyopenssl>=20.0.1; extra == 'ocsp'
|
|
@@ -72,10 +72,16 @@ The Python interface to the Redis key-value store.
|
|
|
72
72
|
|
|
73
73
|
## Installation
|
|
74
74
|
|
|
75
|
-
Start a redis via docker:
|
|
75
|
+
Start a redis via docker (for Redis versions >= 8.0):
|
|
76
76
|
|
|
77
77
|
``` bash
|
|
78
|
-
docker run -p 6379:6379 -it redis
|
|
78
|
+
$ docker run -p 6379:6379 -it redis:latest
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Start a redis via docker (for Redis versions < 8.0):
|
|
82
|
+
|
|
83
|
+
``` bash
|
|
84
|
+
$ docker run -p 6379:6379 -it redis/redis-stack:latest
|
|
79
85
|
```
|
|
80
86
|
|
|
81
87
|
To install redis-py, simply:
|
|
@@ -95,7 +101,7 @@ Looking for a high-level library to handle object mapping? See [redis-om-python]
|
|
|
95
101
|
|
|
96
102
|
## Supported Redis Versions
|
|
97
103
|
|
|
98
|
-
The most recent version of this library supports
|
|
104
|
+
The most recent version of this library supports Redis version [7.2](https://github.com/redis/redis/blob/7.2/00-RELEASENOTES), [7.4](https://github.com/redis/redis/blob/7.4/00-RELEASENOTES) and [8.0](https://github.com/redis/redis/blob/8.0/00-RELEASENOTES).
|
|
99
105
|
|
|
100
106
|
The table below highlights version compatibility of the most-recent library versions and redis versions.
|
|
101
107
|
|
|
@@ -196,8 +202,8 @@ The following example shows how to utilize [Redis Pub/Sub](https://redis.io/docs
|
|
|
196
202
|
|
|
197
203
|
### Redis’ search and query capabilities default dialect
|
|
198
204
|
|
|
199
|
-
Release 6.0.0 introduces a client-side default dialect for Redis’ search and query capabilities.
|
|
200
|
-
By default, the client now overrides the server-side dialect with version 2, automatically appending *DIALECT 2* to commands like *FT.AGGREGATE* and *FT.SEARCH*.
|
|
205
|
+
Release 6.0.0 introduces a client-side default dialect for Redis’ search and query capabilities.
|
|
206
|
+
By default, the client now overrides the server-side dialect with version 2, automatically appending *DIALECT 2* to commands like *FT.AGGREGATE* and *FT.SEARCH*.
|
|
201
207
|
|
|
202
208
|
**Important**: Be aware that the query dialect may impact the results returned. If needed, you can revert to a different dialect version by configuring the client accordingly.
|
|
203
209
|
|
|
@@ -245,4 +251,4 @@ Special thanks to:
|
|
|
245
251
|
system.
|
|
246
252
|
- Paul Hubbard for initial packaging support.
|
|
247
253
|
|
|
248
|
-
[](https://redis.io)
|
|
254
|
+
[](https://redis.io)
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
redis/__init__.py,sha256=
|
|
2
|
-
redis/backoff.py,sha256=
|
|
1
|
+
redis/__init__.py,sha256=v4Hs3gUcTOHjfzv2DYugQ2S2aSXHd6nRq0MNSVy7RZc,2088
|
|
2
|
+
redis/backoff.py,sha256=2zR-ik5enJDsC2n2AWmE3ALSONgDLtyO4k096ZT6Txo,5275
|
|
3
3
|
redis/cache.py,sha256=68rJDNogvNwgdgBel6zSX9QziL11qsKIMhmvQvHvznM,9549
|
|
4
|
-
redis/client.py,sha256=
|
|
5
|
-
redis/cluster.py,sha256=
|
|
6
|
-
redis/connection.py,sha256=
|
|
4
|
+
redis/client.py,sha256=9mspL8Dg8T7R8RJp47y-1157IkgzvamXwgEPPLAg_h8,62807
|
|
5
|
+
redis/cluster.py,sha256=wmuctaVQbXdeRktMKxRkHhZdTNBB3TLbwobCApdE7wU,123811
|
|
6
|
+
redis/connection.py,sha256=rbu62qHQmzZXRsIu0wljl9gk1nEM8gAjSNcfmFqQVd0,66931
|
|
7
7
|
redis/crc.py,sha256=Z3kXFtkY2LdgefnQMud1xr4vG5UYvA9LCMqNMX1ywu4,729
|
|
8
8
|
redis/credentials.py,sha256=GOnO3-LSW34efHaIrUbS742Mw8l70mRzF6UrKiKZsMY,1828
|
|
9
9
|
redis/event.py,sha256=urOK241IdgmCQ3fq7GqXRstZ2vcXRV14bBBMdN3latk,12129
|
|
10
|
-
redis/exceptions.py,sha256=
|
|
10
|
+
redis/exceptions.py,sha256=46H-asqIaZ65Gc-voGzP7S39JtxdICGdHzdsT6LSMJE,5617
|
|
11
11
|
redis/lock.py,sha256=GrvPSxaOqKo7iAL2oi5ZUEPsOkxAXHVE_Tp1ejgO2fY,12760
|
|
12
12
|
redis/ocsp.py,sha256=teYSmKnCtk6B3jJLdNYbZN4OE0mxgspt2zUPbkIQzio,11452
|
|
13
13
|
redis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
redis/retry.py,sha256=
|
|
14
|
+
redis/retry.py,sha256=qJPRTARm3TYQPRNnzyjUUjGohbwtMz5KoDphCtHJ44Y,2902
|
|
15
15
|
redis/sentinel.py,sha256=DBphu6uNp6ZCSaVDSVC8nFhSxG93a12DnzgGWpyeh64,14757
|
|
16
16
|
redis/typing.py,sha256=k7F_3Vtsexeb7mUl6txlwrY1veGDLEhtcHe9FwIJOOo,2149
|
|
17
17
|
redis/utils.py,sha256=XD4ySRo9JzLIMMpQY_q9MsxUIdEPee1d7rAq7xhmSwM,8268
|
|
@@ -22,14 +22,14 @@ redis/_parsers/encoders.py,sha256=X0jvTp-E4TZUlZxV5LJJ88TuVrF1vly5tuC0xjxGaSc,17
|
|
|
22
22
|
redis/_parsers/helpers.py,sha256=X5wkGDtuzseeCz23_t3FJpzy1ltIvh7zO1uD3cypiOs,29184
|
|
23
23
|
redis/_parsers/hiredis.py,sha256=qL1iCkWlxI63PiP99u_MY5-V6zKaesW2fD-IMNtc0QI,8189
|
|
24
24
|
redis/_parsers/resp2.py,sha256=f22kH-_ZP2iNtOn6xOe65MSy_fJpu8OEn1u_hgeeojI,4813
|
|
25
|
-
redis/_parsers/resp3.py,sha256=
|
|
25
|
+
redis/_parsers/resp3.py,sha256=JgLDeryCAqx75ghM78mAvxumzWBMEWupmFpaRoL6Xqo,11129
|
|
26
26
|
redis/_parsers/socket.py,sha256=CKD8QW_wFSNlIZzxlbNduaGpiv0I8wBcsGuAIojDfJg,5403
|
|
27
27
|
redis/asyncio/__init__.py,sha256=uoDD8XYVi0Kj6mcufYwLDUTQXmBRx7a0bhKF9stZr7I,1489
|
|
28
|
-
redis/asyncio/client.py,sha256=
|
|
29
|
-
redis/asyncio/cluster.py,sha256=
|
|
30
|
-
redis/asyncio/connection.py,sha256=
|
|
28
|
+
redis/asyncio/client.py,sha256=xZNHB8SEWe_CrDOrNoKUEZMW4Aw_zKF0iygD7MOsujI,61954
|
|
29
|
+
redis/asyncio/cluster.py,sha256=190gM2GMnvrOhOI1I6t2ogS9UkMeokqe-uiFOtHk_1M,67891
|
|
30
|
+
redis/asyncio/connection.py,sha256=AdsKxm-UlqFQQojP7hRDm-cTI5-KeavJkST-8zSif80,48944
|
|
31
31
|
redis/asyncio/lock.py,sha256=GxgV6EsyKpMjh74KtaOPxh4fNPuwApz6Th46qhvrAws,12801
|
|
32
|
-
redis/asyncio/retry.py,sha256=
|
|
32
|
+
redis/asyncio/retry.py,sha256=8carxJLme2f0frB9Z0wU3mHqKzwqzGAGb2TMEtaaMvo,2482
|
|
33
33
|
redis/asyncio/sentinel.py,sha256=H7N_hvdATojwY06aH1AawFV-05AImqtOSAq0xKElbbk,14636
|
|
34
34
|
redis/asyncio/utils.py,sha256=31xFzXczDgSRyf6hSjiwue1eDQ_XlP_OJdp5dKxW_aE,718
|
|
35
35
|
redis/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -39,22 +39,22 @@ redis/auth/token.py,sha256=qYwAgxFW3S93QDUqp1BTsj7Pj9ZohnixGeOX0s7AsjY,3317
|
|
|
39
39
|
redis/auth/token_manager.py,sha256=ShBsYXiBZBJBOMB_Y-pXfLwEOAmc9s1okaCECinNZ7g,12018
|
|
40
40
|
redis/commands/__init__.py,sha256=cTUH-MGvaLYS0WuoytyqtN1wniw2A1KbkUXcpvOSY3I,576
|
|
41
41
|
redis/commands/cluster.py,sha256=vdWdpl4mP51oqfYBZHg5CUXt6jPaNp7aCLHyTieDrt8,31248
|
|
42
|
-
redis/commands/core.py,sha256=
|
|
43
|
-
redis/commands/helpers.py,sha256=
|
|
44
|
-
redis/commands/redismodules.py,sha256
|
|
42
|
+
redis/commands/core.py,sha256=lIi3DUP2kPdBC_RXrSTcUpjI_ORL9nKck9YayWIF_Pc,238242
|
|
43
|
+
redis/commands/helpers.py,sha256=VCoPdBMCr4wxdWBw1EB9R7ZBbQM0exAG1kws4XwsCII,3318
|
|
44
|
+
redis/commands/redismodules.py,sha256=-kLM4RBklDhNh-MXCra81ZTSstIQ-ulRab6v0dYUTdA,2573
|
|
45
45
|
redis/commands/sentinel.py,sha256=hRcIQ9x9nEkdcCsJzo6Ves6vk-3tsfQqfJTT_v3oLY0,4110
|
|
46
46
|
redis/commands/bf/__init__.py,sha256=qk4DA9KsMiP4WYqYeP1T5ScBwctsVtlLyMhrYIyq1Zc,8019
|
|
47
47
|
redis/commands/bf/commands.py,sha256=xeKt8E7G8HB-l922J0DLg07CEIZTVNGx_2Lfyw1gIck,21283
|
|
48
48
|
redis/commands/bf/info.py,sha256=_OB2v_hAPI9mdVNiBx8jUtH2MhMoct9ZRm-e8In6wQo,3355
|
|
49
|
-
redis/commands/json/__init__.py,sha256=
|
|
49
|
+
redis/commands/json/__init__.py,sha256=bznXhLYR652rfLfLp8cz0ZN0Yr8IRx4FgON_tq9_2Io,4845
|
|
50
50
|
redis/commands/json/_util.py,sha256=b_VQTh10FyLl8BtREfJfDagOJCyd6wTQQs8g63pi5GI,116
|
|
51
|
-
redis/commands/json/commands.py,sha256=
|
|
51
|
+
redis/commands/json/commands.py,sha256=ih8upnxeOpjPZXNfqeFBYxiCN2Cmyv8UGu3AlQnT6JQ,15723
|
|
52
52
|
redis/commands/json/decoders.py,sha256=a_IoMV_wgeJyUifD4P6HTcM9s6FhricwmzQcZRmc-Gw,1411
|
|
53
53
|
redis/commands/json/path.py,sha256=0zaO6_q_FVMk1Bkhkb7Wcr8AF2Tfr69VhkKy1IBVhpA,393
|
|
54
54
|
redis/commands/search/__init__.py,sha256=happQFVF0j7P87p7LQsUK5AK0kuem9cA-xvVRdQWpos,5744
|
|
55
55
|
redis/commands/search/_util.py,sha256=9Mp72OO5Ib5UbfN7uXb-iB7hQCm1jQLV90ms2P9XSGU,219
|
|
56
56
|
redis/commands/search/aggregation.py,sha256=CcZSZyquLWLrcSblwgt-bSyMvm-TQS9B7N8QI_ahCBU,11582
|
|
57
|
-
redis/commands/search/commands.py,sha256=
|
|
57
|
+
redis/commands/search/commands.py,sha256=ozyF6YgCiMArhb6ScXLPy49hnJwm4CGK4vrJRwSeB-I,38413
|
|
58
58
|
redis/commands/search/dialect.py,sha256=-7M6kkr33x0FkMtKmUsbeRAE6qxLUbqdJCqIo0UKIXo,105
|
|
59
59
|
redis/commands/search/document.py,sha256=g2R-PRgq-jN33_GLXzavvse4cpIHBMfjPfPK7tnE9Gc,413
|
|
60
60
|
redis/commands/search/field.py,sha256=ZWHYTtrLi-zZojohqXoidfllxP0SiadBW6hnGkBw7mM,5891
|
|
@@ -65,14 +65,14 @@ redis/commands/search/querystring.py,sha256=dE577kOqkCErNgO-IXI4xFVHI8kQE-JiH5ZR
|
|
|
65
65
|
redis/commands/search/reducers.py,sha256=Scceylx8BjyqS-TJOdhNW63n6tecL9ojt4U5Sqho5UY,4220
|
|
66
66
|
redis/commands/search/result.py,sha256=iuqmwOeCNo_7N4a_YxxDzVdOTpbwfF1T2uuq5sTqzMo,2624
|
|
67
67
|
redis/commands/search/suggestion.py,sha256=V_re6suDCoNc0ETn_P1t51FeK4pCamPwxZRxCY8jscE,1612
|
|
68
|
-
redis/commands/timeseries/__init__.py,sha256=
|
|
68
|
+
redis/commands/timeseries/__init__.py,sha256=k492_xE_lBD0cVSX82TWBiNxOWuDDrrVZUjINi3LZSc,3450
|
|
69
69
|
redis/commands/timeseries/commands.py,sha256=8Z2BEyP23qTYCJR_e9zdG11yWmIDwGBMO2PJNLtK2BA,47147
|
|
70
70
|
redis/commands/timeseries/info.py,sha256=meZYdu7IV9KaUWMKZs9qW4vo3Q9MwhdY-EBtKQzls5o,3223
|
|
71
71
|
redis/commands/timeseries/utils.py,sha256=NLwSOS5Dz9N8dYQSzEyBIvrItOWwfQ0xgDj8un6x3dU,1319
|
|
72
72
|
redis/commands/vectorset/__init__.py,sha256=_fM0UdYjuzs8YWIUjQGH9QX5FwI0So8_D-5ALWWrWFc,1322
|
|
73
73
|
redis/commands/vectorset/commands.py,sha256=7CvQNFvkXuG3XPhHJ82y_oBYJwewRFz84aEi3OCH4Rw,12495
|
|
74
74
|
redis/commands/vectorset/utils.py,sha256=N-x0URyg76XC39CNfBym6FkFCVgm5NthzWKBnc2H0Xc,2981
|
|
75
|
-
redis-6.
|
|
76
|
-
redis-6.
|
|
77
|
-
redis-6.
|
|
78
|
-
redis-6.
|
|
75
|
+
redis-6.1.1.dist-info/METADATA,sha256=_9FLKERagTPwBAm2ISdJ3GcENz4Mn5TjHrXrjlIg8Eg,10644
|
|
76
|
+
redis-6.1.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
77
|
+
redis-6.1.1.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
|
|
78
|
+
redis-6.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|