cachekit 0.20.0__tar.gz → 0.21.0__tar.gz
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.
- {cachekit-0.20.0 → cachekit-0.21.0}/Cargo.lock +106 -52
- {cachekit-0.20.0 → cachekit-0.21.0}/Cargo.toml +2 -21
- {cachekit-0.20.0 → cachekit-0.21.0}/PKG-INFO +19 -10
- {cachekit-0.20.0 → cachekit-0.21.0}/README.md +16 -7
- {cachekit-0.20.0 → cachekit-0.21.0}/pyproject.toml +16 -5
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/Cargo.toml +4 -4
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/Makefile +4 -7
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/README.md +16 -7
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/src/lib.rs +4 -5
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/src/python_bindings.rs +0 -44
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/__init__.py +5 -6
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/base.py +3 -1
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/base_config.py +2 -1
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/cachekitio/backend.py +62 -84
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/cachekitio/client.py +85 -27
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/cachekitio/config.py +0 -5
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/cachekitio/error_handler.py +11 -11
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/errors.py +19 -18
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/file/__init__.py +1 -1
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/file/backend.py +35 -12
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/file/config.py +2 -2
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/memcached/__init__.py +2 -1
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/memcached/backend.py +137 -27
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/memcached/config.py +6 -3
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/memcached/error_handler.py +26 -2
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/provider.py +31 -22
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/redis/backend.py +25 -3
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/redis/client.py +43 -11
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/redis/config.py +10 -6
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/redis/error_handler.py +9 -9
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/redis/provider.py +13 -6
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/cache_handler.py +196 -101
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/config/decorator.py +122 -85
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/config/nested.py +22 -13
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/config/settings.py +0 -17
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/config/singleton.py +8 -6
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/config/validation.py +100 -32
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/intent.py +11 -4
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/wrapper.py +526 -334
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/interop.py +51 -5
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/key_generator.py +22 -1
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/l1_cache.py +165 -89
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/object_cache.py +46 -6
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/reliability/__init__.py +1 -11
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/reliability/async_metrics.py +282 -118
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/reliability/circuit_breaker.py +113 -23
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/__init__.py +2 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/arrow_serializer.py +32 -22
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/auto_serializer.py +59 -12
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/encryption_wrapper.py +82 -30
- cachekit-0.20.0/src/cachekit/reliability/profiles.py +0 -236
- {cachekit-0.20.0 → cachekit-0.21.0}/LICENSE +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/TEST_EXPANSION_SUMMARY.md +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/src/msgpack_bounds.rs +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/rust/tsan_suppressions.txt +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/cachekitio/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/cachekitio/session.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/backends/redis/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/config/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/local_wrapper.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/main.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/orchestrator.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/session.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/stats_context.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/tenant_context.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/decorators/utils/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/di.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/hash_utils.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/health.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/hiredis_compat.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/imports.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/logging.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/monitoring/__init__.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/monitoring/pool_monitor.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/monitoring/protocols.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/py.typed +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/reliability/error_classification.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/reliability/load_control.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/reliability/metrics_collection.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/base.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/interop_serializer.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/orjson_serializer.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/standard_serializer.py +0 -0
- {cachekit-0.20.0 → cachekit-0.21.0}/src/cachekit/serializers/wrapper.py +0 -0
|
@@ -85,6 +85,15 @@ dependencies = [
|
|
|
85
85
|
"equator",
|
|
86
86
|
]
|
|
87
87
|
|
|
88
|
+
[[package]]
|
|
89
|
+
name = "alloca"
|
|
90
|
+
version = "0.4.0"
|
|
91
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
92
|
+
checksum = "e5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4"
|
|
93
|
+
dependencies = [
|
|
94
|
+
"cc",
|
|
95
|
+
]
|
|
96
|
+
|
|
88
97
|
[[package]]
|
|
89
98
|
name = "anes"
|
|
90
99
|
version = "0.1.6"
|
|
@@ -127,7 +136,7 @@ version = "1.1.5"
|
|
|
127
136
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
128
137
|
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
|
129
138
|
dependencies = [
|
|
130
|
-
"windows-sys 0.
|
|
139
|
+
"windows-sys 0.60.2",
|
|
131
140
|
]
|
|
132
141
|
|
|
133
142
|
[[package]]
|
|
@@ -138,7 +147,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
|
|
138
147
|
dependencies = [
|
|
139
148
|
"anstyle",
|
|
140
149
|
"once_cell_polyfill",
|
|
141
|
-
"windows-sys 0.
|
|
150
|
+
"windows-sys 0.60.2",
|
|
142
151
|
]
|
|
143
152
|
|
|
144
153
|
[[package]]
|
|
@@ -271,10 +280,10 @@ dependencies = [
|
|
|
271
280
|
|
|
272
281
|
[[package]]
|
|
273
282
|
name = "cachekit-rs"
|
|
274
|
-
version = "0.
|
|
283
|
+
version = "0.21.0"
|
|
275
284
|
dependencies = [
|
|
276
285
|
"cachekit-core",
|
|
277
|
-
"criterion",
|
|
286
|
+
"criterion 0.8.2",
|
|
278
287
|
"ctor",
|
|
279
288
|
"divan",
|
|
280
289
|
"fastrand",
|
|
@@ -431,9 +440,9 @@ dependencies = [
|
|
|
431
440
|
"cast",
|
|
432
441
|
"ciborium",
|
|
433
442
|
"clap",
|
|
434
|
-
"criterion-plot",
|
|
443
|
+
"criterion-plot 0.5.0",
|
|
435
444
|
"is-terminal",
|
|
436
|
-
"itertools",
|
|
445
|
+
"itertools 0.10.5",
|
|
437
446
|
"num-traits",
|
|
438
447
|
"once_cell",
|
|
439
448
|
"oorandom",
|
|
@@ -447,6 +456,31 @@ dependencies = [
|
|
|
447
456
|
"walkdir",
|
|
448
457
|
]
|
|
449
458
|
|
|
459
|
+
[[package]]
|
|
460
|
+
name = "criterion"
|
|
461
|
+
version = "0.8.2"
|
|
462
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
463
|
+
checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3"
|
|
464
|
+
dependencies = [
|
|
465
|
+
"alloca",
|
|
466
|
+
"anes",
|
|
467
|
+
"cast",
|
|
468
|
+
"ciborium",
|
|
469
|
+
"clap",
|
|
470
|
+
"criterion-plot 0.8.2",
|
|
471
|
+
"itertools 0.13.0",
|
|
472
|
+
"num-traits",
|
|
473
|
+
"oorandom",
|
|
474
|
+
"page_size",
|
|
475
|
+
"plotters",
|
|
476
|
+
"rayon",
|
|
477
|
+
"regex",
|
|
478
|
+
"serde",
|
|
479
|
+
"serde_json",
|
|
480
|
+
"tinytemplate",
|
|
481
|
+
"walkdir",
|
|
482
|
+
]
|
|
483
|
+
|
|
450
484
|
[[package]]
|
|
451
485
|
name = "criterion-plot"
|
|
452
486
|
version = "0.5.0"
|
|
@@ -454,7 +488,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
454
488
|
checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
|
|
455
489
|
dependencies = [
|
|
456
490
|
"cast",
|
|
457
|
-
"itertools",
|
|
491
|
+
"itertools 0.10.5",
|
|
492
|
+
]
|
|
493
|
+
|
|
494
|
+
[[package]]
|
|
495
|
+
name = "criterion-plot"
|
|
496
|
+
version = "0.8.2"
|
|
497
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
498
|
+
checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea"
|
|
499
|
+
dependencies = [
|
|
500
|
+
"cast",
|
|
501
|
+
"itertools 0.13.0",
|
|
458
502
|
]
|
|
459
503
|
|
|
460
504
|
[[package]]
|
|
@@ -501,20 +545,14 @@ dependencies = [
|
|
|
501
545
|
|
|
502
546
|
[[package]]
|
|
503
547
|
name = "ctor"
|
|
504
|
-
version = "0.
|
|
548
|
+
version = "0.13.1"
|
|
505
549
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
506
|
-
checksum = "
|
|
550
|
+
checksum = "3429e8f8e3ce0ffe475c411850f70468c70d7a87d2ac3d15dd44703fb885aede"
|
|
507
551
|
dependencies = [
|
|
508
|
-
"
|
|
509
|
-
"
|
|
552
|
+
"link-section",
|
|
553
|
+
"linktime-proc-macro",
|
|
510
554
|
]
|
|
511
555
|
|
|
512
|
-
[[package]]
|
|
513
|
-
name = "ctor-proc-macro"
|
|
514
|
-
version = "0.0.6"
|
|
515
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
516
|
-
checksum = "e2931af7e13dc045d8e9d26afccc6fa115d64e115c9c84b1166288b46f6782c2"
|
|
517
|
-
|
|
518
556
|
[[package]]
|
|
519
557
|
name = "ctr"
|
|
520
558
|
version = "0.9.2"
|
|
@@ -590,21 +628,6 @@ dependencies = [
|
|
|
590
628
|
"syn",
|
|
591
629
|
]
|
|
592
630
|
|
|
593
|
-
[[package]]
|
|
594
|
-
name = "dtor"
|
|
595
|
-
version = "0.0.6"
|
|
596
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
597
|
-
checksum = "97cbdf2ad6846025e8e25df05171abfb30e3ababa12ee0a0e44b9bbe570633a8"
|
|
598
|
-
dependencies = [
|
|
599
|
-
"dtor-proc-macro",
|
|
600
|
-
]
|
|
601
|
-
|
|
602
|
-
[[package]]
|
|
603
|
-
name = "dtor-proc-macro"
|
|
604
|
-
version = "0.0.5"
|
|
605
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
606
|
-
checksum = "7454e41ff9012c00d53cf7f475c5e3afa3b91b7c90568495495e8d9bf47a1055"
|
|
607
|
-
|
|
608
631
|
[[package]]
|
|
609
632
|
name = "either"
|
|
610
633
|
version = "1.15.0"
|
|
@@ -644,14 +667,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
644
667
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
645
668
|
dependencies = [
|
|
646
669
|
"libc",
|
|
647
|
-
"windows-sys 0.
|
|
670
|
+
"windows-sys 0.52.0",
|
|
648
671
|
]
|
|
649
672
|
|
|
650
673
|
[[package]]
|
|
651
674
|
name = "fastrand"
|
|
652
|
-
version = "2.
|
|
675
|
+
version = "2.5.0"
|
|
653
676
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
654
|
-
checksum = "
|
|
677
|
+
checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
|
|
655
678
|
|
|
656
679
|
[[package]]
|
|
657
680
|
name = "find-msvc-tools"
|
|
@@ -786,9 +809,9 @@ dependencies = [
|
|
|
786
809
|
|
|
787
810
|
[[package]]
|
|
788
811
|
name = "iai-callgrind"
|
|
789
|
-
version = "0.
|
|
812
|
+
version = "0.16.1"
|
|
790
813
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
791
|
-
checksum = "
|
|
814
|
+
checksum = "0b1e4910d3a9137442723dfb772c32dc10674c4181ca078d2fd227cd5dce9db0"
|
|
792
815
|
dependencies = [
|
|
793
816
|
"bincode",
|
|
794
817
|
"derive_more",
|
|
@@ -798,9 +821,9 @@ dependencies = [
|
|
|
798
821
|
|
|
799
822
|
[[package]]
|
|
800
823
|
name = "iai-callgrind-macros"
|
|
801
|
-
version = "0.
|
|
824
|
+
version = "0.6.1"
|
|
802
825
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
803
|
-
checksum = "
|
|
826
|
+
checksum = "4d03775318d3f9f01b39ac6612b01464006dc397a654a89dd57df2fd34fb68c3"
|
|
804
827
|
dependencies = [
|
|
805
828
|
"derive_more",
|
|
806
829
|
"proc-macro-error2",
|
|
@@ -813,9 +836,9 @@ dependencies = [
|
|
|
813
836
|
|
|
814
837
|
[[package]]
|
|
815
838
|
name = "iai-callgrind-runner"
|
|
816
|
-
version = "0.
|
|
839
|
+
version = "0.16.1"
|
|
817
840
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
818
|
-
checksum = "
|
|
841
|
+
checksum = "b74c9743c00c3bca4aaffc69c87cae56837796cd362438daf354a3f785788c68"
|
|
819
842
|
dependencies = [
|
|
820
843
|
"serde",
|
|
821
844
|
]
|
|
@@ -865,7 +888,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
|
|
|
865
888
|
dependencies = [
|
|
866
889
|
"hermit-abi",
|
|
867
890
|
"libc",
|
|
868
|
-
"windows-sys 0.
|
|
891
|
+
"windows-sys 0.52.0",
|
|
869
892
|
]
|
|
870
893
|
|
|
871
894
|
[[package]]
|
|
@@ -883,6 +906,15 @@ dependencies = [
|
|
|
883
906
|
"either",
|
|
884
907
|
]
|
|
885
908
|
|
|
909
|
+
[[package]]
|
|
910
|
+
name = "itertools"
|
|
911
|
+
version = "0.13.0"
|
|
912
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
913
|
+
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
|
914
|
+
dependencies = [
|
|
915
|
+
"either",
|
|
916
|
+
]
|
|
917
|
+
|
|
886
918
|
[[package]]
|
|
887
919
|
name = "itoa"
|
|
888
920
|
version = "1.0.17"
|
|
@@ -911,6 +943,18 @@ version = "0.2.183"
|
|
|
911
943
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
912
944
|
checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
|
|
913
945
|
|
|
946
|
+
[[package]]
|
|
947
|
+
name = "link-section"
|
|
948
|
+
version = "0.13.1"
|
|
949
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
950
|
+
checksum = "ea2c24837c4fd5ab6a31d64133eae954f5199247523cf29586117e85245c0dd3"
|
|
951
|
+
|
|
952
|
+
[[package]]
|
|
953
|
+
name = "linktime-proc-macro"
|
|
954
|
+
version = "0.1.0"
|
|
955
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
956
|
+
checksum = "a44cd706ff0d503ee32b2071166510ca27e281228de10cd3aa8d35ff94560f81"
|
|
957
|
+
|
|
914
958
|
[[package]]
|
|
915
959
|
name = "linux-raw-sys"
|
|
916
960
|
version = "0.4.15"
|
|
@@ -1034,6 +1078,16 @@ version = "0.3.1"
|
|
|
1034
1078
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1035
1079
|
checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
|
|
1036
1080
|
|
|
1081
|
+
[[package]]
|
|
1082
|
+
name = "page_size"
|
|
1083
|
+
version = "0.6.0"
|
|
1084
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1085
|
+
checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da"
|
|
1086
|
+
dependencies = [
|
|
1087
|
+
"libc",
|
|
1088
|
+
"winapi",
|
|
1089
|
+
]
|
|
1090
|
+
|
|
1037
1091
|
[[package]]
|
|
1038
1092
|
name = "plotters"
|
|
1039
1093
|
version = "0.3.7"
|
|
@@ -1089,7 +1143,7 @@ dependencies = [
|
|
|
1089
1143
|
"aligned-vec",
|
|
1090
1144
|
"backtrace",
|
|
1091
1145
|
"cfg-if",
|
|
1092
|
-
"criterion",
|
|
1146
|
+
"criterion 0.5.1",
|
|
1093
1147
|
"findshlibs",
|
|
1094
1148
|
"inferno",
|
|
1095
1149
|
"libc",
|
|
@@ -1147,9 +1201,9 @@ dependencies = [
|
|
|
1147
1201
|
|
|
1148
1202
|
[[package]]
|
|
1149
1203
|
name = "proptest"
|
|
1150
|
-
version = "1.
|
|
1204
|
+
version = "1.11.0"
|
|
1151
1205
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1152
|
-
checksum = "
|
|
1206
|
+
checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744"
|
|
1153
1207
|
dependencies = [
|
|
1154
1208
|
"bit-set",
|
|
1155
1209
|
"bit-vec",
|
|
@@ -1484,7 +1538,7 @@ dependencies = [
|
|
|
1484
1538
|
"errno",
|
|
1485
1539
|
"libc",
|
|
1486
1540
|
"linux-raw-sys 0.12.1",
|
|
1487
|
-
"windows-sys 0.
|
|
1541
|
+
"windows-sys 0.52.0",
|
|
1488
1542
|
]
|
|
1489
1543
|
|
|
1490
1544
|
[[package]]
|
|
@@ -1694,7 +1748,7 @@ dependencies = [
|
|
|
1694
1748
|
"getrandom 0.3.4",
|
|
1695
1749
|
"once_cell",
|
|
1696
1750
|
"rustix 1.1.4",
|
|
1697
|
-
"windows-sys 0.
|
|
1751
|
+
"windows-sys 0.52.0",
|
|
1698
1752
|
]
|
|
1699
1753
|
|
|
1700
1754
|
[[package]]
|
|
@@ -1981,7 +2035,7 @@ version = "0.1.11"
|
|
|
1981
2035
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1982
2036
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
1983
2037
|
dependencies = [
|
|
1984
|
-
"windows-sys 0.
|
|
2038
|
+
"windows-sys 0.52.0",
|
|
1985
2039
|
]
|
|
1986
2040
|
|
|
1987
2041
|
[[package]]
|
|
@@ -2201,18 +2255,18 @@ dependencies = [
|
|
|
2201
2255
|
|
|
2202
2256
|
[[package]]
|
|
2203
2257
|
name = "zeroize"
|
|
2204
|
-
version = "1.
|
|
2258
|
+
version = "1.9.0"
|
|
2205
2259
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2206
|
-
checksum = "
|
|
2260
|
+
checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
|
|
2207
2261
|
dependencies = [
|
|
2208
2262
|
"zeroize_derive",
|
|
2209
2263
|
]
|
|
2210
2264
|
|
|
2211
2265
|
[[package]]
|
|
2212
2266
|
name = "zeroize_derive"
|
|
2213
|
-
version = "1.
|
|
2267
|
+
version = "1.5.0"
|
|
2214
2268
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2215
|
-
checksum = "
|
|
2269
|
+
checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328"
|
|
2216
2270
|
dependencies = [
|
|
2217
2271
|
"proc-macro2",
|
|
2218
2272
|
"quote",
|
|
@@ -8,11 +8,11 @@ pyo3 = { version = "0.29", features = ["extension-module"] }
|
|
|
8
8
|
serde = { version = "1.0", features = ["derive"] }
|
|
9
9
|
serde_json = "1.0"
|
|
10
10
|
bincode = "1.3"
|
|
11
|
-
numpy = "0.
|
|
11
|
+
numpy = "0.29"
|
|
12
12
|
|
|
13
13
|
# Performance dependencies
|
|
14
14
|
rayon = "1.8"
|
|
15
|
-
simd-json = "0.
|
|
15
|
+
simd-json = "0.18"
|
|
16
16
|
lz4 = "1.24"
|
|
17
17
|
memmap2 = "0.9"
|
|
18
18
|
|
|
@@ -41,22 +41,3 @@ opt-level = 1
|
|
|
41
41
|
opt-level = 3
|
|
42
42
|
debug = true
|
|
43
43
|
lto = "fat"
|
|
44
|
-
|
|
45
|
-
# Profile-Guided Optimization - Generate profile data
|
|
46
|
-
[profile.release-pgo-generate]
|
|
47
|
-
inherits = "release"
|
|
48
|
-
# PGO instrumentation adds overhead, disable some optimizations
|
|
49
|
-
lto = false
|
|
50
|
-
# Keep debug info for profiling
|
|
51
|
-
debug = true
|
|
52
|
-
|
|
53
|
-
# Profile-Guided Optimization - Use profile data
|
|
54
|
-
[profile.release-pgo-use]
|
|
55
|
-
inherits = "release"
|
|
56
|
-
# Full LTO with profile data for maximum optimization
|
|
57
|
-
lto = "fat"
|
|
58
|
-
# Strip symbols for smaller binary
|
|
59
|
-
strip = true
|
|
60
|
-
# Maximum optimization with profile data
|
|
61
|
-
opt-level = 3
|
|
62
|
-
codegen-units = 1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cachekit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -20,9 +20,9 @@ Classifier: Topic :: System :: Monitoring
|
|
|
20
20
|
Classifier: Topic :: Security :: Cryptography
|
|
21
21
|
Classifier: Framework :: AsyncIO
|
|
22
22
|
Classifier: Typing :: Typed
|
|
23
|
-
Requires-Dist: redis[hiredis]>=4.
|
|
23
|
+
Requires-Dist: redis[hiredis]>=4.6.0
|
|
24
24
|
Requires-Dist: pydantic>=2.0.0
|
|
25
|
-
Requires-Dist: pydantic-settings>=2.
|
|
25
|
+
Requires-Dist: pydantic-settings>=2.13.0
|
|
26
26
|
Requires-Dist: prometheus-client>=0.22.1
|
|
27
27
|
Requires-Dist: psutil>=7.0.0
|
|
28
28
|
Requires-Dist: blake3>=1.0.5
|
|
@@ -214,6 +214,10 @@ def get_user_profile(user_id: int):
|
|
|
214
214
|
return db.fetch_user(user_id)
|
|
215
215
|
```
|
|
216
216
|
|
|
217
|
+
Setting `CACHEKIT_MASTER_KEY` instead of passing `master_key=` means every preset except
|
|
218
|
+
`@cache.secure` and `@cache.local` must state its intent (`encryption=False` for plaintext), or it raises
|
|
219
|
+
`ConfigurationError` at decoration: the key is a key source, never an on switch.
|
|
220
|
+
|
|
217
221
|
| Feature | `@cache.minimal` | `@cache.dev` | `@cache.test` | `@cache.production` | `@cache.secure` |
|
|
218
222
|
|:--------|:----------------:|:------------:|:-------------:|:-------------------:|:---------------:|
|
|
219
223
|
| Default TTL | 300 s | 300 s | 300 s | 600 s | 600 s |
|
|
@@ -223,11 +227,13 @@ def get_user_profile(user_id: int):
|
|
|
223
227
|
| Encryption | - | - | - | - | ✅ Required |
|
|
224
228
|
| L1 SWR (L1-only mode) | - | ✅ | - | ✅ | - |
|
|
225
229
|
| L1 Invalidation | - | - | - | ✅ | ✅ |
|
|
226
|
-
| Prometheus Metrics | - |
|
|
230
|
+
| Prometheus Metrics | - | -¹ | - | ✅ | ✅ |
|
|
227
231
|
| Tracing | - | ✅ | - | ✅ | ✅ |
|
|
228
232
|
| Structured Logging | - | ✅ | - | ✅ | ✅ |
|
|
229
233
|
| **Use Case** | High throughput | Local debugging | Deterministic tests | Production reliability | Compliance/security |
|
|
230
234
|
|
|
235
|
+
> ¹ `@cache.dev` exports no Prometheus metrics except `circuit_breaker_state`, which is recorded for every function whose circuit breaker is enabled.
|
|
236
|
+
>
|
|
231
237
|
> 🔒 `@cache.secure` forces `integrity_checking=True` — passing `integrity_checking=False` raises `ConfigurationError` at decoration, including as an override next to `config=DecoratorConfig.secure(...)`. `@cache.secure` also rejects `config=`; the RORO form is `@cache(config=DecoratorConfig.secure(...))`.
|
|
232
238
|
>
|
|
233
239
|
> **Default TTL** follows the cross-SDK [intent-preset spec](https://github.com/cachekit-io/protocol/blob/main/spec/intent-presets.md#default-ttl) (`@cache.io` 3600 s) — the same numbers as cachekit-rs and cachekit-ts. `ttl=` overrides it; `ttl=None` is the explicit never-expire opt-in ([details](docs/configuration.md#intent-presets)).
|
|
@@ -242,7 +248,7 @@ def get_user_profile(user_id: int):
|
|
|
242
248
|
See the comparison table above for the exact feature set of each preset.
|
|
243
249
|
|
|
244
250
|
```python
|
|
245
|
-
# Development: verbose logging, integrity checks on, Prometheus off
|
|
251
|
+
# Development: verbose logging, integrity checks on, Prometheus off except circuit_breaker_state
|
|
246
252
|
@cache.dev
|
|
247
253
|
def debug_expensive_call():
|
|
248
254
|
return complex_computation()
|
|
@@ -508,16 +514,22 @@ info = expensive_func.cache_info()
|
|
|
508
514
|
### Environment Variables
|
|
509
515
|
|
|
510
516
|
```bash
|
|
517
|
+
# Backend selection: set exactly ONE of CACHEKIT_REDIS_URL, CACHEKIT_API_KEY,
|
|
518
|
+
# CACHEKIT_MEMCACHED_SERVERS, CACHEKIT_FILE_CACHE_DIR. Two or more is a ConfigurationError at
|
|
519
|
+
# first call, and decorators relying on env auto-detection run uncached (docs/backends/README.md).
|
|
520
|
+
# REDIS_URL is only a fallback and never conflicts.
|
|
521
|
+
|
|
511
522
|
# Redis Connection (priority: CACHEKIT_REDIS_URL > REDIS_URL)
|
|
512
523
|
CACHEKIT_REDIS_URL="redis://localhost:6379" # Primary (preferred)
|
|
513
524
|
REDIS_URL="redis://localhost:6379" # Fallback
|
|
514
525
|
|
|
515
526
|
# CachekitIO SaaS Backend (closed beta — request access at cachekit.io)
|
|
516
|
-
|
|
527
|
+
# For @cache.io() next to Redis, pass api_key= from your secret store instead.
|
|
528
|
+
# CACHEKIT_API_KEY="your-api-key" # pragma: allowlist secret
|
|
517
529
|
CACHEKIT_API_URL="https://api.cachekit.io" # Default SaaS endpoint
|
|
518
530
|
|
|
519
531
|
# Memcached Backend (optional: pip install cachekit[memcached])
|
|
520
|
-
CACHEKIT_MEMCACHED_SERVERS='["mc1:11211", "mc2:11211"]' # Default: 127.0.0.1:11211
|
|
532
|
+
# CACHEKIT_MEMCACHED_SERVERS='["mc1:11211", "mc2:11211"]' # Default: 127.0.0.1:11211
|
|
521
533
|
CACHEKIT_MEMCACHED_CONNECT_TIMEOUT=2.0 # Default: 2.0 seconds
|
|
522
534
|
CACHEKIT_MEMCACHED_TIMEOUT=1.0 # Default: 1.0 seconds
|
|
523
535
|
CACHEKIT_MEMCACHED_KEY_PREFIX="myapp:" # Default: "" (none)
|
|
@@ -527,9 +539,6 @@ CACHEKIT_MAX_VALUE_SIZE=104857600
|
|
|
527
539
|
CACHEKIT_ARROW_COMPRESSION=zstd
|
|
528
540
|
```
|
|
529
541
|
|
|
530
|
-
> [!NOTE]
|
|
531
|
-
> If both `CACHEKIT_REDIS_URL` and `REDIS_URL` are set, `CACHEKIT_REDIS_URL` takes precedence.
|
|
532
|
-
|
|
533
542
|
---
|
|
534
543
|
|
|
535
544
|
## Development
|
|
@@ -158,6 +158,10 @@ def get_user_profile(user_id: int):
|
|
|
158
158
|
return db.fetch_user(user_id)
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
+
Setting `CACHEKIT_MASTER_KEY` instead of passing `master_key=` means every preset except
|
|
162
|
+
`@cache.secure` and `@cache.local` must state its intent (`encryption=False` for plaintext), or it raises
|
|
163
|
+
`ConfigurationError` at decoration: the key is a key source, never an on switch.
|
|
164
|
+
|
|
161
165
|
| Feature | `@cache.minimal` | `@cache.dev` | `@cache.test` | `@cache.production` | `@cache.secure` |
|
|
162
166
|
|:--------|:----------------:|:------------:|:-------------:|:-------------------:|:---------------:|
|
|
163
167
|
| Default TTL | 300 s | 300 s | 300 s | 600 s | 600 s |
|
|
@@ -167,11 +171,13 @@ def get_user_profile(user_id: int):
|
|
|
167
171
|
| Encryption | - | - | - | - | ✅ Required |
|
|
168
172
|
| L1 SWR (L1-only mode) | - | ✅ | - | ✅ | - |
|
|
169
173
|
| L1 Invalidation | - | - | - | ✅ | ✅ |
|
|
170
|
-
| Prometheus Metrics | - |
|
|
174
|
+
| Prometheus Metrics | - | -¹ | - | ✅ | ✅ |
|
|
171
175
|
| Tracing | - | ✅ | - | ✅ | ✅ |
|
|
172
176
|
| Structured Logging | - | ✅ | - | ✅ | ✅ |
|
|
173
177
|
| **Use Case** | High throughput | Local debugging | Deterministic tests | Production reliability | Compliance/security |
|
|
174
178
|
|
|
179
|
+
> ¹ `@cache.dev` exports no Prometheus metrics except `circuit_breaker_state`, which is recorded for every function whose circuit breaker is enabled.
|
|
180
|
+
>
|
|
175
181
|
> 🔒 `@cache.secure` forces `integrity_checking=True` — passing `integrity_checking=False` raises `ConfigurationError` at decoration, including as an override next to `config=DecoratorConfig.secure(...)`. `@cache.secure` also rejects `config=`; the RORO form is `@cache(config=DecoratorConfig.secure(...))`.
|
|
176
182
|
>
|
|
177
183
|
> **Default TTL** follows the cross-SDK [intent-preset spec](https://github.com/cachekit-io/protocol/blob/main/spec/intent-presets.md#default-ttl) (`@cache.io` 3600 s) — the same numbers as cachekit-rs and cachekit-ts. `ttl=` overrides it; `ttl=None` is the explicit never-expire opt-in ([details](docs/configuration.md#intent-presets)).
|
|
@@ -186,7 +192,7 @@ def get_user_profile(user_id: int):
|
|
|
186
192
|
See the comparison table above for the exact feature set of each preset.
|
|
187
193
|
|
|
188
194
|
```python
|
|
189
|
-
# Development: verbose logging, integrity checks on, Prometheus off
|
|
195
|
+
# Development: verbose logging, integrity checks on, Prometheus off except circuit_breaker_state
|
|
190
196
|
@cache.dev
|
|
191
197
|
def debug_expensive_call():
|
|
192
198
|
return complex_computation()
|
|
@@ -452,16 +458,22 @@ info = expensive_func.cache_info()
|
|
|
452
458
|
### Environment Variables
|
|
453
459
|
|
|
454
460
|
```bash
|
|
461
|
+
# Backend selection: set exactly ONE of CACHEKIT_REDIS_URL, CACHEKIT_API_KEY,
|
|
462
|
+
# CACHEKIT_MEMCACHED_SERVERS, CACHEKIT_FILE_CACHE_DIR. Two or more is a ConfigurationError at
|
|
463
|
+
# first call, and decorators relying on env auto-detection run uncached (docs/backends/README.md).
|
|
464
|
+
# REDIS_URL is only a fallback and never conflicts.
|
|
465
|
+
|
|
455
466
|
# Redis Connection (priority: CACHEKIT_REDIS_URL > REDIS_URL)
|
|
456
467
|
CACHEKIT_REDIS_URL="redis://localhost:6379" # Primary (preferred)
|
|
457
468
|
REDIS_URL="redis://localhost:6379" # Fallback
|
|
458
469
|
|
|
459
470
|
# CachekitIO SaaS Backend (closed beta — request access at cachekit.io)
|
|
460
|
-
|
|
471
|
+
# For @cache.io() next to Redis, pass api_key= from your secret store instead.
|
|
472
|
+
# CACHEKIT_API_KEY="your-api-key" # pragma: allowlist secret
|
|
461
473
|
CACHEKIT_API_URL="https://api.cachekit.io" # Default SaaS endpoint
|
|
462
474
|
|
|
463
475
|
# Memcached Backend (optional: pip install cachekit[memcached])
|
|
464
|
-
CACHEKIT_MEMCACHED_SERVERS='["mc1:11211", "mc2:11211"]' # Default: 127.0.0.1:11211
|
|
476
|
+
# CACHEKIT_MEMCACHED_SERVERS='["mc1:11211", "mc2:11211"]' # Default: 127.0.0.1:11211
|
|
465
477
|
CACHEKIT_MEMCACHED_CONNECT_TIMEOUT=2.0 # Default: 2.0 seconds
|
|
466
478
|
CACHEKIT_MEMCACHED_TIMEOUT=1.0 # Default: 1.0 seconds
|
|
467
479
|
CACHEKIT_MEMCACHED_KEY_PREFIX="myapp:" # Default: "" (none)
|
|
@@ -471,9 +483,6 @@ CACHEKIT_MAX_VALUE_SIZE=104857600
|
|
|
471
483
|
CACHEKIT_ARROW_COMPRESSION=zstd
|
|
472
484
|
```
|
|
473
485
|
|
|
474
|
-
> [!NOTE]
|
|
475
|
-
> If both `CACHEKIT_REDIS_URL` and `REDIS_URL` are set, `CACHEKIT_REDIS_URL` takes precedence.
|
|
476
|
-
|
|
477
486
|
---
|
|
478
487
|
|
|
479
488
|
## Development
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "cachekit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.21.0"
|
|
8
8
|
description = "Backend-agnostic caching for Python — intent-based decorators with circuit breaker, distributed locking, Prometheus metrics, and optional zero-knowledge AES-256-GCM encryption, on a Rust-powered core. Zero-config L1 in-memory; scales to Redis, Memcached, File, or CachekitIO."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -53,11 +53,17 @@ classifiers = [
|
|
|
53
53
|
]
|
|
54
54
|
requires-python = ">=3.10"
|
|
55
55
|
dependencies = [
|
|
56
|
-
# Core Redis functionality
|
|
57
|
-
|
|
56
|
+
# Core Redis functionality. 4.6.0 is the oldest release on which every URL scheme creates a client:
|
|
57
|
+
# redis.asyncio arrived in 4.2.0, and before 4.6.0 a unix:// connection rejects socket_connect_timeout.
|
|
58
|
+
# Below the floor, client creation fails and every decorated call runs uncached. CI runs the unit suite
|
|
59
|
+
# on exactly this version (the redis-py floor job), so raise it here when the code needs a newer release.
|
|
60
|
+
"redis[hiredis]>=4.6.0",
|
|
58
61
|
# Configuration and validation
|
|
59
62
|
"pydantic>=2.0.0",
|
|
60
|
-
|
|
63
|
+
# 2.12.0 lets an explicit constructor kwarg beat an aliased env var: before it,
|
|
64
|
+
# RedisBackendConfig(redis_url=...) raised extra_forbidden whenever REDIS_URL was set (#225).
|
|
65
|
+
# 2.13.0 fixed a hash-order race in that change (pydantic/pydantic-settings#746), so it is the floor.
|
|
66
|
+
"pydantic-settings>=2.13.0",
|
|
61
67
|
# Monitoring and observability
|
|
62
68
|
"prometheus-client>=0.22.1",
|
|
63
69
|
"psutil>=7.0.0",
|
|
@@ -272,7 +278,12 @@ fuzz = [
|
|
|
272
278
|
# [project] dependencies instead — see the anyio/h2 entries above.
|
|
273
279
|
[tool.uv]
|
|
274
280
|
constraint-dependencies = [
|
|
275
|
-
|
|
281
|
+
# urllib3 is a dev-only transitive dep (requests -> urllib3; requests is a
|
|
282
|
+
# dev dependency and also arrives via pip-audit).
|
|
283
|
+
# 2.8.0 fixes GHSA-8988-9cw3-xx77 (HTTPS proxy TLS config ignored),
|
|
284
|
+
# GHSA-gh4c-6fx4-qh6g (chunked deflate infinite loop) and
|
|
285
|
+
# GHSA-vxq7-64xx-v4gw (unbounded chunk-size line buffering).
|
|
286
|
+
"urllib3>=2.8.0",
|
|
276
287
|
"fonttools>=4.60.2",
|
|
277
288
|
"werkzeug>=3.1.4",
|
|
278
289
|
# pip is a dev-only transitive dep (pip-audit -> pip-api -> pip). 26.1.2 fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "cachekit-rs"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.21.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
authors = ["cachekit Contributors"]
|
|
6
6
|
description = "High-performance storage engine for caching with compression and encryption"
|
|
@@ -43,10 +43,10 @@ messagepack = []
|
|
|
43
43
|
encryption = ["dep:zeroize"]
|
|
44
44
|
|
|
45
45
|
[dev-dependencies]
|
|
46
|
-
criterion = { version = "0.
|
|
47
|
-
ctor = "0.
|
|
46
|
+
criterion = { version = "0.8", features = ["html_reports"] }
|
|
47
|
+
ctor = "0.13.0"
|
|
48
48
|
pprof = { version = "0.15", features = ["criterion", "flamegraph", "protobuf-codec"] }
|
|
49
|
-
iai-callgrind = "0.
|
|
49
|
+
iai-callgrind = "0.16"
|
|
50
50
|
divan = "0.1"
|
|
51
51
|
fastrand = "2.1"
|
|
52
52
|
proptest = "1.4"
|
|
@@ -53,7 +53,7 @@ help: ## Show Rust-specific commands
|
|
|
53
53
|
@echo " $(YELLOW)make test-property$(RESET) Property-based tests (proptest)"
|
|
54
54
|
@echo ""
|
|
55
55
|
@echo "$(GREEN)Benchmarks:$(RESET)"
|
|
56
|
-
@echo " $(YELLOW)make bench$(RESET)
|
|
56
|
+
@echo " $(YELLOW)make bench$(RESET) Point at the Rust benchmarks (cachekit-core)"
|
|
57
57
|
@echo ""
|
|
58
58
|
@echo "$(GREEN)Security:$(RESET)"
|
|
59
59
|
@echo " $(YELLOW)make security-fast$(RESET) Fast security checks (< 3 min)"
|
|
@@ -163,12 +163,9 @@ test-property: ## Run property-based tests (in cachekit-core)
|
|
|
163
163
|
# 📊 BENCHMARKS
|
|
164
164
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
165
165
|
|
|
166
|
-
bench: ## Run Rust benchmarks
|
|
167
|
-
@echo "$(BLUE)
|
|
168
|
-
@echo "$(YELLOW)
|
|
169
|
-
$(call require_binary,cargo,Install Rust: https://rustup.rs)
|
|
170
|
-
@cargo bench --bench unified_benchmarks 2>&1 | tee $(LOG_DIR)/benchmark/rust-bench_$(TIMESTAMP).log
|
|
171
|
-
@echo "$(GREEN)✓ Rust benchmarks completed$(RESET)"
|
|
166
|
+
bench: ## Run Rust benchmarks (in cachekit-core)
|
|
167
|
+
@echo "$(BLUE)Rust benchmarks are now in cachekit-core/$(RESET)"
|
|
168
|
+
@echo "$(YELLOW)Run: cd ../../cachekit-core && cargo bench --features encryption --bench hot_path$(RESET)"
|
|
172
169
|
|
|
173
170
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
174
171
|
# 🔒 SECURITY & VERIFICATION
|