Skip to content

Commit 9cd7898

Browse files
More commands
Signed-off-by: Elena Kolevska <elena@kolevska.com>
1 parent 5ad7d58 commit 9cd7898

File tree

2 files changed

+144
-13
lines changed

2 files changed

+144
-13
lines changed

config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def get_profile(profile_name: str) -> WorkloadConfig:
294294
@staticmethod
295295
def list_profiles() -> List[str]:
296296
"""List available workload profiles."""
297-
return ["basic_rw", "high_throughput", "list_operations", "pubsub_heavy", "transaction_heavy"]
297+
return ["basic_rw", "high_throughput", "list_operations", "pubsub_heavy", "transaction_heavy", "async_mixed"]
298298

299299

300300
def load_config_from_file(file_path: str) -> RunnerConfig:

workloads.py

Lines changed: 143 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,19 @@ def _get_default_operation(self) -> str:
119119
"""Get default operation based on workload type."""
120120
workload_type = self.config.type
121121
if workload_type == "high_throughput":
122-
return random.choice(["SET", "GET", "INCR", "DEL", "LPUSH", "LRANGE", "LTRIM"])
122+
return random.choice([
123+
"SET", "GET", "INCR", "DECR", "DEL", "EXISTS", "EXPIRE", "TTL",
124+
"LPUSH", "RPUSH", "LRANGE", "LPOP", "RPOP", "LLEN", "LTRIM",
125+
"SADD", "SREM", "SMEMBERS", "SCARD",
126+
"HSET", "HGET", "HDEL", "HGETALL", "HLEN",
127+
"ZADD", "ZREM", "ZRANGE", "ZCARD", "ZSCORE"
128+
])
123129
elif workload_type == "list_operations":
124-
return random.choice(["LPUSH", "LRANGE", "LPOP"])
130+
return random.choice(["LPUSH", "RPUSH", "LRANGE", "LPOP", "RPOP", "LLEN", "LTRIM"])
125131
elif workload_type == "pubsub_heavy":
126132
return random.choice(["PUBLISH", "SUBSCRIBE"])
127133
else:
128-
return random.choice(["SET", "GET"])
134+
return random.choice(["SET", "GET", "INCR", "DECR", "DEL", "EXISTS"])
129135

130136
@abstractmethod
131137
def execute_operation(self) -> int:
@@ -227,35 +233,160 @@ def execute_operation(self) -> int:
227233
operation = self._choose_operation()
228234

229235
if operation == "SET":
230-
key = self._generate_key(operation)
236+
key = self._generate_key("STRING:")
231237
value = self._generate_value()
232238
pipe.set(key, value)
233239

234240
elif operation == "GET":
235-
key = self._generate_key(operation)
241+
key = self._generate_key("STRING:")
236242
pipe.get(key)
237243

244+
elif operation == "DEL":
245+
key = self._generate_key("STRING:")
246+
pipe.delete(key)
247+
248+
elif operation == "EXPIRE":
249+
key = self._generate_key("STRING:")
250+
ttl = random.randint(60, 3600) # 1 minute to 1 hour
251+
pipe.expire(key, ttl)
252+
253+
elif operation == "TTL":
254+
key = self._generate_key("STRING:")
255+
pipe.ttl(key)
256+
257+
elif operation == "EXISTS":
258+
key = self._generate_key("STRING:")
259+
pipe.exists(key)
260+
261+
elif operation == "TYPE":
262+
key = self._generate_key("STRING:")
263+
pipe.type(key)
264+
265+
elif operation == "APPEND":
266+
key = self._generate_key("STRING:")
267+
value = self._generate_value()
268+
pipe.append(key, value)
269+
270+
elif operation == "STRLEN":
271+
key = self._generate_key("STRING:")
272+
pipe.strlen(key)
273+
238274
elif operation == "INCR":
239-
key = self._generate_key(operation)
275+
key = self._generate_key("NUMSTRING:")
240276
pipe.incr(key)
241277

