|
88 | 88 | [client queue-name tmot & {:keys [direction pattern]
|
89 | 89 | :or {direction :l pattern :rq}}]
|
90 | 90 | (let [packed-queue-name (utils/pack-pattern pattern queue-name)
|
91 |
| - result (if (= direction :l) |
| 91 | + return (if (= direction :l) |
92 | 92 | (.blpop @client tmot packed-queue-name)
|
93 | 93 | (.brpop @client tmot packed-queue-name))]
|
94 |
| - (when result |
95 |
| - (let [message (second result)] |
| 94 | + (when return |
| 95 | + (let [message (second return)] |
96 | 96 | (log/debug "popped from queue"
|
97 | 97 | {:client client
|
98 | 98 | :queue-name packed-queue-name
|
99 | 99 | :options {:direction direction :pattern pattern}
|
100 | 100 | :message message})
|
101 |
| - (edn/read-string message))))) |
| 101 | + (edn/read-string message))))) |
102 | 102 |
|
103 |
| -(defn lrange |
104 |
| - "Return an entire range given min and max indexes |
105 |
| - |
106 |
| - Parameters: |
107 |
| - - client: Redis client |
108 |
| - - queue-name: Name of the queue |
109 |
| - - floor: floor index |
110 |
| - - ceil: ceiling index" |
111 |
| - [client queue-name floor ceil & options] |
112 |
| - (let [{:keys [pattern] |
113 |
| - :or {pattern :rq}} options |
114 |
| - packed-queue (utils/pack-pattern pattern queue-name) |
115 |
| - result (.lrange @client packed-queue floor ceil)] |
116 |
| - result)) |
117 | 103 |
|
118 | 104 | (defn lindex
|
119 | 105 | "Return a element in a specified index
|
|
126 | 112 | (let [{:keys [pattern]
|
127 | 113 | :or {pattern :rq}} options
|
128 | 114 | packed-queue-name (utils/pack-pattern pattern queue-name)
|
129 |
| - result (.lindex @client packed-queue-name index)] |
| 115 | + return (.lindex @client packed-queue-name index)] |
130 | 116 |
|
131 |
| - (let [message (clojure.edn/read-string result)] |
| 117 | + (let [message (clojure.edn/read-string return)] |
132 | 118 | (log/debug "message found"
|
133 | 119 | {:client client
|
134 | 120 | :queue-name packed-queue-name
|
|
148 | 134 | (let [{:keys [pattern]
|
149 | 135 | :or {pattern :rq} :as opts} options
|
150 | 136 | packed-queue-name (utils/pack-pattern pattern queue-name)
|
151 |
| - encoded-message (clojure.edn/read-string (str message)) |
152 |
| - return (.lset @client packed-queue-name index (str encoded-message))] |
| 137 | + encoded-message (str (clojure.edn/read-string (str message))) |
| 138 | + return (.lset @client packed-queue-name index encoded-message)] |
153 | 139 |
|
154 | 140 | (log/debug "set in queue"
|
155 | 141 | {:client client
|
|
186 | 172 | return))
|
187 | 173 |
|
188 | 174 | (defn linsert
|
189 |
| - "Insert a message before the first occurance of a pivot given. |
| 175 | + "insert a message before the first occurance of a pivot given. |
190 | 176 |
|
191 |
| - Parameters: |
192 |
| - - client: Redis client |
193 |
| - - queue-name: Name of the queue |
| 177 | + parameters: |
| 178 | + - client: redis client |
| 179 | + - queue-name: name of the queue |
194 | 180 | - msg: new msg to be added
|
195 | 181 | - pivot: pivot message to be added before or after
|
196 | 182 | - options:
|
197 | 183 | - pos (keywords):
|
198 | 184 | - before: insert the message before the pivot
|
199 | 185 | - after: insert the message after the pivot"
|
200 |
| - [client queue-name msg pivot & options] |
| 186 | + [client queue-name pivot msg & options] |
201 | 187 | (let [{:keys [pos pattern]
|
202 | 188 | :or {pos :before
|
203 | 189 | pattern :rq} :as opts} options
|
204 | 190 | packed-queue-name (utils/pack-pattern pattern queue-name)
|
205 | 191 | encoded-message (str (clojure.edn/read-string (str msg)))
|
206 | 192 | encoded-pivot (str (clojure.edn/read-string (str pivot)))
|
207 |
| - encoded-pos (str (s/capitalize (str pivot))) |
| 193 | + encoded-pos (if (= pos :before) |
| 194 | + redis.clients.jedis.args.ListPosition/BEFORE |
| 195 | + redis.clients.jedis.args.ListPosition/AFTER) |
208 | 196 | return (.linsert @client packed-queue-name encoded-pos encoded-pivot encoded-message)]
|
209 |
| - (log/debug "inserted in queue" |
| 197 | + (log/debug "inserted in queue" |
| 198 | + {:client client |
| 199 | + :queue-name queue-name |
| 200 | + :msg encoded-message |
| 201 | + :opts opts |
| 202 | + :return return}) |
| 203 | + return)) |
| 204 | + |
| 205 | + |
| 206 | +(defn lrange |
| 207 | + "Return an entire range given min and max indexes |
| 208 | + |
| 209 | + Parameters: |
| 210 | + - client: Redis client |
| 211 | + - queue-name: Name of the queue |
| 212 | + - floor: floor index |
| 213 | + - ceil: ceiling index" |
| 214 | + [client queue-name floor ceil & options] |
| 215 | + (let [{:keys [pattern] |
| 216 | + :or {pattern :rq} :as opts} options |
| 217 | + packed-queue-name (utils/pack-pattern pattern queue-name) |
| 218 | + return (.lrange @client packed-queue-name floor ceil)] |
| 219 | + (log/debug "queue specified range" |
210 | 220 | {:client client
|
211 |
| - :queue-name queue-name |
212 |
| - :msg (clojure.edn/read-string (str msg)) |
| 221 | + :queue-name packed-queue-name |
213 | 222 | :opts opts
|
214 |
| - :return return}) |
215 |
| - return)) |
| 223 | + :result return}) |
| 224 | + (mapv clojure.edn/read-string return))) |
| 225 | + |
216 | 226 |
|
217 | 227 | (defn ltrim
|
218 | 228 | "Trim a list to the specified range.
|
|
226 | 236 | - pattern: pattern to pack the queue name"
|
227 | 237 | [client queue-name start stop & options]
|
228 | 238 | (let [{:keys [pattern]
|
229 |
| - :or {pattern :rq}} options |
| 239 | + :or {pattern :rq} :as opts} options |
230 | 240 | packed-queue-name (utils/pack-pattern pattern queue-name)]
|
231 |
| - (.ltrim @client packed-queue-name start stop))) |
| 241 | + (let [return (.ltrim @client packed-queue-name start stop)] |
| 242 | + (log/debug "queue trimmed" |
| 243 | + {:client client |
| 244 | + :queue-name queue-name |
| 245 | + :opts opts |
| 246 | + :result return}) |
| 247 | + return))) |
| 248 | + |
| 249 | + |
232 | 250 |
|
233 | 251 | (defn rpoplpush
|
234 | 252 | "Remove the last element in a list and append it to another list.
|
|
243 | 261 | (let [{:keys [pattern]
|
244 | 262 | :or {pattern :rq}} options
|
245 | 263 | packed-source-queue (utils/pack-pattern pattern source-queue)
|
246 |
| - packed-destination-queue (utils/pack-pattern pattern destination-queue)] |
247 |
| - (.rpoplpush @client packed-source-queue packed-destination-queue))) |
| 264 | + packed-destination-queue (utils/pack-pattern pattern destination-queue) |
| 265 | + return (.rpoplpush @client packed-source-queue packed-destination-queue)] |
| 266 | + (log/debug "rpoplpush operation" |
| 267 | + {:client client |
| 268 | + :source-queue packed-source-queue |
| 269 | + :destination-queue packed-destination-queue |
| 270 | + :result return}) |
| 271 | + return)) |
| 272 | + |
248 | 273 |
|
249 | 274 | (defn brpoplpush
|
250 | 275 | "Remove the last element in a list and append it to another list, blocking if necessary.
|
|
260 | 285 | (let [{:keys [pattern]
|
261 | 286 | :or {pattern :rq}} options
|
262 | 287 | packed-source-queue (utils/pack-pattern pattern source-queue)
|
263 |
| - packed-destination-queue (utils/pack-pattern pattern destination-queue)] |
264 |
| - (.brpoplpush @client packed-source-queue packed-destination-queue timeout))) |
| 288 | + packed-destination-queue (utils/pack-pattern pattern destination-queue) |
| 289 | + result (.brpoplpush @client packed-source-queue packed-destination-queue timeout)] |
| 290 | + (log/debug "brpoplpush operation" |
| 291 | + {:client client |
| 292 | + :source-queue packed-source-queue |
| 293 | + :destination-queue packed-destination-queue |
| 294 | + :timeout timeout |
| 295 | + :result result}) |
| 296 | + result)) |
| 297 | + |
| 298 | + |
265 | 299 |
|
266 | 300 | (defn lmove
|
267 |
| - "Atomically return and remove the first/last element (head/tail depending on the wherefrom argument) of the source list, and push the element as the first/last element (head/tail depending on the whereto argument) of the destination list. |
| 301 | + "Atomically return and remove the first/last element of the source list, and push the element as the first/last element of the destination list. |
268 | 302 |
|
269 | 303 | Parameters:
|
270 | 304 | - client: Redis client
|
|
278 | 312 | (let [{:keys [pattern]
|
279 | 313 | :or {pattern :rq}} options
|
280 | 314 | packed-source-queue (utils/pack-pattern pattern source-queue)
|
281 |
| - packed-destination-queue (utils/pack-pattern pattern destination-queue)] |
282 |
| - (.lmove @client packed-source-queue packed-destination-queue wherefrom whereto))) |
| 315 | + packed-destination-queue (utils/pack-pattern pattern destination-queue) |
| 316 | + from-direction (if (= wherefrom "LEFT") |
| 317 | + redis.clients.jedis.args.ListDirection/LEFT |
| 318 | + redis.clients.jedis.args.ListDirection/RIGHT) |
| 319 | + to-direction (if (= whereto "LEFT") |
| 320 | + redis.clients.jedis.args.ListDirection/LEFT |
| 321 | + redis.clients.jedis.args.ListDirection/RIGHT) |
| 322 | + result (.lmove @client packed-source-queue packed-destination-queue from-direction to-direction)] |
| 323 | + (log/debug "lmove operation" |
| 324 | + {:client client |
| 325 | + :source-queue packed-source-queue |
| 326 | + :destination-queue packed-destination-queue |
| 327 | + :from-direction from-direction |
| 328 | + :to-direction to-direction |
| 329 | + :result result}) |
| 330 | + result)) |
0 commit comments