redis-benchmarks-specification 0.2.42__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_benchmarks_specification/__api__/Readme.md +7 -0
- redis_benchmarks_specification/__api__/__init__.py +5 -0
- redis_benchmarks_specification/__api__/api.py +87 -0
- redis_benchmarks_specification/__api__/app.py +191 -0
- redis_benchmarks_specification/__builder__/Readme.md +7 -0
- redis_benchmarks_specification/__builder__/__init__.py +5 -0
- redis_benchmarks_specification/__builder__/builder.py +1010 -0
- redis_benchmarks_specification/__builder__/schema.py +23 -0
- redis_benchmarks_specification/__cli__/__init__.py +5 -0
- redis_benchmarks_specification/__cli__/args.py +226 -0
- redis_benchmarks_specification/__cli__/cli.py +624 -0
- redis_benchmarks_specification/__cli__/stats.py +1304 -0
- redis_benchmarks_specification/__common__/__init__.py +0 -0
- redis_benchmarks_specification/__common__/builder_schema.py +256 -0
- redis_benchmarks_specification/__common__/env.py +96 -0
- redis_benchmarks_specification/__common__/github.py +280 -0
- redis_benchmarks_specification/__common__/package.py +28 -0
- redis_benchmarks_specification/__common__/runner.py +485 -0
- redis_benchmarks_specification/__common__/spec.py +143 -0
- redis_benchmarks_specification/__common__/suppress_warnings.py +20 -0
- redis_benchmarks_specification/__common__/timeseries.py +1621 -0
- redis_benchmarks_specification/__compare__/__init__.py +5 -0
- redis_benchmarks_specification/__compare__/args.py +240 -0
- redis_benchmarks_specification/__compare__/compare.py +3322 -0
- redis_benchmarks_specification/__init__.py +15 -0
- redis_benchmarks_specification/__runner__/__init__.py +5 -0
- redis_benchmarks_specification/__runner__/args.py +334 -0
- redis_benchmarks_specification/__runner__/remote_profiling.py +535 -0
- redis_benchmarks_specification/__runner__/runner.py +3837 -0
- redis_benchmarks_specification/__self_contained_coordinator__/__init__.py +5 -0
- redis_benchmarks_specification/__self_contained_coordinator__/args.py +210 -0
- redis_benchmarks_specification/__self_contained_coordinator__/artifacts.py +27 -0
- redis_benchmarks_specification/__self_contained_coordinator__/build_info.py +61 -0
- redis_benchmarks_specification/__self_contained_coordinator__/clients.py +58 -0
- redis_benchmarks_specification/__self_contained_coordinator__/cpuset.py +17 -0
- redis_benchmarks_specification/__self_contained_coordinator__/docker.py +108 -0
- redis_benchmarks_specification/__self_contained_coordinator__/post_processing.py +19 -0
- redis_benchmarks_specification/__self_contained_coordinator__/prepopulation.py +96 -0
- redis_benchmarks_specification/__self_contained_coordinator__/runners.py +740 -0
- redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py +2554 -0
- redis_benchmarks_specification/__setups__/__init__.py +0 -0
- redis_benchmarks_specification/__setups__/topologies.py +17 -0
- redis_benchmarks_specification/__spec__/__init__.py +5 -0
- redis_benchmarks_specification/__spec__/args.py +78 -0
- redis_benchmarks_specification/__spec__/cli.py +259 -0
- redis_benchmarks_specification/__watchdog__/__init__.py +5 -0
- redis_benchmarks_specification/__watchdog__/args.py +54 -0
- redis_benchmarks_specification/__watchdog__/watchdog.py +175 -0
- redis_benchmarks_specification/commands/__init__.py +0 -0
- redis_benchmarks_specification/commands/commands.py +15 -0
- redis_benchmarks_specification/setups/builders/gcc:15.2.0-amd64-debian-bookworm-default.yml +20 -0
- redis_benchmarks_specification/setups/builders/gcc:15.2.0-arm64-debian-bookworm-default.yml +20 -0
- redis_benchmarks_specification/setups/platforms/aws-ec2-1node-c5.4xlarge.yml +27 -0
- redis_benchmarks_specification/setups/topologies/topologies.yml +153 -0
- redis_benchmarks_specification/test-suites/defaults.yml +32 -0
- redis_benchmarks_specification/test-suites/generate.py +114 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpire-5-fields-10B-values.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpire-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpireat-5-fields-10B-values.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpireat-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetall-50-fields-100B-values.yml +52 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetex-5-fields-10B-values.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetex-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetex-persist-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpire-5-fields-10B-values.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpire-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpireat-5-fields-10B-values.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpireat-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-htll-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-1000B-values-expiration.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-10B-values-expiration.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-10B-values-long-expiration.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-10B-values-short-expiration.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-20-fields-with-1B-values-pipeline-30.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-1000B-values-expiration.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-10B-values-expiration.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-10B-values-long-expiration.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-10B-values-short-expiration.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-1000B-values-expiration.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-1000B-values.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-100B-values.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values-expiration.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values-long-expiration.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values-short-expiration.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-hash-50-fields-with-10000B-values.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-rpush-bulkload-pipeline-50.yml +39 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-with-10B-values-pipeline-50.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values-pipeline-10.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values-pipeline-10.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-string-get-10B-pipeline-100-nokeyprefix.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Kkeys-hash-listpack-500-fields-update-20-fields-with-1B-to-64B-values.yml +75 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-100B-expire-use-case.yml +50 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-expire-use-case.yml +50 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-psetex-expire-use-case.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-setex-expire-use-case.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-1KiB-expire-use-case.yml +49 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-4KiB-expire-use-case.yml +50 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-bitmap-getbit-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-exists-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-expire-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-expireat-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-pexpire-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-count-500-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-cursor-count-500-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-cursor-count-5000-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-cursor-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-type-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-touch-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-ttl-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hexists.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hget-hgetall-hkeys-hvals-with-100B-values.yml +48 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hgetall-50-fields-10B-values.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hincrby.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hincrbyfloat.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-10-fields-with-10B-values-with-expiration-pipeline-10.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-5-fields-with-100B-values-with-expiration-pipeline-10.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-5-fields-with-10B-values-with-expiration-pipeline-10.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-50-fields-with-10B-values-with-expiration-pipeline-10.yml +54 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hmget-5-fields-with-100B-values-pipeline-10.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-transactions-multi-exec-pipeline-20.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-100B-values.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-10B-values.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-1KiB-values.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-rpoplpush-with-10B-values.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-50-fields-with-10B-values-long-expiration-pipeline-10.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-hmset-5-fields-with-1000B-values.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-rpush-with-10B-values.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-100B-values.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-10B-values-pipeline-10.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-10B-values.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-1KiB-values.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits-pipeline-10.yml +58 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits.yml +58 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values-pipeline-10.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values-pipeline-10.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-100B-values-pipeline-10.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-100B-values.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-10.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-100-nokeyprefix.yml +29 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-100.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-50.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-500.yml +33 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values-pipeline-10.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-20KiB-values.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-listpack-with-100-elements-double-score.yml +91 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-with-10-elements-double-score.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-with-10-elements-int-score.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-append-1-100B-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-append-1-100B.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-decr.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-100B-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-100B.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-100-nokeyprefix.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-100.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-50.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-500.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-1KiB-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-1KiB.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-32B-pipeline-10.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-32B.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incr-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrby-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrby.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrbyfloat-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrbyfloat.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-int-encoding-strlen-pipeline-10.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mget-1KiB.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B-expire-pipeline-10.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B-expire.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-1KB-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-1KB.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-32B-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-32B.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-512B-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-512B.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-with-expiration-240B-400_conns.yml +47 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-set-with-ex-100B-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setex-100B-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-1KiB-pipeline-1.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-1KiB-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-4KiB-pipeline-1.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-4KiB-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-512B-pipeline-1.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-512B-pipeline-10.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setrange-100B-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setrange-100B.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-100M-bits-bitmap-bitcount.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-1Billion-bits-bitmap-bitcount.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-2-elements-geopos.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-2-elements-geosearch-fromlonlat-withcoord.yml +39 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geodist-pipeline-10.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geodist.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geohash-pipeline-10.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geohash.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geopos-pipeline-10.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geopos.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-bybox.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-pipeline-10.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-1K-fields-hgetall-pipeline-10.yml +285 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-1K-fields-hgetall.yml +284 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-1K-fields-100B-values-cursor-count-1000.yml +291 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-1K-fields-10B-values-cursor-count-100.yml +291 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-1K-fields-10B-values.yml +290 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-50-fields-10B-values.yml +54 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10-elements-lrange-all-elements-pipeline-10.yml +37 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10-elements-lrange-all-elements.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-int-7bit-uint-lrange-all-elements-pipeline-10.yml +44 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-int-lrange-all-elements-pipeline-10.yml +52 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-llen-pipeline-10.yml +52 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-lrange-all-elements-pipeline-10.yml +52 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-lrange-all-elements.yml +51 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-integer.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-string-pipeline-10.yml +42 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-string.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-linsert-lrem-integer.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-linsert-lrem-string.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lpos-integer.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lpos-string.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-1K-elements-lrange-all-elements-pipeline-10.yml +202 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-1K-elements-lrange-all-elements.yml +201 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-2K-elements-quicklist-lrange-all-elements-longs.yml +258 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-hash-1K-fields-with-5B-values.yml +282 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-zset-with-5-elements-parsing-float-score.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-zset-with-5-elements-parsing-hexa-score.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-pfadd-4KB-values-pipeline-10.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smembers-pipeline-10.yml +37 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smembers.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smismember.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sismember-is-a-member.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sismember-not-a-member.yml +53 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-smembers.yml +50 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-smismember.yml +54 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sscan.yml +50 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10M-elements-sismember-50pct-chance.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10M-elements-srem-50pct-chance.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-smembers.yml +200 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-sscan-cursor-count-100.yml +201 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-sscan.yml +200 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1M-elements-sismember-50pct-chance.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-200K-elements-sadd-constant.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-2M-elements-sadd-increasing.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zincrby-1M-elements-pipeline-1.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-100K-elements-pipeline-1.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-10M-elements-pipeline-1.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-1M-elements-pipeline-1.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrem-5M-elements-pipeline-1.yml +47 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-1.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrank-1M-elements-pipeline-1.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-10-elements-zrange-all-elements-long-scores.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-10-elements-zrange-all-elements.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrange-all-elements.yml +66 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements-long-scores.yml +66 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements.yml +66 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zscan.yml +65 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1K-elements-zrange-all-elements.yml +322 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1K-elements-zscan.yml +321 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zcard-pipeline-10.yml +39 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zremrangebyscore-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zrevrange-5-elements.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zrevrange-withscores-5-elements-pipeline-10.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zscore-pipeline-10.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-600K-elements-zrangestore-1K-elements.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-600K-elements-zrangestore-300K-elements.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-listpack-zrank-100-elements-pipeline-1.yml +50 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-lua-eval-hset-expire.yml +37 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-lua-evalsha-hset-expire.yml +41 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sdiff.yml +57 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sinter.yml +57 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sunion.yml +57 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-stream-5-entries-xread-all-entries-pipeline-10.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-stream-5-entries-xread-all-entries.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunion.yml +434 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunionstore.yml +434 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-load-string-with-512B-values-pipeline-10.yml +37 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-load-string-with-512B-values.yml +37 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-400_conns.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-40_conns.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-2000_conns.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-400_conns.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-40_conns.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-400_conns.yml +45 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-2000_conns.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-400_conns.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-5200_conns.yml +46 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-50-50-with-512B-values-with-expiration-pipeline-10-400_conns.yml +43 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-connection-hello-pipeline-10.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-connection-hello.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-multiple-hll-pfcount-100B-values.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-multiple-hll-pfmerge-100B-values.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-connection-ping-pipeline-10.yml +29 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-100-subscribers.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-1000-subscribers.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-5000-subscribers.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-50K-subscribers-5k-conns.yml +40 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-publish-1K-channels-10B-no-subscribers.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-server-time-pipeline-10.yml +29 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-leaderboard-top-10.yml +68 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-leaderboard-top-100.yml +69 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-leaderboard-top-1000.yml +68 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-rate-limiting-lua-100k-sessions.yml +64 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-realtime-analytics-membership-pipeline-10.yml +56 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-realtime-analytics-membership.yml +56 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-hash-100k-sessions.yml +108 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-json-100k-sessions.yml +109 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-string-100k-sessions.yml +98 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-storage-100k-sessions.yml +205 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-storage-1k-sessions.yml +205 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-stream-10M-entries-xread-count-100.yml +36 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-stream-10M-entries-xreadgroup-count-100-noack.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-stream-10M-entries-xreadgroup-count-100.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-stream-concurrent-xadd-xreadgroup-70-30.yml +50 -0
- redis_benchmarks_specification/test-suites/template.txt +18 -0
- redis_benchmarks_specification/vector-search-test-suites/vector_db_benchmark_test.yml +41 -0
- redis_benchmarks_specification-0.2.42.dist-info/LICENSE +201 -0
- redis_benchmarks_specification-0.2.42.dist-info/METADATA +434 -0
- redis_benchmarks_specification-0.2.42.dist-info/RECORD +336 -0
- redis_benchmarks_specification-0.2.42.dist-info/WHEEL +4 -0
- redis_benchmarks_specification-0.2.42.dist-info/entry_points.txt +10 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
version: 0.4
|
|
2
|
+
name: memtier_benchmark-playbook-realtime-analytics-membership
|
|
3
|
+
description: 'This benchmark captures the performance of Redis under realistic **membership analytics** workloads, where frequent set algebra operations (intersection, union, difference) drive personalization, segmentation, and eligibility checks.'
|
|
4
|
+
dbconfig:
|
|
5
|
+
configuration-parameters:
|
|
6
|
+
save: '""'
|
|
7
|
+
check:
|
|
8
|
+
keyspacelen: 2
|
|
9
|
+
resources:
|
|
10
|
+
requests:
|
|
11
|
+
memory: 1g
|
|
12
|
+
init_commands:
|
|
13
|
+
- '"SADD" "set:{org1}:10" "lysbgqqfqw" "mtccjerdon" "jekkafodvk" "nmgxcctxpn" "vyqqkuszzh"
|
|
14
|
+
"pytrnqdhvs" "oguwnmniig" "gekntrykfh" "nhfnbxqgol" "cgoeihlnei"'
|
|
15
|
+
- '"SADD" "set:{org1}:100" "vyoomgwuzv" "xamjodnbpf" "ewomnmugfa" "ljcgdooafo" "pcxdhdjwnf"
|
|
16
|
+
"djetcyfxuc" "licotqplim" "alqlzsvuuz" "ijsmoyesvd" "whmotknaff" "rkaznetutk"
|
|
17
|
+
"ksqpdywgdd" "gorgpnnqwr" "gekntrykfh" "rjkknoigmu" "luemuetmia" "gxephxbdru"
|
|
18
|
+
"ncjfckgkcl" "hhjclfbbka" "cgoeihlnei" "zwnitejtpg" "upodnpqenn" "mibvtmqxcy"
|
|
19
|
+
"htvbwmfyic" "rqvryfvlie" "nxcdcaqgit" "gfdqdrondm" "lysbgqqfqw" "nxzsnkmxvi"
|
|
20
|
+
"nsxaigrnje" "cwaveajmcz" "xsepfhdizi" "owtkxlzaci" "agsdggdghc" "tcjvjofxtd"
|
|
21
|
+
"kgqrovsxce" "ouuybhtvyb" "ueyrvldzwl" "vpbkvwgxsf" "pytrnqdhvs" "qbiwbqiubb"
|
|
22
|
+
"ssjqrsluod" "urvgxwbiiz" "ujrxcmpvsq" "mtccjerdon" "xczfmrxrja" "imyizmhzjk"
|
|
23
|
+
"oguwnmniig" "mxwgdcutnb" "pqyurbvifk" "ccagtnjilc" "mbxohpancs" "lgrkndhekf"
|
|
24
|
+
"eqlgkwosie" "jxoxtnzujs" "lbtpbknelm" "ichqzmiyot" "mbgehjiauu" "aovfsvbwjg"
|
|
25
|
+
"nmgxcctxpn" "vyqqkuszzh" "rojeolnopp" "ibhohmfxzt" "qbyhorvill" "nhfnbxqgol"
|
|
26
|
+
"wkbasfyzqz" "mjjuylgssm" "imdqxmkzdj" "oapbvnisyq" "bqntlsaqjb" "ocrcszcznp"
|
|
27
|
+
"hhniikmtsx" "hlpdstpvzw" "wqiwdbncmt" "vymjzlzqcn" "hhjchwjlmc" "ypfeltycpy"
|
|
28
|
+
"qjyeqcfhjj" "uapsgmizgh" "owbbdezgxn" "qrosceblyo" "sahqeskveq" "dapacykoah"
|
|
29
|
+
"wvcnqbvlnf" "perfwnpvkl" "ulbrotlhze" "fhuvzpxjbc" "holjcdpijr" "onzjrteqmu"
|
|
30
|
+
"pquewclxuy" "vpmpffdoqz" "eouliovvra" "vxcbagyymm" "jekkafodvk" "ypekeuutef"
|
|
31
|
+
"dlbqcynhrn" "erxulvebrj" "qwxrsgafzy" "dlsjwmqzhx" "exvhmqxvvp"'
|
|
32
|
+
dataset_name: 2keys-set-10-100-elements-org1
|
|
33
|
+
dataset_description: This dataset contains 2 set keys, one with 10 elements and
|
|
34
|
+
the other with 100 elements. The smaller set is a subset of the larger one.
|
|
35
|
+
tested-commands:
|
|
36
|
+
- smembers
|
|
37
|
+
- sdiff
|
|
38
|
+
- sunion
|
|
39
|
+
redis-topologies:
|
|
40
|
+
- oss-standalone
|
|
41
|
+
build-variants:
|
|
42
|
+
- gcc:15.2.0-amd64-debian-bookworm-default
|
|
43
|
+
- gcc:15.2.0-arm64-debian-bookworm-default
|
|
44
|
+
- dockerhub
|
|
45
|
+
clientconfig:
|
|
46
|
+
run_image: redislabs/memtier_benchmark:edge
|
|
47
|
+
tool: memtier_benchmark
|
|
48
|
+
arguments: --command="SDIFF set:{org1}:100 set:{org1}:10" --command "SMEMBERS set:{org1}:100" --command
|
|
49
|
+
"SMEMBERS set:{org1}:10" --command "SUNION set:{org1}:100 set:{org1}:10" --hide-histogram --test-time 180
|
|
50
|
+
resources:
|
|
51
|
+
requests:
|
|
52
|
+
cpus: '4'
|
|
53
|
+
memory: 2g
|
|
54
|
+
tested-groups:
|
|
55
|
+
- set
|
|
56
|
+
priority: 131
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
version: 0.4
|
|
2
|
+
name: memtier_benchmark-session-caching-hash-100k-sessions
|
|
3
|
+
description: |
|
|
4
|
+
Runs memtier_benchmark to simulate a session caching workload for a SaaS application.
|
|
5
|
+
This benchmark focuses exclusively on hash-based session storage, where each session
|
|
6
|
+
is stored in a Redis hash (`session:<id>`) with fields like user ID, timestamps, device info,
|
|
7
|
+
and metadata (total ~400–600B).
|
|
8
|
+
|
|
9
|
+
The benchmark models a typical read-heavy cache usage pattern, with an approximate
|
|
10
|
+
**read:write ratio of 90:10**, reflecting session retrievals and infrequent updates.
|
|
11
|
+
|
|
12
|
+
Command groups:
|
|
13
|
+
- Session cache reads (`HGETALL`): ~90%
|
|
14
|
+
- Session cache writes (`HSET`): ~10%
|
|
15
|
+
|
|
16
|
+
To better approximate real-world access patterns, the benchmark uses a **Zipfian key distribution**
|
|
17
|
+
(`--command-key-pattern=Z`). This simulates **skewed access** where a small subset of sessions (hot keys)
|
|
18
|
+
receives a majority of reads — a common pattern in production workloads.
|
|
19
|
+
|
|
20
|
+
While Zipfian is technically a power-law distribution, it effectively mimics **Poisson-like behavior**
|
|
21
|
+
in large-scale systems, where access frequency is uneven but statistically predictable.
|
|
22
|
+
This access skew mirrors real-life scenarios such as:
|
|
23
|
+
- Frequently accessed or "sticky" user sessions
|
|
24
|
+
- Popular user accounts or active devices
|
|
25
|
+
- Hot caches for trending or recently used resources
|
|
26
|
+
|
|
27
|
+
Using Zipfian distribution allows this benchmark to capture **contention**, **cache pressure**, and
|
|
28
|
+
**read amplification** effects that occur in real SaaS applications under load.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
dbconfig:
|
|
32
|
+
configuration-parameters:
|
|
33
|
+
save: '""'
|
|
34
|
+
resources:
|
|
35
|
+
requests:
|
|
36
|
+
memory: 1g
|
|
37
|
+
init_lua: |
|
|
38
|
+
local seed = 12345
|
|
39
|
+
math.randomseed(seed)
|
|
40
|
+
local now = tonumber(redis.call('TIME')[1])
|
|
41
|
+
local function rand_str(len)
|
|
42
|
+
local chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
|
43
|
+
local res = ''
|
|
44
|
+
for i = 1, len do
|
|
45
|
+
local idx = math.random(#chars)
|
|
46
|
+
res = res .. chars:sub(idx, idx)
|
|
47
|
+
end
|
|
48
|
+
return res
|
|
49
|
+
end
|
|
50
|
+
for i = 1, 100000 do
|
|
51
|
+
local session_id = 'session:' .. i
|
|
52
|
+
local user_id = 'user-' .. i
|
|
53
|
+
local org_id = 'org-' .. i
|
|
54
|
+
redis.call('HSET', session_id,
|
|
55
|
+
'userId', user_id,
|
|
56
|
+
'organizationId', org_id,
|
|
57
|
+
'role', 'member',
|
|
58
|
+
'createdAt', tostring(now - math.random(3600)),
|
|
59
|
+
'lastAccessed', tostring(now),
|
|
60
|
+
'ipAddress', '192.168.1.' .. (i % 255),
|
|
61
|
+
'device', 'device-' .. rand_str(8),
|
|
62
|
+
'authMethod', 'password',
|
|
63
|
+
'status', 'active',
|
|
64
|
+
'metadata', rand_str(200 + (i % 100))
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
return 'OK'
|
|
68
|
+
|
|
69
|
+
tested-groups:
|
|
70
|
+
- hash
|
|
71
|
+
|
|
72
|
+
tested-commands:
|
|
73
|
+
- hgetall
|
|
74
|
+
- hset
|
|
75
|
+
|
|
76
|
+
redis-topologies:
|
|
77
|
+
- oss-standalone
|
|
78
|
+
|
|
79
|
+
build-variants:
|
|
80
|
+
- gcc:15.2.0-amd64-debian-bookworm-default
|
|
81
|
+
- gcc:15.2.0-arm64-debian-bookworm-default
|
|
82
|
+
- dockerhub
|
|
83
|
+
|
|
84
|
+
clientconfig:
|
|
85
|
+
run_image: redislabs/memtier_benchmark:edge
|
|
86
|
+
tool: memtier_benchmark
|
|
87
|
+
arguments: >
|
|
88
|
+
--key-prefix ""
|
|
89
|
+
--key-minimum 1
|
|
90
|
+
--key-maximum 100000
|
|
91
|
+
--data-size-range=400-600
|
|
92
|
+
--pipeline=1
|
|
93
|
+
--print-percentiles=50,90,95,99
|
|
94
|
+
--run-count=1
|
|
95
|
+
--test-time=120
|
|
96
|
+
--command="HGETALL session:__key__"
|
|
97
|
+
--command-key-pattern=Z
|
|
98
|
+
--command-ratio=90
|
|
99
|
+
--command="HSET session:__key__ userId user-__key__ organizationId org-__key__ role admin email user__key__@example.com name \"User __key__\" permissions \"[\\\"read\\\",\\\"write\\\"]\" lastActivity __key__ ipAddress 192.168.1.__key__ userAgent \"Mozilla/5.0\" createdAt __key__"
|
|
100
|
+
--command-key-pattern=Z
|
|
101
|
+
--command-ratio=10
|
|
102
|
+
--hide-histogram
|
|
103
|
+
resources:
|
|
104
|
+
requests:
|
|
105
|
+
cpus: '4'
|
|
106
|
+
memory: 2g
|
|
107
|
+
|
|
108
|
+
priority: 150
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
version: 0.4
|
|
2
|
+
name: memtier_benchmark-session-caching-json-100k-sessions
|
|
3
|
+
description: |
|
|
4
|
+
Runs memtier_benchmark to simulate a session caching workload for a SaaS application.
|
|
5
|
+
This benchmark focuses exclusively on JSON-based session storage, where each session
|
|
6
|
+
is stored as a Redis JSON document (`session:<id>`) with fields like user ID, timestamps, device info,
|
|
7
|
+
and metadata (total ~400–600B).
|
|
8
|
+
|
|
9
|
+
The benchmark models a typical read-heavy cache usage pattern, with an approximate
|
|
10
|
+
**read:write ratio of 90:10**, reflecting session retrievals and infrequent updates.
|
|
11
|
+
|
|
12
|
+
Command groups:
|
|
13
|
+
- Session cache reads (`JSON.GET`): ~90%
|
|
14
|
+
- Session cache writes (`JSON.SET`): ~10%
|
|
15
|
+
|
|
16
|
+
To better approximate real-world access patterns, the benchmark uses a **Zipfian key distribution**
|
|
17
|
+
(`--command-key-pattern=Z`). This simulates **skewed access** where a small subset of sessions (hot keys)
|
|
18
|
+
receives a majority of reads — a common pattern in production workloads.
|
|
19
|
+
|
|
20
|
+
While Zipfian is technically a power-law distribution, it effectively mimics **Poisson-like behavior**
|
|
21
|
+
in large-scale systems, where access frequency is uneven but statistically predictable.
|
|
22
|
+
This access skew mirrors real-life scenarios such as:
|
|
23
|
+
- Frequently accessed or "sticky" user sessions
|
|
24
|
+
- Popular user accounts or active devices
|
|
25
|
+
- Hot caches for trending or recently used resources
|
|
26
|
+
|
|
27
|
+
Using Zipfian distribution allows this benchmark to capture **contention**, **cache pressure**, and
|
|
28
|
+
**read amplification** effects that occur in real SaaS applications under load.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
dbconfig:
|
|
32
|
+
configuration-parameters:
|
|
33
|
+
save: '""'
|
|
34
|
+
resources:
|
|
35
|
+
requests:
|
|
36
|
+
memory: 1g
|
|
37
|
+
init_lua: |
|
|
38
|
+
local seed = 12345
|
|
39
|
+
math.randomseed(seed)
|
|
40
|
+
local now = tonumber(redis.call('TIME')[1])
|
|
41
|
+
local function rand_str(len)
|
|
42
|
+
local chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
|
43
|
+
local res = ''
|
|
44
|
+
for i = 1, len do
|
|
45
|
+
local idx = math.random(#chars)
|
|
46
|
+
res = res .. chars:sub(idx, idx)
|
|
47
|
+
end
|
|
48
|
+
return res
|
|
49
|
+
end
|
|
50
|
+
for i = 1, 100000 do
|
|
51
|
+
local session_id = 'session:' .. i
|
|
52
|
+
local user_id = 'user-' .. i
|
|
53
|
+
local org_id = 'org-' .. i
|
|
54
|
+
local session_data = {
|
|
55
|
+
userId = user_id,
|
|
56
|
+
organizationId = org_id,
|
|
57
|
+
role = 'member',
|
|
58
|
+
createdAt = tostring(now - math.random(3600)),
|
|
59
|
+
lastAccessed = tostring(now),
|
|
60
|
+
ipAddress = '192.168.1.' .. (i % 255),
|
|
61
|
+
device = 'device-' .. rand_str(8),
|
|
62
|
+
authMethod = 'password',
|
|
63
|
+
status = 'active',
|
|
64
|
+
metadata = rand_str(200 + (i % 100))
|
|
65
|
+
}
|
|
66
|
+
redis.call('JSON.SET', session_id, '$', cjson.encode(session_data))
|
|
67
|
+
end
|
|
68
|
+
return 'OK'
|
|
69
|
+
|
|
70
|
+
tested-groups:
|
|
71
|
+
- json
|
|
72
|
+
|
|
73
|
+
tested-commands:
|
|
74
|
+
- json.get
|
|
75
|
+
- json.set
|
|
76
|
+
|
|
77
|
+
redis-topologies:
|
|
78
|
+
- oss-standalone
|
|
79
|
+
|
|
80
|
+
build-variants:
|
|
81
|
+
- gcc:15.2.0-amd64-debian-bookworm-default
|
|
82
|
+
- gcc:15.2.0-arm64-debian-bookworm-default
|
|
83
|
+
- dockerhub
|
|
84
|
+
|
|
85
|
+
clientconfig:
|
|
86
|
+
run_image: redislabs/memtier_benchmark:edge
|
|
87
|
+
tool: memtier_benchmark
|
|
88
|
+
arguments: >
|
|
89
|
+
--key-prefix ""
|
|
90
|
+
--key-minimum 1
|
|
91
|
+
--key-maximum 100000
|
|
92
|
+
--data-size-range=400-600
|
|
93
|
+
--pipeline=1
|
|
94
|
+
--print-percentiles=50,90,95,99
|
|
95
|
+
--run-count=1
|
|
96
|
+
--test-time=120
|
|
97
|
+
--command="JSON.GET session:__key__"
|
|
98
|
+
--command-key-pattern=Z
|
|
99
|
+
--command-ratio=90
|
|
100
|
+
--command="JSON.SET session:__key__ $ \"{\\\"userId\\\":\\\"user-__key__\\\",\\\"organizationId\\\":\\\"org-__key__\\\",\\\"role\\\":\\\"admin\\\",\\\"email\\\":\\\"user__key__@example.com\\\",\\\"name\\\":\\\"User __key__\\\",\\\"permissions\\\":[\\\"read\\\",\\\"write\\\"],\\\"lastActivity\\\":__key__,\\\"ipAddress\\\":\\\"192.168.1.__key__\\\",\\\"userAgent\\\":\\\"Mozilla/5.0\\\",\\\"createdAt\\\":__key__}\""
|
|
101
|
+
--command-key-pattern=Z
|
|
102
|
+
--command-ratio=10
|
|
103
|
+
--hide-histogram
|
|
104
|
+
resources:
|
|
105
|
+
requests:
|
|
106
|
+
cpus: '4'
|
|
107
|
+
memory: 2g
|
|
108
|
+
|
|
109
|
+
priority: 150
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
version: 0.4
|
|
2
|
+
name: memtier_benchmark-session-caching-string-100k-sessions
|
|
3
|
+
description: |
|
|
4
|
+
Runs memtier_benchmark to simulate a session caching workload for a SaaS application.
|
|
5
|
+
This benchmark focuses exclusively on **string-based session storage**, where each session
|
|
6
|
+
is stored in Redis as a serialized JSON string (`session:<id>`) containing fields like
|
|
7
|
+
user ID, timestamps, device info, and metadata (total ~400–600B).
|
|
8
|
+
|
|
9
|
+
The benchmark models a typical read-heavy cache usage pattern, with an approximate
|
|
10
|
+
**read:write ratio of 80:20**, reflecting session retrievals and infrequent updates.
|
|
11
|
+
|
|
12
|
+
Command groups:
|
|
13
|
+
- Session cache reads (`GET`): ~80%
|
|
14
|
+
- Session cache writes (`SET`): ~20%
|
|
15
|
+
|
|
16
|
+
To better approximate real-world access patterns, the benchmark uses a **Zipfian key distribution**
|
|
17
|
+
(`--command-key-pattern=Z`). This simulates **skewed access** where a small subset of sessions (hot keys)
|
|
18
|
+
receives a majority of reads — a common pattern in production workloads.
|
|
19
|
+
|
|
20
|
+
While Zipfian is technically a power-law distribution, it effectively mimics **Poisson-like behavior**
|
|
21
|
+
in large-scale systems, where access frequency is uneven but statistically predictable.
|
|
22
|
+
This access skew mirrors real-life scenarios such as:
|
|
23
|
+
- Frequently accessed or "sticky" user sessions
|
|
24
|
+
- Popular user accounts or active devices
|
|
25
|
+
- Hot caches for trending or recently used resources
|
|
26
|
+
|
|
27
|
+
Using Zipfian distribution allows this benchmark to capture **contention**, **cache pressure**, and
|
|
28
|
+
**read amplification** effects that occur in real SaaS applications under load.
|
|
29
|
+
|
|
30
|
+
dbconfig:
|
|
31
|
+
configuration-parameters:
|
|
32
|
+
save: '""'
|
|
33
|
+
resources:
|
|
34
|
+
requests:
|
|
35
|
+
memory: 1g
|
|
36
|
+
init_lua: |
|
|
37
|
+
local seed = 12345
|
|
38
|
+
math.randomseed(seed)
|
|
39
|
+
local now = tonumber(redis.call('TIME')[1])
|
|
40
|
+
local function rand_str(len)
|
|
41
|
+
local chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
|
42
|
+
local res = ''
|
|
43
|
+
for i = 1, len do
|
|
44
|
+
local idx = math.random(#chars)
|
|
45
|
+
res = res .. chars:sub(idx, idx)
|
|
46
|
+
end
|
|
47
|
+
return res
|
|
48
|
+
end
|
|
49
|
+
for i = 1, 100000 do
|
|
50
|
+
local session_id = 'session:' .. i
|
|
51
|
+
local session_data = string.format(
|
|
52
|
+
'{"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"}',
|
|
53
|
+
i, i, now - math.random(3600), now, (i % 255), rand_str(8), rand_str(200 + (i % 100))
|
|
54
|
+
)
|
|
55
|
+
redis.call('SET', session_id, session_data)
|
|
56
|
+
end
|
|
57
|
+
return 'OK'
|
|
58
|
+
|
|
59
|
+
tested-groups:
|
|
60
|
+
- string
|
|
61
|
+
|
|
62
|
+
tested-commands:
|
|
63
|
+
- get
|
|
64
|
+
- set
|
|
65
|
+
|
|
66
|
+
redis-topologies:
|
|
67
|
+
- oss-standalone
|
|
68
|
+
|
|
69
|
+
build-variants:
|
|
70
|
+
- gcc:15.2.0-amd64-debian-bookworm-default
|
|
71
|
+
- gcc:15.2.0-arm64-debian-bookworm-default
|
|
72
|
+
- dockerhub
|
|
73
|
+
|
|
74
|
+
clientconfig:
|
|
75
|
+
run_image: redislabs/memtier_benchmark:edge
|
|
76
|
+
tool: memtier_benchmark
|
|
77
|
+
arguments: >
|
|
78
|
+
--key-prefix ""
|
|
79
|
+
--key-minimum 1
|
|
80
|
+
--key-maximum 100000
|
|
81
|
+
--data-size-range=400-600
|
|
82
|
+
--pipeline=1
|
|
83
|
+
--print-percentiles=50,90,95,99
|
|
84
|
+
--run-count=1
|
|
85
|
+
--test-time=120
|
|
86
|
+
--command="GET session:__key__"
|
|
87
|
+
--command-key-pattern=Z
|
|
88
|
+
--command-ratio=90
|
|
89
|
+
--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\"}"'
|
|
90
|
+
--command-key-pattern=Z
|
|
91
|
+
--command-ratio=10
|
|
92
|
+
--hide-histogram
|
|
93
|
+
resources:
|
|
94
|
+
requests:
|
|
95
|
+
cpus: '4'
|
|
96
|
+
memory: 2g
|
|
97
|
+
|
|
98
|
+
priority: 150
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
version: 0.4
|
|
2
|
+
name: memtier_benchmark-playbook-session-storage-100k-sessions
|
|
3
|
+
description: |
|
|
4
|
+
Runs memtier_benchmark to simulate a session-based SaaS application.
|
|
5
|
+
The workload mimics user session CRUD, session tracking, organization-level analytics,
|
|
6
|
+
and rate limiting. It includes realistic key sizes and command mixes representative
|
|
7
|
+
of production traffic (e.g., 400–600B session hashes, ZSETs for analytics, and SETs for tracking).
|
|
8
|
+
|
|
9
|
+
Rate limiting is modeled using an atomic Lua script, inspired by the Upstash Redis example:
|
|
10
|
+
https://github.com/upstash/examples/tree/main/examples/ratelimit-with-redis
|
|
11
|
+
|
|
12
|
+
Each user has a dedicated key in the form of `ratelimit:user-<id>:/api/resource`, which is
|
|
13
|
+
used to track usage under a fixed window. The logic is evaluated atomically with the following script:
|
|
14
|
+
|
|
15
|
+
local key = KEYS[1]
|
|
16
|
+
local limit = 100
|
|
17
|
+
local window = 60
|
|
18
|
+
local current = redis.call("INCR", key)
|
|
19
|
+
if current == 1 then
|
|
20
|
+
redis.call("EXPIRE", key, window)
|
|
21
|
+
end
|
|
22
|
+
if current > limit then
|
|
23
|
+
return 0
|
|
24
|
+
else
|
|
25
|
+
return 1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
This ensures that rate enforcement and usage tracking are done without race conditions, and
|
|
29
|
+
mirrors a real-world API quota model.
|
|
30
|
+
|
|
31
|
+
The workload emphasizes read-heavy patterns to reflect common SaaS access behavior. The overall
|
|
32
|
+
**read:write ratio is approximately 85:15**, with read operations covering session access, user-session
|
|
33
|
+
lookups, org analytics, and rate limit enforcement, while writes handle session updates, activity tracking,
|
|
34
|
+
and quota increments.
|
|
35
|
+
|
|
36
|
+
Command groups by use-case (approximate ratio of total operations):
|
|
37
|
+
- Session CRUD (HGETALL, HSET): ~55%
|
|
38
|
+
- User session tracking (SMEMBERS, SADD): ~21%
|
|
39
|
+
- Organization analytics (ZRANGE, ZADD): ~12%
|
|
40
|
+
- Rate limiting (EVAL-based quota check): ~12%
|
|
41
|
+
|
|
42
|
+
exporter:
|
|
43
|
+
redistimeseries:
|
|
44
|
+
break_by:
|
|
45
|
+
- version
|
|
46
|
+
- commit
|
|
47
|
+
timemetric: $."ALL STATS".Runtime."Start time"
|
|
48
|
+
metrics:
|
|
49
|
+
- $."BEST RUN RESULTS".Hgetalls."Ops/sec"
|
|
50
|
+
- $."BEST RUN RESULTS".Hsets."Ops/sec"
|
|
51
|
+
- $."BEST RUN RESULTS".Smemberss."Ops/sec"
|
|
52
|
+
- $."BEST RUN RESULTS".Sadds."Ops/sec"
|
|
53
|
+
- $."BEST RUN RESULTS".Zranges."Ops/sec"
|
|
54
|
+
- $."BEST RUN RESULTS".Zadds."Ops/sec"
|
|
55
|
+
- $."BEST RUN RESULTS".Evals."Ops/sec"
|
|
56
|
+
- $."BEST RUN RESULTS".Totals."Ops/sec"
|
|
57
|
+
- $."BEST RUN RESULTS".Totals."Latency"
|
|
58
|
+
- $."BEST RUN RESULTS".Totals."Misses/sec"
|
|
59
|
+
- $."BEST RUN RESULTS".Totals."Percentile Latencies"."p50.00"
|
|
60
|
+
- $."BEST RUN RESULTS".Totals."Percentile Latencies"."p99.00"
|
|
61
|
+
- $."ALL STATS".Hgetalls."Ops/sec"
|
|
62
|
+
- $."ALL STATS".Hsets."Ops/sec"
|
|
63
|
+
- $."ALL STATS".Smemberss."Ops/sec"
|
|
64
|
+
- $."ALL STATS".Sadds."Ops/sec"
|
|
65
|
+
- $."ALL STATS".Zranges."Ops/sec"
|
|
66
|
+
- $."ALL STATS".Zadds."Ops/sec"
|
|
67
|
+
- $."ALL STATS".Evals."Ops/sec"
|
|
68
|
+
- $."ALL STATS".Totals."Ops/sec"
|
|
69
|
+
- $."ALL STATS".Totals."Latency"
|
|
70
|
+
- $."ALL STATS".Totals."Misses/sec"
|
|
71
|
+
- $."ALL STATS".Hgetalls."Percentile Latencies"."p50.00"
|
|
72
|
+
- $."ALL STATS".Hsets."Percentile Latencies"."p50.00"
|
|
73
|
+
- $."ALL STATS".Smemberss."Percentile Latencies"."p50.00"
|
|
74
|
+
- $."ALL STATS".Sadds."Percentile Latencies"."p50.00"
|
|
75
|
+
- $."ALL STATS".Zranges."Percentile Latencies"."p50.00"
|
|
76
|
+
- $."ALL STATS".Zadds."Percentile Latencies"."p50.00"
|
|
77
|
+
- $."ALL STATS".Evals."Percentile Latencies"."p50.00"
|
|
78
|
+
- $."ALL STATS".Totals."Percentile Latencies"."p50.00"
|
|
79
|
+
- $."ALL STATS".Totals."Percentile Latencies"."p99.00"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
dbconfig:
|
|
83
|
+
configuration-parameters:
|
|
84
|
+
save: '""'
|
|
85
|
+
resources:
|
|
86
|
+
requests:
|
|
87
|
+
memory: 1g
|
|
88
|
+
init_lua: |
|
|
89
|
+
-- Use a fixed seed for reproducibility
|
|
90
|
+
local seed = 12345
|
|
91
|
+
math.randomseed(seed)
|
|
92
|
+
|
|
93
|
+
local now = tonumber(redis.call('TIME')[1])
|
|
94
|
+
|
|
95
|
+
local function rand_str(len)
|
|
96
|
+
local chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
|
97
|
+
local res = ''
|
|
98
|
+
for i = 1, len do
|
|
99
|
+
local idx = math.random(#chars)
|
|
100
|
+
res = res .. chars:sub(idx, idx)
|
|
101
|
+
end
|
|
102
|
+
return res
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
for i = 1, 100000 do
|
|
106
|
+
local session_id = 'session:' .. i
|
|
107
|
+
local user_id = 'user-' .. i
|
|
108
|
+
local org_id = 'org-' .. i
|
|
109
|
+
|
|
110
|
+
redis.call('HSET', session_id,
|
|
111
|
+
'userId', user_id,
|
|
112
|
+
'organizationId', org_id,
|
|
113
|
+
'role', 'member',
|
|
114
|
+
'createdAt', tostring(now - math.random(3600)),
|
|
115
|
+
'lastAccessed', tostring(now),
|
|
116
|
+
'ipAddress', '192.168.1.' .. (i % 255),
|
|
117
|
+
'device', 'device-' .. rand_str(8),
|
|
118
|
+
'authMethod', 'password',
|
|
119
|
+
'status', 'active',
|
|
120
|
+
'metadata', rand_str(200 + (i % 100))
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
redis.call('SADD', 'user:' .. i .. ':sessions', session_id)
|
|
124
|
+
|
|
125
|
+
local org_key = 'org:' .. i .. ':sessions'
|
|
126
|
+
for j = 1, 10 do
|
|
127
|
+
local uid = 'user-' .. ((i + j) % 1000 + 1)
|
|
128
|
+
local sid = 'session:' .. ((i + j) % 1000 + 1)
|
|
129
|
+
local zmember = uid .. ':' .. sid
|
|
130
|
+
local zscore = now - math.random(86400)
|
|
131
|
+
redis.call('ZADD', org_key, zscore, zmember)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
local endpoint = '/api/resource'
|
|
135
|
+
local rate_key = 'ratelimit:' .. user_id .. ':' .. endpoint
|
|
136
|
+
redis.call('INCR', rate_key)
|
|
137
|
+
redis.call('EXPIRE', rate_key, 60)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
return 'OK'
|
|
141
|
+
tested-groups:
|
|
142
|
+
- hash
|
|
143
|
+
- sorted-set
|
|
144
|
+
- set
|
|
145
|
+
- scripting
|
|
146
|
+
|
|
147
|
+
tested-commands:
|
|
148
|
+
- hgetall
|
|
149
|
+
- hset
|
|
150
|
+
- smembers
|
|
151
|
+
- sadd
|
|
152
|
+
- zrange
|
|
153
|
+
- zadd
|
|
154
|
+
- incr
|
|
155
|
+
- expire
|
|
156
|
+
- get
|
|
157
|
+
- eval
|
|
158
|
+
|
|
159
|
+
redis-topologies:
|
|
160
|
+
- oss-standalone
|
|
161
|
+
build-variants:
|
|
162
|
+
- gcc:15.2.0-amd64-debian-bookworm-default
|
|
163
|
+
- gcc:15.2.0-arm64-debian-bookworm-default
|
|
164
|
+
- dockerhub
|
|
165
|
+
|
|
166
|
+
clientconfig:
|
|
167
|
+
run_image: redislabs/memtier_benchmark:edge
|
|
168
|
+
tool: memtier_benchmark
|
|
169
|
+
arguments: >
|
|
170
|
+
--key-prefix ""
|
|
171
|
+
--key-minimum 1
|
|
172
|
+
--key-maximum 100000
|
|
173
|
+
--data-size-range=400-600
|
|
174
|
+
--pipeline=1
|
|
175
|
+
--print-percentiles=50,90,95,99
|
|
176
|
+
--run-count=1
|
|
177
|
+
--test-time=120
|
|
178
|
+
--command="HGETALL session:__key__"
|
|
179
|
+
--command-key-pattern=R
|
|
180
|
+
--command-ratio=50
|
|
181
|
+
--command="HSET session:__key__ userId user-__key__ organizationId org-__key__ role admin email user__key__@example.com name "User __key__" permissions "["read","write"]" lastActivity __timestamp__ ipAddress 192.168.1.__key__ userAgent "Mozilla/5.0" createdAt __timestamp__"
|
|
182
|
+
--command-key-pattern=R
|
|
183
|
+
--command-ratio=5
|
|
184
|
+
--command="SMEMBERS user:__key__:sessions"
|
|
185
|
+
--command-key-pattern=R
|
|
186
|
+
--command-ratio=18
|
|
187
|
+
--command="SADD user:__key__:sessions session-__key__"
|
|
188
|
+
--command-key-pattern=R
|
|
189
|
+
--command-ratio=3
|
|
190
|
+
--command="ZRANGE org:__key__:sessions 0 -1 WITHSCORES"
|
|
191
|
+
--command-key-pattern=R
|
|
192
|
+
--command-ratio=10
|
|
193
|
+
--command="ZADD org:__key__:sessions 1 user-__key__:session-__key__"
|
|
194
|
+
--command-key-pattern=R
|
|
195
|
+
--command-ratio=2
|
|
196
|
+
--command='EVAL "local key=KEYS[1];local limit=10;local window=60;local current=redis.call(\"INCR\",key);if current==1 then redis.call(\"EXPIRE\",key,window) end;if current>limit then return 0 else return 1 end" 1 ratelimit:user-__key__:/api/resource'
|
|
197
|
+
--command-key-pattern=R
|
|
198
|
+
--command-ratio=12
|
|
199
|
+
--hide-histogram
|
|
200
|
+
resources:
|
|
201
|
+
requests:
|
|
202
|
+
cpus: '4'
|
|
203
|
+
memory: 2g
|
|
204
|
+
|
|
205
|
+
priority: 150
|