11import random
22import socket
33import time
4- from collections import OrderedDict
5- from typing import Tuple , Any
4+ from typing import Tuple , Any , Iterable
65
76from django .conf import settings
87from valkey import Valkey
98from valkey .exceptions import ConnectionError , ResponseError , TimeoutError
109from valkey .typing import KeyT , EncodableT
1110
12- from django_valkey .base_client import DEFAULT_TIMEOUT
11+ from django_valkey .base_client import DEFAULT_TIMEOUT , Backend
1312from django_valkey .client .default import DefaultClient
1413from django_valkey .exceptions import ConnectionInterrupted
1514
@@ -113,13 +112,16 @@ def get_many(self, keys, version=None, client=None):
113112 if not keys :
114113 return {}
115114
116- recovered_data = OrderedDict ()
115+ recovered_data = {}
117116
118117 new_keys = [self .make_key (key , version = version ) for key in keys ]
119118 map_keys = dict (zip (new_keys , keys ))
120119
121120 try :
122- results = client .mget (* new_keys )
121+ pipeline = client .pipeline ()
122+ for key in new_keys :
123+ pipeline .get (key )
124+ results = pipeline .execute ()
123125 except _main_exceptions as e :
124126 raise ConnectionInterrupted (connection = client ) from e
125127
@@ -132,6 +134,32 @@ def get_many(self, keys, version=None, client=None):
132134
133135 return recovered_data
134136
137+ def mget (
138+ self ,
139+ keys : Iterable [KeyT ],
140+ version : int | None = None ,
141+ client : Backend | Any | None = None ,
142+ ) -> dict :
143+ client = self ._get_client (write = False , client = client )
144+ if not keys :
145+ return {}
146+
147+ recovered_data = {}
148+
149+ new_keys = [self .make_key (key , version = version ) for key in keys ]
150+
151+ try :
152+ results = client .mget (new_keys )
153+ except _main_exceptions as e :
154+ raise ConnectionInterrupted (connection = client ) from e
155+
156+ for key , value in zip (keys , results ):
157+ if value is None :
158+ continue
159+ val , refresh = self ._unpack (self .decode (value ))
160+ recovered_data [key ] = None if refresh else val
161+ return recovered_data
162+
135163 def set_many (
136164 self , data , timeout = DEFAULT_TIMEOUT , version = None , client = None , herd = True
137165 ):
0 commit comments