5. Persistence
● Can be optionally disabled
● RDB file
○ Synchronized to disk (eventually or immediately)
○ Use SAVE or BGSAVE command to create a snapshot manually.
● Data is dumped or written as a append-only change-log (AOF)
● AOF mode supports transactional disk write
● Default config:
○ Save after 900 sec (15 min) if at least 1 key changed.
○ Save after 300 sec (5 min) if at least 10 keys changed.
○ Save after 60 sec if at least 10000 keys changed.
5
6. Data Types
● String (binary safe)
● Lists (linked lists)
● Sets
● Sorted sets (with scores)
● Hashes (<String, String>)
● Bitmaps (Bit arrays)
Note: The type of a value determines what operations (called commands) are available for the value itself.
6
7. Redis keys
● Binary safe
● Empty string is valid key
● Very long key is a bad idea
● Very short key is [often] a bad idea
○ u1000flw
● Stick with a schema
○ user:1000:followers
● Max allowed key size is 512 MB.
7
8. Basic commands
● SET key value [EX seconds] [PX milliseconds] [NX|XX]
○ MSET key value [key value ….]
● GET key
○ MGET key [key ….]
● INCR/DECR key
● INCRBY/DECRBY key increment
● DEL key
● EXISTS key
● EXPIRE key seconds
● TTL/PTTL key
● TYPE key
● MONITOR
● HELP command
8
9. Atomic Operations
● GETSET key value
○ Puts a new value, retrieving old one.
● SETNX key value
○ Sets a value only if it does not exist.
9
10. Strings
● Simplest type of value in Redis
● redis-cli> SET mykey value
OK
● redis-cli> GET mykey
“value”
● redis-cli> SET foo 110
OK
● redis-cli> INCR bar
(integer) 1
● redis-cli> INCRBY foo 50
(integer) 160
● Max allowed value size is 512 MB.
10
11. ● Implemented by Linked List
● Push and pop at both sides
● BLPOP: Blocking POP
LPOP
BLPOP
Lists
A B C D
LPUSH RPUSH
RPOP
BRPOP
LRANGE
LINDEX
LSET
LREM
...
11
12. Sets
A, B, CSADD
B, C, D
SREM
SPOP
SISMEMBER
B, CSINTER
A, B, C, DSUNION
ASDIFF D
12
13. ● Same as sets, but with score per element
Sorted Sets
foo | 12.1 bar | 14.3 baz | 17.87 qux | 30.9876
ZADD key score memeber [score memeber
...]
ZRANGE key start stop [withscores]
ZREVRANGE key start stop [WITHSCORES]
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset
count]
ZSCORE key member
ZRANK key member
13
15. Publish / Subscribe (PubSub)
● Clients can subscribe to channels or patterns.
● Subscribing is O(1), Posting message is O(N)
● Chats, Comet Apps, Real time analytics and etc.
On Client 1:
redis-cli> subscribe feed:foo feed:bar feed:baz
Reading messages...
On Client 2:
redis-cli> publish feed:foo “hello world!”
(integer) 1
On Client 1:
Reading messages...
1) "message"
2) "feed:foo"
3) "hello world!"
15
16. Sort
● SORT key
○ [BY pattern]
○ [LIMIT offset count]
○ [GET pattern [GET pattern ...]]
○ [ASC|DESC]
○ [ALPHA]
○ [STORE destination]
● By default, sorting is numeric and elements compared as double.
● Use the ALPHA modifier to sort string list lexicographically (UTF-8 aware).
● Result can be stored as a list.
16
17. Transactions
● MULTI, [commands], EXEC
● All commands are executed after EXEC.
● redis-cli> MULTI
OK
● redis-cli> SET foo bar
QUEUED
● redis-cli> INCRBY num 1
QUEUED
● redis-cli> EXEC
1) OK
2) (integer) 1
● DISCARD for discarding a transaction
● WATCH for locking keys
17
18. Replication
● Asynchronous, Non-Blocking Replication
● Turn on persistence in the Master or avoid restarting automatically.
● 64GB of memory i.e., Only 64GB of data
18
Redis Master Server
Redis Slave ServerRedis Slave ServerRedis Slave Server
19. Cluster
● Version 3.0 or higher. (Current stable version is 2.8)
● Automatically split your dataset among multiple nodes.
● Continue operations when a subset of the nodes are experiencing failures.
● 10 clustered computers with each 64GB of RAM, store 640GB of data.
19
20. Where Can I Learn More?
● redis.io
● redis.io/topics/quickstart
● try.redis.io
20