Redis Data Types Deep Dive

Redis Mastery

Lesson 3 35 min Free Preview

Redis Data Types Deep Dive

Master all Redis data types: Strings, Hashes, Lists, Sets, Sorted Sets.

Redis Data Types

Redis provides five primary data types, each optimized for different use cases. Understanding when to use each type is key to building efficient applications.

📚 Official Reference

For complete data type documentation, see redis.io/docs/data-types

1. Strings

Strings are the most basic Redis data type. They can hold any data: text, serialized JSON, or binary data up to 512MB.

# Basic operations
SET user:1:name "John Doe"
GET user:1:name              # "John Doe"

# With expiration (seconds)
SETEX session:abc123 3600 "user_data_here"

# Atomic increment
SET counter 10
INCR counter                 # 11
INCRBY counter 5             # 16

Common use cases: Caching, counters, session tokens, simple key-value storage.

2. Hashes

Hashes are maps of field-value pairs, ideal for representing objects.

# Store user object
HSET user:1 name "John" email "john@example.com" age 30

# Get single field
HGET user:1 name             # "John"

# Get all fields
HGETALL user:1               # Returns all field-value pairs

# Update single field
HSET user:1 age 31

# Increment numeric field
HINCRBY user:1 age 1         # 32

Common use cases: User profiles, configuration objects, any entity with multiple attributes.

3. Lists

Lists are ordered collections of strings, implemented as linked lists. Fast insertion at head or tail (O(1)), but slower random access (O(n)).

# Add to list (left/right)
LPUSH messages "message3"
LPUSH messages "message2"
LPUSH messages "message1"
RPUSH messages "message4"

# Get range (0 = first, -1 = last)
LRANGE messages 0 -1         # ["message1", "message2", "message3", "message4"]

# Pop from list
LPOP messages                # "message1"
RPOP messages                # "message4"

# Trim to keep only recent items
LTRIM messages 0 99          # Keep first 100 items

Common use cases: Message queues, recent activity feeds, chat history.

4. Sets

Sets are unordered collections of unique strings. Support for set operations like union, intersection, and difference.

# Add members
SADD online:users "user1" "user2" "user3"

# Check membership
SISMEMBER online:users "user1"   # 1 (true)
SISMEMBER online:users "user99"  # 0 (false)

# Get all members
SMEMBERS online:users

# Remove member
SREM online:users "user1"

# Set operations
SADD group:admins "user1" "user2"
SADD group:editors "user2" "user3"
SINTER group:admins group:editors   # ["user2"]

Common use cases: Tags, unique visitors, online users, relationships.

5. Sorted Sets

Sorted sets are like sets but each member has an associated score. Members are ordered by score.

# Add with scores
ZADD leaderboard 100 "player1"
ZADD leaderboard 250 "player2"
ZADD leaderboard 175 "player3"

# Get by rank (highest first)
ZREVRANGE leaderboard 0 2 WITHSCORES
# Returns: ["player2", 250, "player3", 175, "player1", 100]

# Get rank of member
ZREVRANK leaderboard "player2"   # 0 (first place)

# Increment score
ZINCRBY leaderboard 50 "player1" # Now 150

# Range by score
ZRANGEBYSCORE leaderboard 100 200

Common use cases: Leaderboards, priority queues, time-series data (score = timestamp).

PHP Examples with Predis

<?php
use Predis\Client;

$redis = new Client();

// Strings
$redis->set('cache:user:1', json_encode(['name' => 'John']));
$redis->setex('session:token', 3600, 'session_data');

// Hashes
$redis->hMSet('user:1', [
    'name' => 'John',
    'email' => 'john@example.com'
]);
$name = $redis->hGet('user:1', 'name');

// Lists
$redis->lPush('queue:jobs', json_encode(['task' => 'send_email']));
$job = $redis->rPop('queue:jobs');

// Sets
$redis->sAdd('tags:article:1', 'php', 'redis', 'tutorial');
$tags = $redis->sMembers('tags:article:1');

// Sorted Sets
$redis->zAdd('leaderboard', ['player1' => 100, 'player2' => 250]);
$topPlayers = $redis->zRevRange('leaderboard', 0, 9, 'WITHSCORES');

Choosing the Right Data Type

Need Use Example
Simple cache String Cached API response
Object with fields Hash User profile
Queue / recent items List Job queue, notifications
Unique collection Set Online users, tags
Ranked data Sorted Set Leaderboard, priority queue

🚀 Next: Caching Patterns

Learn how to implement effective caching strategies with Redis.