diff --git a/redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-rpush-bulkload-pipeline-50.yml b/redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-rpush-bulkload-pipeline-50.yml new file mode 100644 index 00000000..59220ee1 --- /dev/null +++ b/redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-rpush-bulkload-pipeline-50.yml @@ -0,0 +1,39 @@ +ersion: 0.4 +name: memtier_benchmark-10Kkeys-load-list-rpush-bulkload-pipeline-50 +description: | + Runs memtier_benchmark to stress multi-element RPUSH on a single LIST key using + high pipelining and concurrency. This targets quicklist multi-insert behavior and + bulk argument parsing performance (context: Redis PR #13860). +dbconfig: + configuration-parameters: + save: '""' + check: + keyspacelen: 0 + resources: + requests: + memory: 1g +tested-groups: +- list +tested-commands: +- rpush +redis-topologies: +- oss-standalone +build-variants: +- gcc:15.2.0-amd64-debian-bookworm-default +- gcc:15.2.0-arm64-debian-bookworm-default +- dockerhub +clientconfig: + run_image: redislabs/memtier_benchmark:edge + tool: memtier_benchmark + arguments: >- + --pipeline 50 + --command "RPUSH __key__ a b c d e f g h i j k l m n o p q r s t u v w x y z + aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu vv ww xx yy zz + ab bc cd de ef fg gh hi ij jk kl lm mn no op pq qr rs st tu uv vw wx xy yz za + ac bd ce df eg fh gi hj ik jl km ln mo np oq pr qs rt su tv uw vx" --distinct-client-seed + --test-time 120 -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum 10000 + resources: + requests: + cpus: '4' + memory: 2g +priority: 39 \ No newline at end of file diff --git a/redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values-pipeline-10.yml b/redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values-pipeline-10.yml new file mode 100644 index 00000000..db6b53a3 --- /dev/null +++ b/redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values-pipeline-10.yml @@ -0,0 +1,32 @@ +version: 0.4 +name: memtier_benchmark-1Mkeys-load-string-with-1KiB-values-pipeline-10 +description: Runs memtier_benchmark, for a keyspace length of 1M keys loading STRINGs + in which the value has a data size of 1000 Bytes. +dbconfig: + configuration-parameters: + save: '""' + check: + keyspacelen: 0 + resources: + requests: + memory: 3g +tested-commands: +- set +redis-topologies: +- oss-standalone +build-variants: +- gcc:15.2.0-amd64-debian-bookworm-default +- gcc:15.2.0-arm64-debian-bookworm-default +- dockerhub +clientconfig: + run_image: redislabs/memtier_benchmark:edge + tool: memtier_benchmark + arguments: '--pipeline 10 --distinct-client-seed --data-size 1000 --ratio 1:0 --key-pattern R:R --key-minimum=1 --key-maximum + 1000000 --test-time 180 -c 50 -t 4 --hide-histogram' + resources: + requests: + cpus: '4' + memory: 2g +tested-groups: +- string +priority: 17 diff --git a/redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-string-100k-sessions.yml b/redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-string-100k-sessions.yml new file mode 100644 index 00000000..1acd6de0 --- /dev/null +++ b/redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-string-100k-sessions.yml @@ -0,0 +1,98 @@ +version: 0.4 +name: memtier_benchmark-session-caching-string-100k-sessions +description: | + Runs memtier_benchmark to simulate a session caching workload for a SaaS application. + This benchmark focuses exclusively on **string-based session storage**, where each session + is stored in Redis as a serialized JSON string (`session:`) containing fields like + user ID, timestamps, device info, and metadata (total ~400–600B). + + The benchmark models a typical read-heavy cache usage pattern, with an approximate + **read:write ratio of 80:20**, reflecting session retrievals and infrequent updates. + + Command groups: + - Session cache reads (`GET`): ~80% + - Session cache writes (`SET`): ~20% + + To better approximate real-world access patterns, the benchmark uses a **Zipfian key distribution** + (`--command-key-pattern=Z`). This simulates **skewed access** where a small subset of sessions (hot keys) + receives a majority of reads — a common pattern in production workloads. + + While Zipfian is technically a power-law distribution, it effectively mimics **Poisson-like behavior** + in large-scale systems, where access frequency is uneven but statistically predictable. + This access skew mirrors real-life scenarios such as: + - Frequently accessed or "sticky" user sessions + - Popular user accounts or active devices + - Hot caches for trending or recently used resources + + Using Zipfian distribution allows this benchmark to capture **contention**, **cache pressure**, and + **read amplification** effects that occur in real SaaS applications under load. + +dbconfig: + configuration-parameters: + save: '""' + resources: + requests: + memory: 1g + init_lua: | + local seed = 12345 + math.randomseed(seed) + local now = tonumber(redis.call('TIME')[1]) + local function rand_str(len) + local chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + local res = '' + for i = 1, len do + local idx = math.random(#chars) + res = res .. chars:sub(idx, idx) + end + return res + end + for i = 1, 100000 do + local session_id = 'session:' .. i + local session_data = string.format( + '{"userId":"user-%d","organizationId":"org-%d","role":"member","createdAt":"%d","lastAccessed":"%d","ipAddress":"192.168.1.%d","device":"device-%s","authMethod":"password","status":"active","metadata":"%s"}', + i, i, now - math.random(3600), now, (i % 255), rand_str(8), rand_str(200 + (i % 100)) + ) + redis.call('SET', session_id, session_data) + end + return 'OK' + +tested-groups: +- string + +tested-commands: +- get +- set + +redis-topologies: +- oss-standalone + +build-variants: +- gcc:15.2.0-amd64-debian-bookworm-default +- gcc:15.2.0-arm64-debian-bookworm-default +- dockerhub + +clientconfig: + run_image: redislabs/memtier_benchmark:edge + tool: memtier_benchmark + arguments: > + --key-prefix "" + --key-minimum 1 + --key-maximum 100000 + --data-size-range=400-600 + --pipeline=1 + --print-percentiles=50,90,95,99 + --run-count=1 + --test-time=120 + --command="GET session:__key__" + --command-key-pattern=Z + --command-ratio=90 + --command='SET session:__key__ "{\"userId\":\"user-__key__\",\"organizationId\":\"org-__key__\",\"role\":\"member\",\"createdAt\":\"1754905396\",\"lastAccessed\":\"1754906472\",\"ipAddress\":\"192.168.1.36\",\"device\":\"device-2T8YGLbl\",\"authMethod\":\"password\",\"status\":\"active\",\"metadata\":\"wDVmiQsSe2oSEPfhhvYN6jbVxVykSCzQXmnsqCIv5MEmpslD1LMgwJcUe8Wmhvhh56dgTDhH4o3M9vYa6JyAS3Axs2zufVVPWtTsCRVbNGjMmumy7j5vIM0OuclgbHBOxtGDtCU88YBc9IP5oNYiycXXCmq5s7mWAdmRhFrmFxOy3VKlrXJz4ZrtF6KHEflGhoF1FzXtLO8Dckg3B34kdxGsnNiRjNIEtWVxeXekUSDyrxcnwiIy29Zx8SxX2g8ZUrz3sTpEwX7KQZFpIi7XoSKZywvC6I63VMNpZcAO\"}"' + --command-key-pattern=Z + --command-ratio=10 + --hide-histogram + resources: + requests: + cpus: '4' + memory: 2g + +priority: 150