Data Structures Reference
Strings
The simplest type. Stores text, numbers, or binary data up to 512 MB.
SET user:1:name "Alice"
GET user:1:name
SET counter 0
INCR counter # 1
INCRBY counter 5 # 6
DECR counter # 5
# Expiry
SET session:abc "token123" EX 3600 # expires in 1h
SET lock:order NX EX 30 # SET if Not eXists (distributed lock)
MSET k1 v1 k2 v2 k3 v3
MGET k1 k2 k3
GETSET old_key new_value # return old, set new
SETNX key value # set if not exists
STRLEN user:1:name # length of string value
Lists
Doubly-linked list. O(1) push/pop from both ends. Use as queues or stacks.
LPUSH queue task1 task2 task3 # push to left (head)
RPUSH queue task4 # push to right (tail)
LPOP queue # pop from left
RPOP queue # pop from right
LLEN queue # length
LRANGE queue 0 -1 # get all elements
LINDEX queue 0 # element at index 0
BRPOP queue 5 # blocking pop (wait up to 5s)
BLPOP queue1 queue2 0 # blocking pop from multiple lists
# Trim to last 1000 elements
LTRIM logs 0 999
# Move between lists atomically
LMOVE src dst LEFT RIGHT
Sets & Sorted Sets
# Sets (unordered, unique members)
SADD tags python redis mongodb
SISMEMBER tags python # 1 (exists)
SMEMBERS tags
SCARD tags # count
SREM tags python
SUNION tags1 tags2 # union
SINTER tags1 tags2 # intersection
SDIFF tags1 tags2 # difference
# Sorted Sets (members + float score)
ZADD leaderboard 1500 "alice"
ZADD leaderboard 2200 "bob" 800 "carol"
ZRANGE leaderboard 0 -1 WITHSCORES REV # desc order
ZRANK leaderboard "alice" # 0-based rank
ZSCORE leaderboard "alice" # 1500
ZINCRBY leaderboard 100 "alice" # increment score
ZRANGEBYSCORE leaderboard 1000 2000 # by score range
ZREVRANK leaderboard "bob" # reverse rank
ZCOUNT leaderboard 1000 2000 # count in range
Hashes
Hash maps field-value pairs. Ideal for object storage.
HSET user:1 name "Alice" age 30 email "alice@example.com"
HGET user:1 name
HMGET user:1 name email
HGETALL user:1
HDEL user:1 age
HEXISTS user:1 name # 1
HLEN user:1 # field count
HKEYS user:1 # field names
HVALS user:1 # field values
HINCRBY user:1 age 1 # increment numeric field
Streams & HyperLogLog
# Streams (append-only log, Redis 5.0+)
XADD events * action "click" page "/home" user "u1"
XADD events 1700000000000-0 action "purchase" amount 99
XLEN events
XRANGE events - + # all entries
XRANGE events - + COUNT 10 # first 10
XREVRANGE events + - COUNT 5 # last 5
# Consumer groups (distributed processing)
XGROUP CREATE events mygroup $ MKSTREAM
XREADGROUP GROUP mygroup consumer1 COUNT 10 STREAMS events >
XACK events mygroup 1700000000000-0
# HyperLogLog (approximate unique count, โค12KB)
PFADD page_views user1 user2 user3 user1
PFCOUNT page_views # โ 3 (unique)
PFMERGE total page_views_jan page_views_feb