Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Introduction to Redis

1.530 visualizaciones

Publicado el

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

Publicado en: Tecnología
  • Sé el primero en comentar

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

×