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.