{
    "componentChunkName": "component---src-templates-issues-tsx",
    "path": "/issues/282",
    "result": {"data":{"issuesJson":{"id":"2434a038-b038-5909-9a8c-c7cf6fc5c90b","title":"Snapchat/KeyDB: KeyDB 是 Redis 的高性能分支，专注于多线程、内存效率和高吞吐量。除了性能改进之外，KeyDB 还提供主动复制、闪存存储和子密钥过期等功能。","number":282,"bodyHTML":"<div align=\"center\" dir=\"auto\">\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a><br><br></p>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"right\">Repos</th>\n<th align=\"left\"><a href=\"https://github.com/Snapchat/KeyDB\">Snapchat/KeyDB</a></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"right\"><strong>Views</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/cda6e8c88345234baab5f0f34417238a522ecc659d78a6929073028c18dcc9db/68747470733a2f2f76696577732e77686174696c656172656e65642e746f6461792f76696577732f6769746875622f536e6170636861742f4b657944422e737667\" alt=\"views\" data-canonical-src=\"https://views.whatilearened.today/views/github/Snapchat/KeyDB.svg\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Stars</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/205ea5bb402e9869ecf295be4a7f5a8dc380bfcb10ae9b15f2763ffa5b0aa0ba/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f536e6170636861742f4b657944423f636f6c6f723d663266303864266c6f676f3d556e64657274616c65266c6f676f436f6c6f723d656234363330\" alt=\"stars\" data-canonical-src=\"https://img.shields.io/github/stars/Snapchat/KeyDB?color=f2f08d&amp;logo=Undertale&amp;logoColor=eb4630\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Forks</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/e94282edd5f59efb533ab37507b41b36310edcd6e609af036637c28807b3b862/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f536e6170636861742f4b657944423f636f6c6f723d626138366562266c6f676f3d48616e647368616b65266c6f676f436f6c6f723d656136616136\" alt=\"forks\" data-canonical-src=\"https://img.shields.io/github/forks/Snapchat/KeyDB?color=ba86eb&amp;logo=Handshake&amp;logoColor=ea6aa6\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>License</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/2d8ea4bc467a6c8898425a0893d0a55d1af09a90623439d8c4ca23562b82aba7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f536e6170636861742f4b657944423f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e53556845556741414144414141414177434159414141425841766d48414141414358424957584d41414173544141414c457745416d70775941414144336b6c45515652346e4f335953557a5555426748384a726f57567255474a66456d3773584e63534446784d544c327069347348456778654e526f77586770455742445552522532424e414e4f4b4f4b36366f6f4b4a4742586545475263574163455646475152484677516d483525324630774861655748493944554455354c356b6e6568644f62377a66652532423139636e434a47495243516945596c514237594a4979474c38616f73756c565a36695246516a69474b6b7564576735614c6c704f70704e586e665071773555304459524a6d56786a4367464633424c755a476d416f5655694b4541726d583744375553677351706f72674761336748664b34483663754262435644334771683141352532424c6745253242467749656e514d306a6f446f66714c6f48564e7742796d384370546e416d327a51713073676478624964515a556c416b7150415a3664676a303541446f59526f6f66792532466f5869726f376b3551586a4c6f70677a4b69514e6c4c4461716f4967754577426a7a7150355066446a45394479495879493633464d547751464d43567271774e61763451666f52673538514625324266724d485172454b3844546f434d714e4179574e4866786d54526f4c4f726d5352566747744466714345715a4f4851727a6f34706243557341333431365169364551394b476a6345465267484f724f4b6e5536574162396247455459656b4b7843766a546167394534706a653534446b3551503862624d4859762532464333756541654a6b50304f4778422532424a70426e4172595238455951516e6f4e31414e4661426e5050356c385372736559514c303641646b30464a5938484f5761424d6c6541486a683068506f73497a6c6f3876304125324633345a694f6548726130714b52504d5653493774762532423932747725324676687855654252713456454c674d376642714b354770526d6f514c584e7075625475367a6f4e52706754386e5051627138347764253246494375767978694b4871694e41664933774d367549684271476b4c696977414f734b44714f68743749747239567938536a52424557667941627225324668523142667056514664484a42253246423268683778376a36517077435665655951326b72554235436c636a3641326d3067576a25324244306d4c34397a573563517943484c4e37726a6c6d6d6174457958582532464372547a412532466f51785a6b576c39474a5443566f25324279546a3837253242346769504b6376307149486f344156344430565a727251493334706e70524d36357875652532467a417265453425324654253246536f676c664542794d7369517441546c4c3352414a355948725378365a44665337307337754d486842705225324659423573305057366f455270316236253246667252684b3353444c35546965364f515548516c5133735644752532427a50636b397657453973747225324236496a533967486d5750616861444a25324277434b364e494242587348423948796b587378774470686c436d416476706c6162554a4e6e5a504239342532464e7436784f6538587a4562503257684d335741673147756236744825324233513150673337365239713475716c6e6f36676448476a444f5139306562303141484d3672596975554a314f713472344656756a35765239427a4d3957674e764f7977446869495951467667626366774166774d764863615067425041253246447948476a50624e394138616d6562636477416444354e6633373574787165774e5552656f797677424958594c645170576c6877465771745061435044334173467541535636717171496c62304a766b564331464c39576b4c55556c55574b337a585a4c46432532423125324642726f46746f364f7358497545594a5034447a7a5732594656316f4a614141414141456c46546b5375516d4343\" alt=\"license\" data-canonical-src=\"https://img.shields.io/github/license/Snapchat/KeyDB?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3klEQVR4nO3YSUzUUBgH8JroWVrUGJfEm7sXNcSDFxMTL2pi4sHEgxeNRowXgpEWBDURR%2BNANOKOK66ooKJGBXeEGRcWAcEVFGQRHFwQmH5%2F0wHaeWHI9DUDU5L5knehdOb7zfe%2B19cnCJGIRCQiEYlQB7YJIyGL8aosulVZ6iRFQjiGKkudWg5aLlpOppNXnfPqw5U0DYRJmVxjCgFF3BLuZGmAoVUiKEArmX7D7USgsQporgGa3gHfK4H6cuBbCVD3Gqh1A5%2BLgE%2BFwIenQM0joDofqLoHVNwBym8CpTnAm2zQq0sgdxbIdQZUlAkqPAZ6dgj05ADoYRoofy%2FoXiro7k5QXjLopgzKiQNlLDaqoIguEwBjzqP5PfDjE9DyIXyI63FMTwQFMCVrqwNav4QfoRg58QF%2BfrMHQrEK8DToCMqNAyWNHfxmTRoLOrmSRVgGtDfqCEqZOHQrzo4pbCUsA3416Qi6EQ9KGjcEFRgHOrOKnU6WAb9bGETYekKxCvjTag9E4pje54Dk5QP8bbMHYv%2FC3ueAeJkP0OGxB%2BJpBnArYR8EYQQnoN1ANFaBnPP5l8SrseYQL06Adk0FJY8HOWaBMleAHjh0hPosIzlo8v0A%2F34ZiOeHra0qKRPMVSI7tv%2B92tw%2FvhxUeBRq4VELgM7fBqK5GpRmoQLXNpubTu6zoNRpgT8nPQbq84wd%2FICuvyxiKHqiNAfI3wM6uIhBqGkLiiwAOsKDqOht7Itr9Vy8SjRBEWfyAbr%2FhR1BfpVQFdHJB%2FB2hh7x7j6QpwCVeeYQ2krUB5Clcj6A2m0gWj%2BD0mL49zW5cQyCHLN7rjlmmatEyXX%2FCrTzA%2FoQxZkWl9GJTCVo%2ByTj87%2B4giPKcv0qIHo4AV4D0VZrrQI34pnpRM65xue%2FzAreE4%2FT%2FSoglfEByMsiQtATlL3RAJ5YHrSx6ZDfS70s7uMHhBpR%2FYB5s0PW6oERp1b6%2FfrRhK3SDL5Tie6OQUHQlQ3sVDu%2BzPck9vWE9str%2B6IjS9gHmWPahaDJ%2BwCK6NIBBXsHB9HykXsxwDphlCmAdvplabUJNnZPB94%2FNt6xOe8XzEbP2WhM3WAg1Gub6tH%2B3Q1Pg376R9q4uqlno6gdHGjDOQ90eb01AHM6rYiuUJ1Oq4r4FVuj5vR9BzM9WgNvOywDhiIYQFvgbcfwAfwMvHcaPgBPA%2FDyHGjPbN9A8amebcdwAdD5Nf375txqewNUReoyvwBIXYLdQpWlhwFWqtPaCPD3AsFuASV6qqqIlb0JvkVC1FL9WkLUUlUWK3zXZLFC%2B1%2FBroFto6OsXIuEYJP4DzzW2YFV1oJaAAAAAElFTkSuQmCC\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>UpdatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/617906a8471629a26d6e84bf2109b6965ef43b9b7b542490fbc2fc84be5d79fd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f536e6170636861742f4b657944423f646973706c61795f74696d657374616d703d636f6d6d6974746572266c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d557064617465644174\" alt=\"last-commit\" data-canonical-src=\"https://img.shields.io/github/last-commit/Snapchat/KeyDB?display_timestamp=committer&amp;logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=UpdatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>CreatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/22e481d7775eec1f5ab79349ca90cd1f329b5decd5a46a365bbdce0a3382dbc0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f637265617465642d61742f536e6170636861742f4b657944423f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d437265617465644174\" alt=\"create-at\" data-canonical-src=\"https://img.shields.io/github/created-at/Snapchat/KeyDB?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=CreatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<a href=\"https://github.com/opsre/awesome-ops\">\n</a><p dir=\"auto\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/b964a36ea4078c39f603d46a29436371c7541a2f26e0228d7b21b9d9805b43d3/68747470733a2f2f736f6369616c6966792e6769742e63692f6f707372652f617765736f6d652d6f70732f696d6167653f6465736372697074696f6e3d3126666f6e743d42697474657226666f726b733d31266973737565733d31266c616e67756167653d31266c6f676f3d6874747073253341253246253246617661746172732e67697468756275736572636f6e74656e742e636f6d25324675253246313838353638303230266e616d653d31266f776e65723d31267061747465726e3d436972637569742b426f6172642670756c6c733d31267374617267617a6572733d31267468656d653d4c69676874\" alt=\"\" data-canonical-src=\"https://socialify.git.ci/opsre/awesome-ops/image?description=1&amp;font=Bitter&amp;forks=1&amp;issues=1&amp;language=1&amp;logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F188568020&amp;name=1&amp;owner=1&amp;pattern=Circuit+Board&amp;pulls=1&amp;stargazers=1&amp;theme=Light\" style=\"max-width: 100%;\"></a></p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a>\n</div>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/f5624c7410779f02a737c4bc0122ff2a4e5dc4871a1f43b36a66f784e29a84e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f4a6f686e53756c6c792f4b657944422e737667\"><img src=\"https://camo.githubusercontent.com/f5624c7410779f02a737c4bc0122ff2a4e5dc4871a1f43b36a66f784e29a84e6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f4a6f686e53756c6c792f4b657944422e737667\" alt=\"Current Release\" data-canonical-src=\"https://img.shields.io/github/release/JohnSully/KeyDB.svg\" style=\"max-width: 100%;\"></a><br>\n<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/JohnSully/KeyDB/workflows/CI/badge.svg?branch=unstable\"><img src=\"https://github.com/JohnSully/KeyDB/workflows/CI/badge.svg?branch=unstable\" alt=\"CI\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://stackshare.io/eq-alpha-technology-inc/eq-alpha-technology-inc\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/b42d787575e7e8e0bbcc7c2686b81c811e4475bb369011a80b6ec544d3eb6027/687474703a2f2f696d672e736869656c64732e696f2f62616467652f746563682d737461636b2d3036393066612e7376673f7374796c653d666c6174\" alt=\"StackShare\" data-canonical-src=\"http://img.shields.io/badge/tech-stack-0690fa.svg?style=flat\" style=\"max-width: 100%;\"></a></p>\n<h5 dir=\"auto\">KeyDB is now a part of Snap Inc! Check out the announcement <a href=\"https://docs.keydb.dev/news/2022/05/12/keydb-joins-snap\" rel=\"nofollow\">here</a></h5>\n<h5 dir=\"auto\"><a href=\"https://github.com/EQ-Alpha/KeyDB/releases/tag/v6.3.0\">Release v6.3.0</a> is here with major improvements as we consolidate our Open Source and Enterprise offerings into a single BSD-3 licensed project. See our <a href=\"https://docs.keydb.dev/docs/coming-soon\" rel=\"nofollow\">roadmap</a> for details.</h5>\n<h5 dir=\"auto\">Want to extend KeyDB with Javascript?  Try <a href=\"https://github.com/JohnSully/ModJS\">ModJS</a></h5>\n<h5 dir=\"auto\">Need Help? Check out our extensive <a href=\"https://docs.keydb.dev\" rel=\"nofollow\">documentation</a>.</h5>\n<h5 dir=\"auto\">KeyDB is on Slack. Click <a href=\"https://docs.keydb.dev/slack/\" rel=\"nofollow\">here</a> to learn more and join the KeyDB Community Slack workspace.</h5>\n<h2 dir=\"auto\">What is KeyDB?</h2>\n<p dir=\"auto\">KeyDB is a high performance fork of Redis with a focus on multithreading, memory efficiency, and high throughput. In addition to performance improvements, KeyDB offers features such as Active Replication, FLASH Storage and Subkey Expires. KeyDB has a MVCC architecture that allows you to execute queries such as KEYS and SCAN without blocking the database and degrading performance.</p>\n<p dir=\"auto\">KeyDB maintains full compatibility with the Redis protocol, modules, and scripts.  This includes the atomicity guarantees for scripts and transactions.  Because KeyDB keeps in sync with Redis development KeyDB is a superset of Redis functionality, making KeyDB a drop in replacement for existing Redis deployments.</p>\n<p dir=\"auto\">On the same hardware KeyDB can achieve significantly higher throughput than Redis. Active-Replication simplifies hot-spare failover allowing you to easily distribute writes over replicas and use simple TCP based load balancing/failover. KeyDB's higher performance allows you to do more on less hardware which reduces operation costs and complexity.</p>\n<p dir=\"auto\">The chart below compares several KeyDB and Redis setups, including the latest Redis6 io-threads option, and TLS benchmarks.</p>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/c61e6cff86801ada4d46d05784b71a943cb6409df403eb2c04d0f78a84bc2d12/68747470733a2f2f646f63732e6b657964622e6465762f696d672f626c6f672f323032302d30392d31352f6f70735f636f6d70617269736f6e2e706e67\"><img src=\"https://camo.githubusercontent.com/c61e6cff86801ada4d46d05784b71a943cb6409df403eb2c04d0f78a84bc2d12/68747470733a2f2f646f63732e6b657964622e6465762f696d672f626c6f672f323032302d30392d31352f6f70735f636f6d70617269736f6e2e706e67\" data-canonical-src=\"https://docs.keydb.dev/img/blog/2020-09-15/ops_comparison.png\" style=\"max-width: 100%;\"></a></p>\n<p dir=\"auto\">See the full benchmark results and setup information here: <a href=\"https://docs.keydb.dev/blog/2020/09/29/blog-post/\" rel=\"nofollow\">https://docs.keydb.dev/blog/2020/09/29/blog-post/</a></p>\n<h2 dir=\"auto\">Why fork Redis?</h2>\n<p dir=\"auto\">KeyDB has a different philosophy on how the codebase should evolve.  We feel that ease of use, high performance, and a \"batteries included\" approach is the best way to create a good user experience.  While we have great respect for the Redis maintainers it is our opinion that the Redis approach focuses too much on simplicity of the code base at the expense of complexity for the user.  This results in the need for external components and workarounds to solve common problems - resulting in more complexity overall.</p>\n<p dir=\"auto\">Because of this difference of opinion features which are right for KeyDB may not be appropriate for Redis.  A fork allows us to explore this new development path and implement features which may never be a part of Redis.  KeyDB keeps in sync with upstream Redis changes, and where applicable we upstream bug fixes and changes. It is our hope that the two projects can continue to grow and learn from each other.</p>\n<h2 dir=\"auto\">Project Support</h2>\n<p dir=\"auto\">The KeyDB team maintains this project as part of Snap Inc. KeyDB is used by Snap as part of its caching infrastructure and is fully open sourced. There is no separate commercial product and no paid support options available. We really value collaborating with the open source community and welcome PRs, bug reports, and open discussion. For community support or to get involved further with the project check out our community support options <a href=\"https://docs.keydb.dev/docs/support\" rel=\"nofollow\">here</a> (slack, forum, meetup, github issues). Our team monitors these channels regularly.</p>\n<h2 dir=\"auto\">Additional Resources</h2>\n<p dir=\"auto\">Try the KeyDB <a href=\"https://hub.docker.com/r/eqalpha/keydb\" rel=\"nofollow\">Docker Image</a></p>\n<p dir=\"auto\">Join us on <a href=\"https://docs.keydb.dev/slack/\" rel=\"nofollow\">Slack</a></p>\n<p dir=\"auto\">Learn more using KeyDB's extensive <a href=\"https://docs.keydb.dev\" rel=\"nofollow\">documentation</a></p>\n<p dir=\"auto\">See the <a href=\"https://docs.keydb.dev/docs/coming-soon\" rel=\"nofollow\">KeyDB Roadmap</a> to see what's in store</p>\n<h2 dir=\"auto\">Benchmarking KeyDB</h2>\n<p dir=\"auto\">Please note keydb-benchmark and redis-benchmark are currently single threaded and too slow to properly benchmark KeyDB.  We recommend using a redis cluster benchmark tool such as <a href=\"https://github.com/RedisLabs/memtier_benchmark\">memtier</a>.  Please ensure your machine has enough cores for both KeyDB and memtier if testing locally.  KeyDB expects exclusive use of any cores assigned to it.</p>\n<h2 dir=\"auto\">New Configuration Options</h2>\n<p dir=\"auto\">With new features comes new options. All other configuration options behave as you'd expect.  Your existing configuration files should continue to work unchanged.</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"    server-threads N\n    server-thread-affinity [true/false]\"><pre class=\"notranslate\"><code class=\"notranslate\">    server-threads N\n    server-thread-affinity [true/false]\n</code></pre></div>\n<p dir=\"auto\">The number of threads used to serve requests.  This should be related to the number of queues available in your network hardware, <em>not</em> the number of cores on your<br>\nmachine.  Because KeyDB uses spinlocks to reduce latency; making this too high will reduce performance.  We recommend using 4 here.  By default this is set to two.</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"min-clients-per-thread 50\"><pre class=\"notranslate\"><code class=\"notranslate\">min-clients-per-thread 50\n</code></pre></div>\n<p dir=\"auto\">The minimum number of clients on a thread before KeyDB assigns new connections to a different thread. Tuning this parameter is a tradeoff between locking overhead and distributing the workload over multiple cores</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"replica-weighting-factor 2\"><pre class=\"notranslate\"><code class=\"notranslate\">replica-weighting-factor 2\n</code></pre></div>\n<p dir=\"auto\">KeyDB will attempt to balance clients across threads evenly; However, replica clients are usually much more expensive than a normal client, and so KeyDB will try to assign fewer clients to threads with a replica.  The weighting factor below is intended to help tune this behavior.  A replica weighting factor of 2 means we treat a replica as the equivalent of two normal clients.  Adjusting this value may improve performance when replication is used.  The best weighting is workload specific - e.g. read heavy workloads should set this to 1.  Very write heavy workloads may benefit from higher numbers.</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"active-client-balancing yes\"><pre class=\"notranslate\"><code class=\"notranslate\">active-client-balancing yes\n</code></pre></div>\n<p dir=\"auto\">Should KeyDB make active attempts at balancing clients across threads?  This can impact performance accepting new clients.  By default this is enabled.  If disabled there is still a best effort from the kernel to distribute across threads with SO_REUSEPORT but it will not be as fair. By default this is enabled</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"    active-replica yes\"><pre class=\"notranslate\"><code class=\"notranslate\">    active-replica yes\n</code></pre></div>\n<p dir=\"auto\">If you are using active-active replication set <code class=\"notranslate\">active-replica</code> option to “yes”. This will enable both instances to accept reads and writes while remaining synced. <a href=\"https://docs.keydb.dev/docs/active-rep/\" rel=\"nofollow\">Click here</a> to see more on active-rep in our docs section. There are also <a href=\"https://docs.keydb.dev/docs/docker-active-rep/\" rel=\"nofollow\">docker examples</a> on docs.</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"multi-master-no-forward no\"><pre class=\"notranslate\"><code class=\"notranslate\">multi-master-no-forward no\n</code></pre></div>\n<p dir=\"auto\">Avoid forwarding RREPLAY messages to other masters? WARNING: This setting is dangerous! You must be certain all masters are connected to eachother in a true mesh topology or data loss will occur! This command can be used to reduce multimaster bus traffic</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"    db-s3-object /path/to/bucket\"><pre class=\"notranslate\"><code class=\"notranslate\">    db-s3-object /path/to/bucket\n</code></pre></div>\n<p dir=\"auto\">If you would like KeyDB to dump and load directly to AWS S3 this option specifies the bucket.  Using this option with the traditional RDB options will result in KeyDB backing up twice to both locations.  If both are specified KeyDB will first attempt to load from the local dump file and if that fails load from S3.  This requires the AWS CLI tools to be installed and configured which are used under the hood to transfer the data.</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"storage-provider flash /path/to/flash\"><pre class=\"notranslate\"><code class=\"notranslate\">storage-provider flash /path/to/flash\n</code></pre></div>\n<p dir=\"auto\">If you would like to use KeyDB FLASH storage, specify the storage medium followed by the directory path on your local SSD volume. Note that this feature is still considered experimental and should be used with discretion. See <a href=\"https://docs.keydb.dev/docs/flash\" rel=\"nofollow\">FLASH Documentation</a> for more details on configuration and setting up your FLASH volume.</p>\n<h2 dir=\"auto\">Building KeyDB</h2>\n<p dir=\"auto\">KeyDB can be compiled and is tested for use on Linux.  KeyDB currently relies on SO_REUSEPORT's load balancing behavior which is available only in Linux.  When we support marshalling connections across threads we plan to support other operating systems such as FreeBSD.</p>\n<p dir=\"auto\">More on CentOS/Archlinux/Alpine/Debian/Ubuntu dependencies and builds can be found here: <a href=\"https://docs.keydb.dev/docs/build/\" rel=\"nofollow\">https://docs.keydb.dev/docs/build/</a></p>\n<p dir=\"auto\">Init and clone submodule dependencies:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% git submodule init &amp;&amp; git submodule update\"><pre class=\"notranslate\"><code class=\"notranslate\">% git submodule init &amp;&amp; git submodule update\n</code></pre></div>\n<p dir=\"auto\">Install dependencies:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% sudo apt install build-essential nasm autotools-dev autoconf libjemalloc-dev tcl tcl-dev uuid-dev libcurl4-openssl-dev libbz2-dev libzstd-dev liblz4-dev libsnappy-dev libssl-dev\"><pre class=\"notranslate\"><code class=\"notranslate\">% sudo apt install build-essential nasm autotools-dev autoconf libjemalloc-dev tcl tcl-dev uuid-dev libcurl4-openssl-dev libbz2-dev libzstd-dev liblz4-dev libsnappy-dev libssl-dev\n</code></pre></div>\n<p dir=\"auto\">Compiling is as simple as:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make\"><pre class=\"notranslate\"><code class=\"notranslate\">% make\n</code></pre></div>\n<p dir=\"auto\">To build with systemd support, you'll need systemd development libraries (such<br>\nas libsystemd-dev on Debian/Ubuntu or systemd-devel on CentOS) and run:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make USE_SYSTEMD=yes\"><pre class=\"notranslate\"><code class=\"notranslate\">% make USE_SYSTEMD=yes\n</code></pre></div>\n<p dir=\"auto\">To append a suffix to KeyDB program names, use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make PROG_SUFFIX=&quot;-alt&quot;\"><pre class=\"notranslate\"><code class=\"notranslate\">% make PROG_SUFFIX=\"-alt\"\n</code></pre></div>\n<p dir=\"auto\">***Note that the following dependencies may be needed:<br>\n% sudo apt-get install autoconf autotools-dev libnuma-dev libtool</p>\n<p dir=\"auto\">KeyDB by default is built with TLS enabled. To build without TLS support, use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make BUILD_TLS=no\"><pre class=\"notranslate\"><code class=\"notranslate\">% make BUILD_TLS=no\n</code></pre></div>\n<p dir=\"auto\">Running the tests with TLS enabled (you will need <code class=\"notranslate\">tcl-tls</code><br>\ninstalled):</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% ./utils/gen-test-certs.sh\n% ./runtest --tls\"><pre class=\"notranslate\"><code class=\"notranslate\">% ./utils/gen-test-certs.sh\n% ./runtest --tls\n</code></pre></div>\n<p dir=\"auto\">To build with KeyDB FLASH support, use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make ENABLE_FLASH=yes\"><pre class=\"notranslate\"><code class=\"notranslate\">% make ENABLE_FLASH=yes\n</code></pre></div>\n<p dir=\"auto\">***Note that the KeyDB FLASH feature is considered experimental (beta) and should used with discretion</p>\n<h2 dir=\"auto\">Fixing build problems with dependencies or cached build options</h2>\n<p dir=\"auto\">KeyDB has some dependencies which are included in the <code class=\"notranslate\">deps</code> directory.<br>\n<code class=\"notranslate\">make</code> does not automatically rebuild dependencies even if something in<br>\nthe source code of dependencies changes.</p>\n<p dir=\"auto\">When you update the source code with <code class=\"notranslate\">git pull</code> or when code inside the<br>\ndependencies tree is modified in any other way, make sure to use the following<br>\ncommand in order to really clean everything and rebuild from scratch:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"make distclean\"><pre class=\"notranslate\"><code class=\"notranslate\">make distclean\n</code></pre></div>\n<p dir=\"auto\">This will clean: jemalloc, lua, hiredis, linenoise.</p>\n<p dir=\"auto\">Also if you force certain build options like 32bit target, no C compiler<br>\noptimizations (for debugging purposes), and other similar build time options,<br>\nthose options are cached indefinitely until you issue a <code class=\"notranslate\">make distclean</code><br>\ncommand.</p>\n<h2 dir=\"auto\">Fixing problems building 32 bit binaries</h2>\n<p dir=\"auto\">If after building KeyDB with a 32 bit target you need to rebuild it<br>\nwith a 64 bit target, or the other way around, you need to perform a<br>\n<code class=\"notranslate\">make distclean</code> in the root directory of the KeyDB distribution.</p>\n<p dir=\"auto\">In case of build errors when trying to build a 32 bit binary of KeyDB, try<br>\nthe following steps:</p>\n<ul dir=\"auto\">\n<li>Install the package libc6-dev-i386 (also try g++-multilib).</li>\n<li>Try using the following command line instead of <code class=\"notranslate\">make 32bit</code>:<br>\n<code class=\"notranslate\">make CFLAGS=\"-m32 -march=native\" LDFLAGS=\"-m32\"</code></li>\n</ul>\n<h2 dir=\"auto\">Allocator</h2>\n<p dir=\"auto\">Selecting a non-default memory allocator when building KeyDB is done by setting<br>\nthe <code class=\"notranslate\">MALLOC</code> environment variable. KeyDB is compiled and linked against libc<br>\nmalloc by default, with the exception of jemalloc being the default on Linux<br>\nsystems. This default was picked because jemalloc has proven to have fewer<br>\nfragmentation problems than libc malloc.</p>\n<p dir=\"auto\">To force compiling against libc malloc, use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make MALLOC=libc\"><pre class=\"notranslate\"><code class=\"notranslate\">% make MALLOC=libc\n</code></pre></div>\n<p dir=\"auto\">To compile against jemalloc on Mac OS X systems, use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make MALLOC=jemalloc\"><pre class=\"notranslate\"><code class=\"notranslate\">% make MALLOC=jemalloc\n</code></pre></div>\n<h2 dir=\"auto\">Monotonic clock</h2>\n<p dir=\"auto\">By default, KeyDB will build using the POSIX clock_gettime function as the<br>\nmonotonic clock source.  On most modern systems, the internal processor clock<br>\ncan be used to improve performance.  Cautions can be found here:<br>\n<a href=\"http://oliveryang.net/2015/09/pitfalls-of-TSC-usage/\" rel=\"nofollow\">http://oliveryang.net/2015/09/pitfalls-of-TSC-usage/</a></p>\n<p dir=\"auto\">To build with support for the processor's internal instruction clock, use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make CFLAGS=&quot;-DUSE_PROCESSOR_CLOCK&quot;\"><pre class=\"notranslate\"><code class=\"notranslate\">% make CFLAGS=\"-DUSE_PROCESSOR_CLOCK\"\n</code></pre></div>\n<h2 dir=\"auto\">Verbose build</h2>\n<p dir=\"auto\">KeyDB will build with a user friendly colorized output by default.<br>\nIf you want to see a more verbose output, use the following:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make V=1\"><pre class=\"notranslate\"><code class=\"notranslate\">% make V=1\n</code></pre></div>\n<h2 dir=\"auto\">Running KeyDB</h2>\n<p dir=\"auto\">To run KeyDB with the default configuration, just type:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% cd src\n% ./keydb-server\"><pre class=\"notranslate\"><code class=\"notranslate\">% cd src\n% ./keydb-server\n</code></pre></div>\n<p dir=\"auto\">If you want to provide your keydb.conf, you have to run it using an additional<br>\nparameter (the path of the configuration file):</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% cd src\n% ./keydb-server /path/to/keydb.conf\"><pre class=\"notranslate\"><code class=\"notranslate\">% cd src\n% ./keydb-server /path/to/keydb.conf\n</code></pre></div>\n<p dir=\"auto\">It is possible to alter the KeyDB configuration by passing parameters directly<br>\nas options using the command line. Examples:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% ./keydb-server --port 9999 --replicaof 127.0.0.1 6379\n% ./keydb-server /etc/keydb/6379.conf --loglevel debug\"><pre class=\"notranslate\"><code class=\"notranslate\">% ./keydb-server --port 9999 --replicaof 127.0.0.1 6379\n% ./keydb-server /etc/keydb/6379.conf --loglevel debug\n</code></pre></div>\n<p dir=\"auto\">All the options in keydb.conf are also supported as options using the command<br>\nline, with exactly the same name.</p>\n<h2 dir=\"auto\">Running KeyDB with TLS:</h2>\n<p dir=\"auto\">Please consult the <a href=\"TLS.md\">TLS.md</a> file for more information on<br>\nhow to use KeyDB with TLS.</p>\n<h2 dir=\"auto\">Playing with KeyDB</h2>\n<p dir=\"auto\">You can use keydb-cli to play with KeyDB. Start a keydb-server instance,<br>\nthen in another terminal try the following:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% cd src\n% ./keydb-cli\nkeydb&gt; ping\nPONG\nkeydb&gt; set foo bar\nOK\nkeydb&gt; get foo\n&quot;bar&quot;\nkeydb&gt; incr mycounter\n(integer) 1\nkeydb&gt; incr mycounter\n(integer) 2\nkeydb&gt;\"><pre class=\"notranslate\"><code class=\"notranslate\">% cd src\n% ./keydb-cli\nkeydb&gt; ping\nPONG\nkeydb&gt; set foo bar\nOK\nkeydb&gt; get foo\n\"bar\"\nkeydb&gt; incr mycounter\n(integer) 1\nkeydb&gt; incr mycounter\n(integer) 2\nkeydb&gt;\n</code></pre></div>\n<p dir=\"auto\">You can find the list of all the available commands at <a href=\"https://docs.keydb.dev/docs/commands/\" rel=\"nofollow\">https://docs.keydb.dev/docs/commands/</a></p>\n<h2 dir=\"auto\">Installing KeyDB</h2>\n<p dir=\"auto\">In order to install KeyDB binaries into /usr/local/bin, just use:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% make install\"><pre class=\"notranslate\"><code class=\"notranslate\">% make install\n</code></pre></div>\n<p dir=\"auto\">You can use <code class=\"notranslate\">make PREFIX=/some/other/directory install</code> if you wish to use a<br>\ndifferent destination.</p>\n<p dir=\"auto\">Make install will just install binaries in your system, but will not configure<br>\ninit scripts and configuration files in the appropriate place. This is not<br>\nneeded if you just want to play a bit with KeyDB, but if you are installing<br>\nit the proper way for a production system, we have a script that does this<br>\nfor Ubuntu and Debian systems:</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"% cd utils\n% ./install_server.sh\"><pre class=\"notranslate\"><code class=\"notranslate\">% cd utils\n% ./install_server.sh\n</code></pre></div>\n<p dir=\"auto\"><em>Note</em>: <code class=\"notranslate\">install_server.sh</code> will not work on Mac OSX; it is built for Linux only.</p>\n<p dir=\"auto\">The script will ask you a few questions and will setup everything you need<br>\nto run KeyDB properly as a background daemon that will start again on<br>\nsystem reboots.</p>\n<p dir=\"auto\">You'll be able to stop and start KeyDB using the script named<br>\n<code class=\"notranslate\">/etc/init.d/keydb_&lt;portnumber&gt;</code>, for instance <code class=\"notranslate\">/etc/init.d/keydb_6379</code>.</p>\n<h2 dir=\"auto\">Multithreading Architecture</h2>\n<p dir=\"auto\">KeyDB works by running the normal Redis event loop on multiple threads.  Network IO, and query parsing are done concurrently.  Each connection is assigned a thread on accept().  Access to the core hash table is guarded by spinlock.  Because the hashtable access is extremely fast this lock has low contention.  Transactions hold the lock for the duration of the EXEC command.  Modules work in concert with the GIL which is only acquired when all server threads are paused.  This maintains the atomicity guarantees modules expect.</p>\n<p dir=\"auto\">Unlike most databases the core data structure is the fastest part of the system.  Most of the query time comes from parsing the REPL protocol and copying data to/from the network.</p>\n<h2 dir=\"auto\">Code contributions</h2>\n<p dir=\"auto\">Note: by contributing code to the KeyDB project in any form, including sending<br>\na pull request via Github, a code fragment or patch via private email or<br>\npublic discussion groups, you agree to release your code under the terms<br>\nof the BSD license that you can find in the COPYING file included in the KeyDB<br>\nsource distribution.</p>\n<p dir=\"auto\">Please see the CONTRIBUTING file in this source distribution for more<br>\ninformation.</p>","updatedAt":"2025-05-21T16:05:39Z","upvoteCount":null,"author":{"login":"eryajf","avatarUrl":"https://avatars.githubusercontent.com/u/33259379?u=e4a4090a38ac2473aaed4ef9945233636776c6c3&v=4","url":"https://github.com/eryajf"},"category":null,"labels":{"edges":[{"node":{"name":"更多","color":"25B472"}},{"node":{"name":"Database","color":"3fbc9d"}},{"node":{"name":"Snapchat","color":"994f29"}}]},"comments":{"edges":[]}}},"pageContext":{"number":282,"previous":{"title":"keycloak/keycloak: Keycloak提供用户联合、强身份验证、用户管理、细粒度授权等功能","number":281},"next":{"title":"kubernetes-sigs/kind: 使用 Docker 容器作为节点，在本地快速运行起 Kubernetes 集群的工具","number":283}}},
    "staticQueryHashes": ["151096407","2861350382"]}