Set Operations: Intersection and Union in Redis
Master Redis sets to perform intersections, unions, and differences. Learn how to compare data collections efficiently for tagging and grouping logic.

Previously in this course, we explored Advanced List Manipulation to handle sequential data. While lists are perfect for ordered logs, they don't help when you need to track unique items or compare memberships across groups. This lesson introduces Redis Sets, a data type designed specifically for high-performance membership logic using set algebra.
Sets: First Principles
In mathematics, a set is an unordered collection of unique elements. Redis Sets implement this concept by ensuring every member is unique and providing commands to compute relationships between two or more sets.
Unlike lists, where checking if an item exists requires scanning the entire structure, Sets are optimized for $O(1)$ lookups. This makes them the primary choice for building features like "shared interests," "permissions overlaps," or "unique visitor tracking."
Core Operations: Union, Intersection, and Difference
To manipulate sets, we use three fundamental operations:
- Union (
SUNION): Combines all elements from multiple sets, removing duplicates. - Intersection (
SINTER): Returns only the elements present in all provided sets. - Difference (
SDIFF): Returns elements present in the first set but absent in all subsequent sets.
Worked Example: Analyzing User Interests
Imagine we are building a recommendation engine for our API project. We want to find common interests between two users to suggest new content.
First, let's add members to our sets:
Bash# User 1 interests SADD user:1:interests "coding" "gaming" "hiking" # User 2 interests SADD user:2:interests "coding" "reading" "hiking"
Now, let's perform our set operations:
1. Finding common interests (Intersection)
BashSINTER user:1:interests user:2:interests # Result: 1) "coding" 2) "hiking"
2. Finding all unique interests (Union)
BashSUNION user:1:interests user:2:interests # Result: 1) "coding" 2) "gaming" 3) "hiking" 4) "reading"
3. Finding what User 1 likes that User 2 doesn't (Difference)
BashSDIFF user:1:interests user:2:interests # Result: 1) "gaming"
Hands-on Exercise
In our ongoing API project, we need to track user roles for access control. Create two sets: roles:admin and roles:editor. Add "dashboard_access" and "report_export" to the admin set, and only "dashboard_access" to the editor set.
- Use
SINTERto verify which permissions are shared between both roles. - Use
SDIFFonroles:adminandroles:editorto identify which permissions are exclusive to administrators.
Common Pitfalls
- Assuming Order: Sets are inherently unordered. If your application logic relies on the sequence in which items were added, you should look at Sorted Sets, which we will cover later in this course.
- Memory Footprint: While sets are efficient, they consume more memory than simple strings. Avoid creating millions of tiny sets if you can aggregate them into a single structure or use a Hash.
- Blocking Operations: Like all Redis commands,
SINTERandSUNIONexecute in the main thread. If you are performing these operations on massive sets (millions of members), you may block the server. For large-scale data, consider usingSINTERSTOREto save the results to a new key asynchronously or perform the operation on a replica.
FAQ
Q: Can I store duplicate values in a Redis Set?
A: No. By definition, a set contains only unique members. If you try to SADD an existing member, Redis simply ignores the request.
Q: Is there a limit to how many sets I can intersect?
A: You can provide as many keys as you want to SINTER or SUNION. However, keep in mind that performance scales linearly with the number of sets and their total cardinality.
Q: How does this differ from the logic in Advanced Filtering Operators? A: While SQL handles filtering via query-time scanning of rows, Redis Set operations are pre-computed structures. This allows for near-instant response times, regardless of the size of your overall dataset.
Recap
Redis Sets provide a powerful, high-performance way to manage unique collections. By mastering SUNION, SINTER, and SDIFF, you can perform complex data comparisons directly in-memory, which is critical for building features like recommendation engines, access control lists, and tracking unique activity.
Up next: Tracking Unique API Visitors (using SCARD and SADD).
Work with me

AI Automation & Agentic Workflow Development
Automate the repetitive work eating your time — content pipelines, data workflows, and agentic AI tasks that run themselves.

FilamentPHP Admin Panel & Dashboard Development
A powerful admin panel for your Laravel app — built with FilamentPHP so you can manage everything without touching the database.


