<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="https://umn0mtkzgkj46tygt32g.julianrbryant.com/2005/Atom">
  <channel>
    <title>Redis modules API on Docs</title>
    <link>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/</link>
    <description>Recent content in Redis modules API on Docs</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Modules API reference</title>
      <link>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/modules-api-ref/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/modules-api-ref/</guid>
      <description>&lt;!-- This file is generated from module.c using&#xA;     redis/redis:utils/generate-module-api-doc.rb --&gt;&#xA;&lt;h2 id=&#34;sections&#34; class=&#34;group relative&#34;&gt;&#xA;  Sections&#xA;  &lt;a href=&#34;#sections&#34; class=&#34;header-link opacity-0 group-hover:opacity-100 transition-opacity duration-200 ml-1 align-baseline&#34; aria-label=&#34;Link to this section&#34; title=&#34;Copy link to clipboard&#34;&gt;&#xA;    &lt;svg class=&#34;inline-block w-4 h-4 align-baseline&#34; fill=&#34;currentColor&#34; viewBox=&#34;0 0 20 20&#34; xmlns=&#34;https://umn0mtkzgkj46tygt32g.julianrbryant.com/2000/svg&#34;&gt;&#xA;      &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M12.586 4.586a2 2 0 112.828 2.828l-3 3a2 2 0 01-2.828 0 1 1 0 00-1.414 1.414 4 4 0 005.656 0l3-3a4 4 0 00-5.656-5.656l-1.5 1.5a1 1 0 101.414 1.414l1.5-1.5zm-5 5a2 2 0 012.828 0 1 1 0 101.414-1.414 4 4 0 00-5.656 0l-3 3a4 4 0 105.656 5.656l1.5-1.5a1 1 0 10-1.414-1.414l-1.5 1.5a2 2 0 11-2.828-2.828l3-3z&#34; clip-rule=&#34;evenodd&#34;&gt;&lt;/path&gt;&#xA;    &lt;/svg&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-heap-allocation-raw-functions&#34;&gt;Heap allocation raw functions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-commands-api&#34;&gt;Commands API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-module-information-and-time-measurement&#34;&gt;Module information and time measurement&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-automatic-memory-management-for-modules&#34;&gt;Automatic memory management for modules&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-string-objects-apis&#34;&gt;String objects APIs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-reply-apis&#34;&gt;Reply APIs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-commands-replication-api&#34;&gt;Commands replication API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-db-and-key-apis-generic-api&#34;&gt;DB and Key APIs – Generic API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-api-for-string-type&#34;&gt;Key API for String type&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-api-for-list-type&#34;&gt;Key API for List type&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-api-for-sorted-set-type&#34;&gt;Key API for Sorted Set type&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-api-for-sorted-set-iterator&#34;&gt;Key API for Sorted Set iterator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-api-for-hash-type&#34;&gt;Key API for Hash type&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-api-for-stream-type&#34;&gt;Key API for Stream type&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-calling-redis-commands-from-modules&#34;&gt;Calling Redis commands from modules&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-data-types&#34;&gt;Modules data types&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-rdb-loading-and-saving-functions&#34;&gt;RDB loading and saving functions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-digest-api-debug-digest-interface-for-modules-types&#34;&gt;Key digest API (DEBUG DIGEST interface for modules types)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-aof-api-for-modules-data-types&#34;&gt;AOF API for modules data types&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-io-context-handling&#34;&gt;IO context handling&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-logging&#34;&gt;Logging&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-blocking-clients-from-modules&#34;&gt;Blocking clients from modules&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-thread-safe-contexts&#34;&gt;Thread Safe Contexts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-module-keyspace-notifications-api&#34;&gt;Module Keyspace Notifications API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-cluster-api&#34;&gt;Modules Cluster API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-timers-api&#34;&gt;Modules Timers API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-eventloop-api&#34;&gt;Modules EventLoop API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-acl-api&#34;&gt;Modules ACL API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-dictionary-api&#34;&gt;Modules Dictionary API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-info-fields&#34;&gt;Modules Info fields&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-utility-apis&#34;&gt;Modules utility APIs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-modules-api-exporting-importing&#34;&gt;Modules API exporting / importing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-module-command-filter-api&#34;&gt;Module Command Filter API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-scanning-keyspace-and-hashes&#34;&gt;Scanning keyspace and hashes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-module-fork-api&#34;&gt;Module fork API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-server-hooks-implementation&#34;&gt;Server hooks implementation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-module-configurations-api&#34;&gt;Module Configurations API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-rdb-load-save-api&#34;&gt;RDB load/save API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-config-access-api&#34;&gt;Config access API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-key-eviction-api&#34;&gt;Key eviction API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-miscellaneous-apis&#34;&gt;Miscellaneous APIs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-defrag-api&#34;&gt;Defrag API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#section-function-index&#34;&gt;Function index&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;span id=&#34;section-heap-allocation-raw-functions&#34;&gt;&lt;/span&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redis modules and blocking commands</title>
      <link>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/modules-blocking-ops/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/modules-blocking-ops/</guid>
      <description>&lt;p&gt;Redis has a few blocking commands among the built-in set of commands.&#xA;One of the most used is &lt;a href=&#34;https://un5pn9hmggug.julianrbryant.com/docs/latest/commands/blpop/&#34;&gt;&lt;code&gt;BLPOP&lt;/code&gt;&lt;/a&gt; (or the symmetric &lt;a href=&#34;https://un5pn9hmggug.julianrbryant.com/docs/latest/commands/brpop/&#34;&gt;&lt;code&gt;BRPOP&lt;/code&gt;&lt;/a&gt;) which blocks&#xA;waiting for elements arriving in a list.&lt;/p&gt;&#xA;&lt;p&gt;The interesting fact about blocking commands is that they do not block&#xA;the whole server, but just the client calling them. Usually the reason to&#xA;block is that we expect some external event to happen: this can be&#xA;some change in the Redis data structures like in the &lt;a href=&#34;https://un5pn9hmggug.julianrbryant.com/docs/latest/commands/blpop/&#34;&gt;&lt;code&gt;BLPOP&lt;/code&gt;&lt;/a&gt; case, a&#xA;long computation happening in a thread, to receive some data from the&#xA;network, and so forth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modules API for native types</title>
      <link>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/modules-native-types/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://un5pn9hmggug.julianrbryant.com/docs/latest/develop/reference/modules/modules-native-types/</guid>
      <description>&lt;p&gt;Redis modules can access Redis built-in data structures both at high level,&#xA;by calling Redis commands, and at low level, by manipulating the data structures&#xA;directly.&lt;/p&gt;&#xA;&lt;p&gt;By using these capabilities in order to build new abstractions on top of existing&#xA;Redis data structures, or by using strings DMA in order to encode modules&#xA;data structures into Redis strings, it is possible to create modules that&#xA;&lt;em&gt;feel like&lt;/em&gt; they are exporting new data types. However, for more complex&#xA;problems, this is not enough, and the implementation of new data structures&#xA;inside the module is needed.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
