<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ruvio blog</title><link>https://ruviodb.com/blog/</link><description>Notes from building Ruvio.</description><language>en</language><item><title>Seven small scripts I no longer write</title><link>https://ruviodb.com/blog/one-command-instead-of-a-script/</link><guid>https://ruviodb.com/blog/one-command-instead-of-a-script/</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><description>Moving credit between wallets, selling the last ticket, keeping the newest timestamp. Each of these used to be a short Lua script. In Ruvio each one is a single command that either does the whole job or writes nothing.</description><category>Commands</category><category>Patterns</category></item><item><title>A lock is not enough: fencing tokens with LEASE</title><link>https://ruviodb.com/blog/fencing-tokens-with-lease/</link><guid>https://ruviodb.com/blog/fencing-tokens-with-lease/</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><description>A lock with a TTL keeps two workers apart until one of them pauses for longer than the TTL. Here is what goes wrong then, and how the token that LEASE returns lets the protected side say no.</description><category>Locks</category><category>Patterns</category></item><item><title>Delayed jobs without a scheduler</title><link>https://ruviodb.com/blog/delayed-jobs-without-a-scheduler/</link><guid>https://ruviodb.com/blog/delayed-jobs-without-a-scheduler/</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><description>Send the reminder in 30 minutes, retry the webhook in 5. Two ways to do it with nothing but Ruvio: a stream entry that stays hidden until its time, and a sorted set you drain in one call.</description><category>Queues</category></item><item><title>When a hot key expires: stopping cache stampedes with FILLGET</title><link>https://ruviodb.com/blog/cache-stampedes-fillget/</link><guid>https://ruviodb.com/blog/cache-stampedes-fillget/</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><description>A popular cache entry expires and a thousand requests hit the database at once. FILLGET decides in one round trip who rebuilds the value, who waits, and who gets the stale copy in the meantime.</description><category>Caching</category><category>Patterns</category></item><item><title>The boring parts of an ASP.NET Core API, on one server</title><link>https://ruviodb.com/blog/aspnetcore-integrations/</link><guid>https://ruviodb.com/blog/aspnetcore-integrations/</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><description>Retried POSTs that must not charge twice, per-tenant rate limits, and a cache that does not stampede. Three NuGet packages put them on Ruvio with a few lines in Program.cs.</description><category>.NET</category><category>Integrations</category></item></channel></rss>