<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on KeyValueStore.com</title>
    <link>https://keyvaluestore.com/posts/</link>
    <description>Recent content in Posts on KeyValueStore.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 05 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://keyvaluestore.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Consistent Hashing Playground: Modulo Hashing Moves 83% of Keys When a Server Joins, Jump Hash 17%</title>
      <link>https://keyvaluestore.com/consistent-hashing-playground-modulo-hashing-moves-83-of-keys-when-a-server-joins-jump-hash-17/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/consistent-hashing-playground-modulo-hashing-moves-83-of-keys-when-a-server-joins-jump-hash-17/</guid>
      <description>&lt;p&gt;Five cache servers share 100,000 keys. Traffic grows, and you add a sixth. With the obvious rule, hash the key and divide by the number of servers, 83% of the keys now belong somewhere else. Most of them move between servers that never changed. For a cache that&amp;rsquo;s a wave of misses landing on the database at once. For a store it&amp;rsquo;s a mountain of data copied across the network for no reason.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hash Slot Calculator Shows the Redis or Valkey Cluster Slot for Any Key and Catches CROSSSLOT Errors</title>
      <link>https://keyvaluestore.com/hash-slot-calculator-shows-the-redis-or-valkey-cluster-slot-for-any-key-and-catches-crossslot-errors/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/hash-slot-calculator-shows-the-redis-or-valkey-cluster-slot-for-any-key-and-catches-crossslot-errors/</guid>
      <description>&lt;p&gt;Code that ran fine against a single Redis or Valkey server often breaks the day it moves to a cluster. An &lt;code&gt;MGET&lt;/code&gt;, a &lt;code&gt;MULTI&lt;/code&gt; block or a Lua script that touched three keys now gets &lt;code&gt;CROSSSLOT Keys in request don&#39;t hash to the same slot&lt;/code&gt;, because in a cluster those keys live on different servers.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://keyvaluestore.com/tools/slots/&#34;&gt;Hash Slot Calculator&lt;/a&gt; shows where keys land before that happens. Type a key and you get its slot and the primary that holds it, with the hashed part of the key marked. Paste a command and it tells you whether a cluster would run it. Paste a whole key list and it shows how the keys spread across your primaries, the busiest slots and the hash tags in use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keyspace Map Shows What a Redis or Valkey Keyspace Holds, From a Plain SCAN Key List</title>
      <link>https://keyvaluestore.com/keyspace-map-shows-what-a-redis-or-valkey-keyspace-holds-from-a-plain-scan-key-list/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/keyspace-map-shows-what-a-redis-or-valkey-keyspace-holds-from-a-plain-scan-key-list/</guid>
      <description>&lt;p&gt;A key-value store has no tables and no schema to read. Everything sits in one flat list of keys, and the only structure is whatever people built into the names. After a few years and a few teams, the honest answer to &amp;ldquo;what&amp;rsquo;s in our Redis?&amp;rdquo; is often a shrug.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://keyvaluestore.com/tools/keyspace/&#34;&gt;Keyspace Map&lt;/a&gt; reads that structure back out of the names. Paste the output of &lt;code&gt;redis-cli --scan&lt;/code&gt; or &lt;code&gt;valkey-cli --scan&lt;/code&gt;, and a long key list becomes a short list of patterns with counts. In one test, 9,161 keys came down to 13 lines, led by &lt;code&gt;user:&amp;lt;id&amp;gt;:profile&lt;/code&gt; with 3,000 keys, &lt;code&gt;user:&amp;lt;id&amp;gt;:settings&lt;/code&gt; with 2,000 and &lt;code&gt;session:&amp;lt;hex&amp;gt;&lt;/code&gt; with 1,500. The same keys show as a tree of prefixes you can open level by level, with how many bytes the key names take.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mass Insert Builder Turns CSV and JSON Into a Bulk-Load File for Redis and Valkey</title>
      <link>https://keyvaluestore.com/mass-insert-builder-turns-csv-and-json-into-a-bulk-load-file-for-redis-and-valkey/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/mass-insert-builder-turns-csv-and-json-into-a-bulk-load-file-for-redis-and-valkey/</guid>
      <description>&lt;p&gt;The slow way to load a million keys into Redis or Valkey is a loop that sends a command, waits for the answer, and sends the next. Most of the time goes on the waiting. At half a millisecond per round trip, a million commands take more than eight minutes before the server has done anything hard.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;redis-cli --pipe&lt;/code&gt; and &lt;code&gt;valkey-cli --pipe&lt;/code&gt; skip the wait. They stream commands as fast as the connection takes them, read the replies as they arrive, and end with a count: &lt;code&gt;errors: 0, replies: 1000000&lt;/code&gt;. The catch is that they want their input already in the Redis protocol, where every value is preceded by its length in bytes. The &lt;a href=&#34;https://keyvaluestore.com/tools/pipe/&#34;&gt;Mass Insert Builder&lt;/a&gt; writes that file for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Snapshot Viewer Opens Redis and Valkey RDB Snapshots in the Browser, From Redis 2.8 to Valkey 9.1</title>
      <link>https://keyvaluestore.com/snapshot-viewer-opens-redis-and-valkey-rdb-snapshots-in-the-browser-from-redis-2.8-to-valkey-9.1/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/snapshot-viewer-opens-redis-and-valkey-rdb-snapshots-in-the-browser-from-redis-2.8-to-valkey-9.1/</guid>
      <description>&lt;p&gt;A Redis server is using 40 GB and nobody is sure what&amp;rsquo;s in it. The usual tools all ask the server itself. &lt;code&gt;--bigkeys&lt;/code&gt; scans every key, &lt;code&gt;MEMORY USAGE&lt;/code&gt; asks about one key at a time, and a script over &lt;code&gt;SCAN&lt;/code&gt; adds its own load to a machine that&amp;rsquo;s already the busiest in the building.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a copy of the same data that answers those questions for free: the snapshot. The &lt;a href=&#34;https://keyvaluestore.com/tools/snapshot/&#34;&gt;Snapshot Viewer&lt;/a&gt; opens a &lt;code&gt;dump.rdb&lt;/code&gt; in your browser and shows the keys by type and database, the biggest keys, the prefixes that take the most space, how long expiring keys have left, and the value of any key you pick.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Traffic Analyzer Turns Redis and Valkey MONITOR Output Into a Cache Hit-Rate Curve That Matched a Real Server</title>
      <link>https://keyvaluestore.com/traffic-analyzer-turns-redis-and-valkey-monitor-output-into-a-cache-hit-rate-curve-that-matched-a-real-server/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/traffic-analyzer-turns-redis-and-valkey-monitor-output-into-a-cache-hit-rate-curve-that-matched-a-real-server/</guid>
      <description>&lt;p&gt;A Redis server is running hot and the question is what with. &lt;code&gt;INFO commandstats&lt;/code&gt; counts commands but can&amp;rsquo;t say which keys or which clients. The slow log only keeps the slow ones. &lt;code&gt;MONITOR&lt;/code&gt; shows everything, every command with its keys and the address that sent it, but at 30,000 lines a second nobody reads it.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://keyvaluestore.com/tools/traffic/&#34;&gt;Traffic Analyzer&lt;/a&gt; reads a &lt;code&gt;MONITOR&lt;/code&gt; capture in your browser and adds it up: commands per second, the command mix, reads against writes, the busiest keys and key patterns, which clients send what, how the keys would spread over a cluster, commands worth a second look, and how many keys a cache would need to hold.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Typed JSON Converter Turns DynamoDB JSON Into Plain JSON and Back Without Losing a Digit</title>
      <link>https://keyvaluestore.com/typed-json-converter-turns-dynamodb-json-into-plain-json-and-back-without-losing-a-digit/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/typed-json-converter-turns-dynamodb-json-into-plain-json-and-back-without-losing-a-digit/</guid>
      <description>&lt;p&gt;Ask DynamoDB for an item and you get every value wrapped in its type: &lt;code&gt;{&amp;quot;name&amp;quot;: {&amp;quot;S&amp;quot;: &amp;quot;Ana&amp;quot;}, &amp;quot;visits&amp;quot;: {&amp;quot;N&amp;quot;: &amp;quot;17&amp;quot;}}&lt;/code&gt;. It&amp;rsquo;s exact, and it&amp;rsquo;s a pain to read, to diff, or to hand to anything that expects normal JSON. Going the other way is worse, because writing typed JSON by hand for a test item or a quick fix is slow and easy to get wrong.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://keyvaluestore.com/tools/typed-json/&#34;&gt;Typed JSON Converter&lt;/a&gt; does both directions. Paste the output of &lt;code&gt;aws dynamodb scan&lt;/code&gt; and get a clean list of items. Paste plain JSON and get typed JSON ready for &lt;code&gt;put-item&lt;/code&gt;, or a set of &lt;code&gt;batch-write-item&lt;/code&gt; requests, 25 items each. It works out the direction on its own, and it reads the shapes the AWS tools print: Scan and Query output, GetItem and BatchGetItem results, exports to S3 in DynamoDB JSON, and DynamoDB Streams records as a Lambda function receives them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Value Inspector Decodes Pickles, Java Objects and PHP Sessions From Redis and Valkey Without Running Them</title>
      <link>https://keyvaluestore.com/value-inspector-decodes-pickles-java-objects-and-php-sessions-from-redis-and-valkey-without-running-them/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/value-inspector-decodes-pickles-java-objects-and-php-sessions-from-redis-and-valkey-without-running-them/</guid>
      <description>&lt;p&gt;Someone runs &lt;code&gt;GET session:42&lt;/code&gt; on a production Redis server to see why a user is stuck, and gets back &lt;code&gt;&amp;quot;\xac\xed\x00\x05sr\x00\x11java.util.HashMap\x05\a\xda\xc1...&amp;quot;&lt;/code&gt;. The data is all there. It&amp;rsquo;s in Java&amp;rsquo;s serialization format, behind &lt;code&gt;redis-cli&lt;/code&gt;&amp;rsquo;s escapes, and nobody reads that by eye.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://keyvaluestore.com/tools/inspect/&#34;&gt;Value Inspector&lt;/a&gt; does. Paste a value the way &lt;code&gt;redis-cli&lt;/code&gt; printed it, or as hex, base64 or plain text, and it works out the format and decodes it: JSON, MessagePack, CBOR, BSON, Protocol Buffers, PHP sessions and igbinary, Java serialization, Python pickles and Ruby Marshal, inside base64, gzip, zlib, LZ4 or Snappy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Is a Key-Value Store? Redis, Valkey, DynamoDB and etcd Explained</title>
      <link>https://keyvaluestore.com/what-is-a-key-value-store-redis-valkey-dynamodb-and-etcd-explained/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://keyvaluestore.com/what-is-a-key-value-store-redis-valkey-dynamodb-and-etcd-explained/</guid>
      <description>&lt;p&gt;A key-value store files every value under a key. You hand it a key and a value to keep, and later you hand it the key and get the value back. That&amp;rsquo;s the whole contract. Think of a coat check: you get a ticket, and the ticket is all anyone needs to find your coat. Nobody goes through the coats looking for a blue one.&lt;/p&gt;&#xA;&lt;p&gt;That simple contract is why key-value stores are fast. Finding a value by its key is a direct jump, through a hash table or a sorted tree, with no query to plan and no tables to join. It&amp;rsquo;s also why they spread so well over many machines: if every request names its key, the key alone says which machine to ask.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
