Skip to main content

Redis Cheatsheet

Key Concepts

  • a in-memory key-value store, store and retrieve using a unique key
  • can be used as a database, cache, and/or messsage broker
  • supports numbers, strings, hashes, lists, sets, sorted sets

WHy do we need it?

  • It's an in-memory key-value data store, so it's very fast for read and write. Suitable for caching, session management, pub/sub applications, and leaderboards

Differs between traditional database?

  • in memory and key-value store (NoSQL)

What is Redis Hashes?

why is it so fast?

  • Redis keeps everything in RAM

How does it manage data?

  • data expirations (set expiration times for keys)
  • data partitioning (divide large datasets into smaller, more manageable chunks)
  • offloading to persistent storage (store less frequently accessed data on disk, snapshots or log files)
  • clustering (distribute across multiple redis instances)

what happens if data in memory grows beyond the configured memory limit?

  • data eviction
    • volatile-lru: evicts the LRU key from among the keys with an expiration set
    • allkeys-lru: evicts the LRU key from all keys
    • volatile-ttl: evicts the key with the nearest expiration time
    • allkeys-random: evicts a random key from all keys
    • volatile-random: evicts a random key from among the keys with an expiration set
    • noeviction: error when memory limit is reached
  • Disk Persistence
    • RDB (Redis Database Backup): snapshot-based persistence method. configure to take period snapshots and save them to disk in binary format
    • AOF (append-only file): this log is written to disk, allow redis to replay the log
      • can be configured to save after every command, every second, or at specific times
    • No Persistence
    • RDB and AOF can be configure to work together

In case of hardware failure or server restarts, what happens?

  • Redis can load data back into memory from disk (from most recent snapshots or append-only-files)
# List all keys
> keys *

# set a key-value
> set sName "333"
> lpush sList "item1" "item2" "item3"

# get a value
> get sName

# delete a key
> del sName


List

  • lpush: push left
  • rpush: push right
  • llen: get length
  • lrange: retreive a range from list
  • lpop: pop left
  • rpop: pop right
127.0.0.1:6379> rpush list1 item1 item2 item3 item4
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "item1"
2) "item2"
3) "item3"
4) "item4"
127.0.0.1:6379> lpush list1 item0
(integer) 5
127.0.0.1:6379> rpush list1 item5
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "item0"
2) "item1"
3) "item2"
4) "item3"
5) "item4"
6) "item5"
127.0.0.1:6379> lpop list1
"item0"
127.0.0.1:6379> rpop list1
"item5"
127.0.0.1:6379> lrange list1 0 -1
1) "item1"
2) "item2"
3) "item3"
4) "item4"

Set

  • sadd: add element
  • srem: remove an element
  • sismember: exists?
  • smembers: get all elements
127.0.0.1:6379> sadd set1 item1 item2 item3
(integer) 3
127.0.0.1:6379> smembers set1
1) "item1"
2) "item2"
3) "item3"
127.0.0.1:6379> sismember set1 item1
(integer) 1
127.0.0.1:6379> sismember set1 item0
(integer) 0

SortedSets

  • sets with scored elements, scores are used to determine order

  • zadd: add element at target index

    • adding an element at existing index overwrites
    • adding an existing element to a different index is not allowed
    • adding an element to a far end index with empty values in between will move the element front to append to end
  • zrange: get ranged elements

  • zrem: remove an element

  • use cases: Leaderboards, Time-Based Events, priority queues, geolocation, real-time analytics

127.0.0.1:6379> zadd set2 3.3 item1 3.2 item2 9 item3
(integer) 3
127.0.0.1:6379> zrange set2 0 -1
1) "item2"
2) "item1"
3) "item3"
127.0.0.1:6379> zrange set2 0 -1 withscores
1) "item2"
2) "3.2"
3) "item1"
4) "3.3"
5) "item3"
6) "9"
127.0.0.1:6379> zadd set2 3.3 item5
(integer) 1
127.0.0.1:6379> zrange set2 0 -1 withscores
1) "item2"
2) "3.2"
3) "item1"
4) "3.3"
5) "item5"
6) "3.3"
7) "item3"
8) "9"
# adding items with the same socre, items ares store lexicographcally
127.0.0.1:6379> zadd set2 3.3 item0
(integer) 1
127.0.0.1:6379> zrange set2 0 -1 withscores
 1) "item2"
 2) "3.2"
 3) "item0"
 4) "3.3"
 5) "item1"
 6) "3.3"
 7) "item5"
 8) "3.3"
 9) "item3"
10) "9"
# change score of an item
127.0.0.1:6379> zadd set2 3.9 item5
(integer) 0
127.0.0.1:6379> zrange set2 0 -1 withscores
 1) "item2"
 2) "3.2"
 3) "item0"
 4) "3.3"
 5) "item1"
 6) "3.3"
 7) "item5"
 8) "3.9"
 9) "item3"
10) "9"
# remove an element from zSet
127.0.0.1:6379> zrem set2 item5
(integer) 1
127.0.0.1:6379> zrange set2 0 -1 withscores
1) "item2"
2) "3.2"
3) "item0"
4) "3.3"
5) "item1"
6) "3.3"
7) "item3"
8) "9"