<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Chockalingam Rajendran</title>
    <description>The latest articles on Forem by Chockalingam Rajendran (@chockalingam_rajendran_e0).</description>
    <link>https://forem.com/chockalingam_rajendran_e0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3423312%2F605231a3-7aa1-4001-984f-f59e7672fae8.png</url>
      <title>Forem: Chockalingam Rajendran</title>
      <link>https://forem.com/chockalingam_rajendran_e0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/chockalingam_rajendran_e0"/>
    <language>en</language>
    <item>
      <title>Redis 8 + AI: Vector Search, Semantic Caching &amp; Streaming in Action</title>
      <dc:creator>Chockalingam Rajendran</dc:creator>
      <pubDate>Sat, 09 Aug 2025 10:08:02 +0000</pubDate>
      <link>https://forem.com/chockalingam_rajendran_e0/redis-8-ai-vector-search-semantic-caching-streaming-in-action-13on</link>
      <guid>https://forem.com/chockalingam_rajendran_e0/redis-8-ai-vector-search-semantic-caching-streaming-in-action-13on</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/redis-2025-07-23"&gt;Redis AI Challenge&lt;/a&gt;: Real-Time AI Innovators&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Real-Time AI Innovators — a compact AI showcase that uses Redis 8 as the real-time data layer to power:&lt;/p&gt;

&lt;p&gt;Vector search-driven recommendations (semantic nearest-neighbor over embeddings)&lt;/p&gt;

&lt;p&gt;Semantic caching to reduce LLM latency and cost by reusing semantically similar answers&lt;/p&gt;

&lt;p&gt;Real-time feature streaming for ML workflows with fan-out and backpressure (via Streams)&lt;/p&gt;

&lt;p&gt;The app is a responsive React/Vite UI with a Redis settings panel, ready to run against Redis 8 (e.g., Upstash/Redis Cloud) through Supabase Edge Functions for secure server-side access.&lt;/p&gt;

&lt;p&gt;Source code: GitHub – chockalingam131/redis-dev-playground&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://redis-dev-playground.lovable.app/" rel="noopener noreferrer"&gt;https://redis-dev-playground.lovable.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6brcslkd3vrffmadarvm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6brcslkd3vrffmadarvm.jpg" alt=" " width="800" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firfropq9zaxsumeznn8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firfropq9zaxsumeznn8q.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Redis 8
&lt;/h2&gt;

&lt;p&gt;I used Redis 8 as the real-time backbone across three AI use cases:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Vector Search Recommendations&lt;/strong&gt;&lt;br&gt;
Tech: Redis Vector Similarity with HNSW&lt;/p&gt;

&lt;p&gt;Data model: item: with fields title, metadata, and an embedding vector&lt;/p&gt;

&lt;p&gt;Index example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FT.CREATE idx:items ON HASH PREFIX 1 item: SCHEMA title TEXT metadata TEXT embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Query (top-k):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FT.SEARCH idx:items "*=&amp;gt;[KNN 5 @embedding $vec]" PARAMS 2 vec &amp;lt;BINARY_EMBEDDING&amp;gt; SORTBY __embedding_score DIALECT 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why Redis: millisecond KNN with metadata filters, easy scaling, and cost-efficient recommendations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic Caching for LLMs&lt;/strong&gt;&lt;br&gt;
Store JSON docs keyed by normalized prompt hash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JSON.SET cache:&amp;lt;hash&amp;gt; $ '{"prompt":"...","answer":"...","embedding":[...],"ts":1699999999}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vector index over cache embeddings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FT.CREATE idx:cache ON JSON PREFIX 1 cache: SCHEMA $.embedding AS embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE $.answer AS answer TEXT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Retrieval:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FT.SEARCH idx:cache "*=&amp;gt;[KNN 1 @embedding $vec]" PARAMS 2 vec &amp;lt;BINARY_EMBEDDING&amp;gt; SORTBY __embedding_score DIALECT 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Policy: serve from cache if similarity ≥ threshold; else call LLM, store new answer, set TTL (e.g., EXPIRE cache: 86400).&lt;/p&gt;

&lt;p&gt;Result: major latency/cost reduction on repeated or similar requests.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time Feature Streaming for ML
Producers push telemetry/features:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;XADD features * user:&amp;lt;id&amp;gt; f1:0.72 f2:0.13 label:0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consumers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;XGROUP CREATE features analytics 0 MKSTREAM
XREADGROUP GROUP analytics worker1 COUNT 100 BLOCK 2000 STREAMS features &amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Benefits: durable, ordered ingestion, horizontal fan-out, natural backpressure, and time-windowed analytics.&lt;/p&gt;

&lt;p&gt;The UI charts live data; production swaps the simulator for Redis Streams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft7vrmer29rb9ol21nvn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft7vrmer29rb9ol21nvn4.png" alt=" " width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>redischallenge</category>
      <category>devchallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