242-
elif operation == "DEL":
243-
key = self._generate_key(operation)
244-
pipe.delete(key)
278+
elif operation == "INCRBY":
279+
key = self._generate_key("NUMSTRING:")
280+
amount = random.randint(1, 10)
281+
pipe.incrby(key, amount)
282+
283+
elif operation == "DECR":
284+
key = self._generate_key("NUMSTRING:")
285+
pipe.decr(key)
286+
287+
elif operation == "DECRBY":
288+
key = self._generate_key("NUMSTRING:")
289+
amount = random.randint(1, 10)
290+
pipe.decrby(key, amount)
245291

246292
elif operation == "LPUSH":
247-
key = self._generate_key(operation)
293+
key = self._generate_key("LIST:")
248294
value = self._generate_value()
249295
pipe.lpush(key, value)
250296

251297
elif operation == "LRANGE":
252-
key = self._generate_key(operation)
298+
key = self._generate_key("LIST:")
253299
pipe.lrange(key, 0, 10)
254300

255301
elif operation == "LTRIM":
256-
key = self._generate_key(operation)
302+
key = self._generate_key("LIST:")
257303
pipe.ltrim(key, 0, 10)
258304

305+
elif operation == "RPUSH":
306+
key = self._generate_key("LIST:")
307+
value = self._generate_value()
308+
pipe.rpush(key, value)
309+
310+
elif operation == "RPOP":
311+
key = self._generate_key("LIST:")
312+
pipe.rpop(key)
313+
314+
elif operation == "LPOP":
315+
key = self._generate_key("LIST:")
316+
pipe.lpop(key)
317+
318+
elif operation == "LLEN":
319+
key = self._generate_key("LIST:")
320+
pipe.llen(key)
321+
322+
elif operation == "SADD":
323+
key = self._generate_key("SET:")
324+
value = self._generate_value()
325+
pipe.sadd(key, value)
326+
327+
elif operation == "SREM":
328+
key = self._generate_key("SET:")
329+
value = self._generate_value()
330+
pipe.srem(key, value)
331+
332+
elif operation == "SMEMBERS":
333+
key = self._generate_key("SET:")
334+
pipe.smembers(key)
335+
336+
elif operation == "SCARD":
337+
key = self._generate_key("SET:")
338+
pipe.scard(key)
339+
340+
elif operation == "HSET":
341+
key = self._generate_key("HASH:")
342+
field = f"field_{random.randint(1, 100)}"
343+
value = self._generate_value()
344+
pipe.hset(key, field, value)
345+
346+
elif operation == "HGET":
347+
key = self._generate_key("HASH:")
348+
field = f"field_{random.randint(1, 100)}"
349+
pipe.hget(key, field)
350+
351+
elif operation == "HDEL":
352+
key = self._generate_key("HASH:")
353+
field = f"field_{random.randint(1, 100)}"
354+
pipe.hdel(key, field)
355+
356+
elif operation == "HGETALL":
357+
key = self._generate_key("HASH:")
358+
pipe.hgetall(key)
359+
360+
elif operation == "HLEN":
361+
key = self._generate_key("HASH:")
362+
pipe.hlen(key)
363+
364+
elif operation == "ZADD":
365+
key = self._generate_key("ZSET:")
366+
score = random.uniform(0, 100)
367+
member = self._generate_value()
368+
pipe.zadd(key, {member: score})
369+
370+
elif operation == "ZREM":
371+
key = self._generate_key("ZSET:")
372+
member = self._generate_value()
373+
pipe.zrem(key, member)
374+
375+
elif operation == "ZRANGE":
376+
key = self._generate_key("ZSET:")
377+
start = random.randint(0, 10)
378+
end = start + random.randint(1, 20)
379+
pipe.zrange(key, start, end)
380+
381+
elif operation == "ZCARD":
382+
key = self._generate_key("ZSET:")
383+
pipe.zcard(key)
384+
385+
elif operation == "ZSCORE":
386+
key = self._generate_key("ZSET:")
387+
member = self._generate_value()
388+
pipe.zscore(key, member)
389+
259390
operations.append(operation)
260391

261392
# Execute pipeline

0 commit comments

Comments
 (0)