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