Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to Redis

1,503 views

Published on

Agenda:
- What is Redis?
- Features
- Persistence
- Data types
- Commands
- Publish / Subscribe
- Sort
- Transactions
- Replication
- Cluster

Published in: Technology
  • Be the first to comment

Introduction to Redis

  1. 1. Introduction to Redis Saeid Zebardast @saeidzeb zebardast.com April 2015 1
  2. 2. Agenda ● What is Redis? ● Features ● Persistence ● Data types ● Commands ● Publish / Subscribe ● Sort ● Transactions ● Replication ● Cluster 2
  3. 3. What is Redis? ● Data structure server ● In-memory Key-Value store ○ it is also persistent! ● Open source, BSD licensed 3
  4. 4. Features ● Abstract data types ● Atomic operations ● Service-side operations ● Transactions ● Pub/Sub ● Lua scripting ● TTL (Time-to-Live) ● Master-Slave asynchronous replication ● Atomic Failover 4
  5. 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. 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. 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. 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. 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. 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. 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. 12. Sets A, B, CSADD B, C, D SREM SPOP SISMEMBER B, CSINTER A, B, C, DSUNION ASDIFF D 12
  13. 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
  14. 14. Hashes ● redis-cli> HSET foo bar 1 (integer) 1 ● redis-cli> HSET foo baz 2 (integer) 1 ● redis-cli> SET foo foo foo (integer) 1 ● redis-cli> HGETALL foo 1) "bar" 2) "1" 3) "baz" 4) "1" 5) "foo” 6) "foo" ● redis-cli> HINCRBY foo bar 1 (integer) 2 ● redis-cli> HGET foo bar “2” ● redis-cli> HKEYS foo 1) "bar" 2) "baz" 3) "foo" ● redis-cli> HSCAN foo 0 MATCH *ba* 1) "0" 2) 1) "bar" 2) "3" 3) "baz" 4) "1" 14
  15. 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. 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. 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. 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. 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. 20. Where Can I Learn More? ● redis.io ● redis.io/topics/quickstart ● try.redis.io 20
  21. 21. Thank You Any Questions, Comments? Saeid Zebardast @saeidzeb zebardast.com April 2015 21

×