Blazing Data with Redis S!)        By: Justin Carmony                                     LE GO                           ...
edis)About Me                      (I <3                                      R•   Director of Development    for DeseretN...
About Presentation•   We’ll ask for questions    several times during    presentation & the end.•   I will post links, sli...
by         rt e     S ta th  ts ingLe ur  eas enceM udi    A
u ta          abo em        lk obl      Ta Pr  t’sLe monC o m
in ja         N       a e    re m  u’ soYo e   A w oper      evel    D
to                 nt e                a n              W nli            e           W kO             ac ers!           Tr...
in ja                    N                  a e               re m             u’ so           Yo e              A w oper ...
“I’ll Just Add a Table     to MySQl....”
Real-Time Data
Real-Time Data         •   High Volume Writes         •   High Volume Reads         •   Low Latency / Delay         •   Gr...
Traditional Data Stores•   Examples: Databases (i.e.    MySQL, Postgre)•   Writing is Resource    Intensive•   Stored on D...
olu me                  ighV             ith H ites          s w Wr       wn s & el tdo eadM       R
Many NoSQL Solutions
Redis - Built for Speed•   Key-Value Storage•   In-Memory••••                                     nd...)                  ...
Isn’t This Just Memcached?
o!        NIsn’t This Just Memcached?
Redis - Built for Speed•   Key-Value Storage•   In-Memory•   Persistence•   Multiple Data Types•   Transactions•   Pub/Sub...
Extremely Fast...
Ludicrous Speed Fast
0+ s         ,00 rite     1 00 W        s & ond      ad ec    Re r S       PeLudicrous Speed Fast
It’s gone Plaid!
To   w isH o     R edU se
Step One:                 Install & Run•   Linux & Mac: Compile    from Source    •   No Dependencies    •   make && make ...
Running Redis•   Run: redis-server•   Can use configuration    file•   Run as a “service”:    http://redis.io/topics/    qui...
Step Two:Understand Keys
Redis Keys• Keys MUST be UNIQUE• Keys are Binary Safe Strings• Super Long Keys (i.e. 1024 bytes) are costly to  look up• C...
Step Three:Thinking Key-Value
This is not an RMDBS•   It’s All About the Keys,    Not the Values•   There is no “Querying”•   There are no “Indexes”•   ...
e nt  oc um ta!D      D a Yo ur
Step Four: Get to Know    your Data Types g Your                          in !                        ow ces              ...
Redis Strings•   Store Simple Strings•   Binary Safe•   Great for JSON•   Advanced    Commands
Data-Type “Matrix”              Sorted   Unsorted              SortedComparable               Sets               SetsStand...
Quick Variable Guide•   Hashes - Small in Size,Very    Efficient•   Lists - Awesome Queues,    Size Doesn’t Affect    Perfo...
Step Five:Learn the Commands
Learning the               Commands•   Generic Commands for    All Keys•   Commands for Each    Data Type•   Each Command ...
ive      act s  ter pleIn m  E xa
g It     tin her ut etP      gA ll To
Using Redis With PHP•   Predis    •   PHP Library    •   Easy to Use    •   Very Fast to Update        New Features•   php...
Example: Simple Caching
Simple Cache•   Data Types:    •   Strings•   Commands:    •   SETEX <key> <seconds to expire> <value>    •   GET <key>   ...
Connecting<?php// Include the Predis Autoloaderrequire predis/lib/Predis/Autoloader.php;// Register the AutoloaderPredisAu...
Simple Cache$key = cache.user:justin;$data_str = $redis->get($key);if($data_str){! $data = unserialize($data_str);}else{! ...
Example: Online Users•   Data Types:    •   Sets•   Commands:    •   SADD <key> <value>    •   SUNION <key1> <key2> <key3>...
Example: Users Online
Marking Users Online  /* Store Current User */  // Current User ID  $user_id = 1234;// Get Current Time$now = time();$min ...
Getting Online Users/* Getting Onling Users */$keys = array();// Get Current Time$now = time();$min = date("i",$now);$coun...
Example: Friends Online•   Data Types:    •   Sets•   Additional Commands:    •   SUNIONSTORE <dest> <key1> <key2> <key......
My Friends Online/* My Friends Online */$keys = array(online_users);$user_id = 1234;// Get Current Time$min = date("i",tim...
Under The Hood
Few Things About Redis• Single Threaded• Can “Shard” For More Capacity /  Performance• All Commands are Atomic• Transactio...
Persistence• Snapshots on a Configurable Schedule • Will “fork” the process and write the    DataSet to Disk• Append-Only F...
New Stuff / On The      Horizon• Lua Scripting (Kinda Querying)• Redis Clustering
aL ive        ut      bo ?    AH ow emo     D
One Redis Server
50 Servers * 8 Clients =     400 Workers
Rackspace Cloud          +Salt (saltstack.org)          +   Redis & PHP
Demo Time!
Questions?
Your HomeworkDownload & Play Around with Redis!         It’s Awesome!
More Info?http://www.justincarmony.com/redis
Flickr Credits & Images:        http://gim.ie/jsLJ
Thanks!Rate My Talk (PLEASE): https://joind.in/6486         Twitter: @JustinCarmony             IRC: carmony           #up...
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Blazing Data With Redis (and LEGOS!)
Upcoming SlideShare
Loading in...5
×

Blazing Data With Redis (and LEGOS!)

6,224

Published on

There are many fast data stores, and then there is Redis. Learn about this excellent NoSQL solution that is a powerful in-memory key-value store. Learn how to solve traditionally difficult problems with Redis, and how you can benefit from 100,000 reads/writes a second on commodity hardware. We’ll discuss how and when to use the different datatypes and commands to fit your needs. We’ll discuss the different PHP libraries with their pros and cons. We’ll then show some live examples on how to use it for a chatroom, and how Redis manages a billion data points for our dating matching system. Finally, we’ll discuss some of the upcoming features in the near future, such as clustering and scripting.

Published in: Technology
0 Comments
18 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,224
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
113
Comments
0
Likes
18
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Blazing Data With Redis (and LEGOS!)

    1. 1. Blazing Data with Redis S!) By: Justin Carmony LE GO ( and
    2. 2. edis)About Me (I <3 R• Director of Development for DeseretNews.com• CIO of CEVO• I Make (and Break) Web Stuff• Focus on Scalable, Real-time Websites & APIs
    3. 3. About Presentation• We’ll ask for questions several times during presentation & the end.• I will post links, slides, resource, etc.• Goal: Educate & Inspire you on how, when, and why to use Redis!
    4. 4. by rt e S ta th ts ingLe ur eas enceM udi A
    5. 5. u ta abo em lk obl Ta Pr t’sLe monC o m
    6. 6. in ja N a e re m u’ soYo e A w oper evel D
    7. 7. to nt e a n W nli e W kO ac ers! Tr S U BosRea s: “W l-Ti e W me ant Da ta!”
    8. 8. in ja N a e re m u’ so Yo e A w oper evel DWe Want To Know Who Is Viewing Our Site!
    9. 9. “I’ll Just Add a Table to MySQl....”
    10. 10. Real-Time Data
    11. 11. Real-Time Data • High Volume Writes • High Volume Reads • Low Latency / Delay • Grows Exponentially compared to Rest of your Data
    12. 12. Traditional Data Stores• Examples: Databases (i.e. MySQL, Postgre)• Writing is Resource Intensive• Stored on Disk (aka Slower)• Slower as Volume Grows ds...) or the rw• Challenge for Replication (i no
    13. 13. olu me ighV ith H ites s w Wr wn s & el tdo eadM R
    14. 14. Many NoSQL Solutions
    15. 15. Redis - Built for Speed• Key-Value Storage• In-Memory•••• nd...) seco ai ta (W
    16. 16. Isn’t This Just Memcached?
    17. 17. o! NIsn’t This Just Memcached?
    18. 18. Redis - Built for Speed• Key-Value Storage• In-Memory• Persistence• Multiple Data Types• Transactions• Pub/Sub w/ Blocking ast ...) it ’s F (and
    19. 19. Extremely Fast...
    20. 20. Ludicrous Speed Fast
    21. 21. 0+ s ,00 rite 1 00 W s & ond ad ec Re r S PeLudicrous Speed Fast
    22. 22. It’s gone Plaid!
    23. 23. To w isH o R edU se
    24. 24. Step One: Install & Run• Linux & Mac: Compile from Source • No Dependencies • make && make install• Windows • Download Binaries • Compile? Best of Luck
    25. 25. Running Redis• Run: redis-server• Can use configuration file• Run as a “service”: http://redis.io/topics/ quickstart• redis-cli to try out commands
    26. 26. Step Two:Understand Keys
    27. 27. Redis Keys• Keys MUST be UNIQUE• Keys are Binary Safe Strings• Super Long Keys (i.e. 1024 bytes) are costly to look up• Cryptic Short Keys (i.e. u:1000:pwd) have little performance improvement over a descriptive key (i.e. user:1000:password)
    28. 28. Step Three:Thinking Key-Value
    29. 29. This is not an RMDBS• It’s All About the Keys, Not the Values• There is no “Querying”• There are no “Indexes”• There are no “Schemas”
    30. 30. e nt oc um ta!D D a Yo ur
    31. 31. Step Four: Get to Know your Data Types g Your in ! ow ces Kn Pie L ike go Le
    32. 32. Redis Strings• Store Simple Strings• Binary Safe• Great for JSON• Advanced Commands
    33. 33. Data-Type “Matrix” Sorted Unsorted SortedComparable Sets SetsStand Alone Lists Hashes
    34. 34. Quick Variable Guide• Hashes - Small in Size,Very Efficient• Lists - Awesome Queues, Size Doesn’t Affect Performance• Sets - Great for Intersecting with others• Sorted Sets - Use to Keep “Indexes”, Sorts using Scores
    35. 35. Step Five:Learn the Commands
    36. 36. Learning the Commands• Generic Commands for All Keys• Commands for Each Data Type• Each Command has Big O Notation for Performance• Simple,Yet Powerful
    37. 37. ive act s ter pleIn m E xa
    38. 38. g It tin her ut etP gA ll To
    39. 39. Using Redis With PHP• Predis • PHP Library • Easy to Use • Very Fast to Update New Features• phpredis • PHP Extension ing • Faster, but requires Be Us compiling module e ’ll dis W Pre
    40. 40. Example: Simple Caching
    41. 41. Simple Cache• Data Types: • Strings• Commands: • SETEX <key> <seconds to expire> <value> • GET <key> • EXPIREAT <key> <timestamp>
    42. 42. Connecting<?php// Include the Predis Autoloaderrequire predis/lib/Predis/Autoloader.php;// Register the AutoloaderPredisAutoloader::register();// Create a Client with defaults$redis = new PredisClient();// Create with Connection String$redis = new PredisClient(tcp://10.0.0.1:6379);/** Our Examples Will Assume This Is Already Done **/
    43. 43. Simple Cache$key = cache.user:justin;$data_str = $redis->get($key);if($data_str){! $data = unserialize($data_str);}else{! // Really Expensive Method of Getting This Data! $data = MyDatabase::GetExpensiveData();! $redis->setex($key, 60, serialize($data));}/* Do something with the $data */
    44. 44. Example: Online Users• Data Types: • Sets• Commands: • SADD <key> <value> • SUNION <key1> <key2> <key3> <key....> • EXPIRE <key> <timestamp>
    45. 45. Example: Users Online
    46. 46. Marking Users Online /* Store Current User */ // Current User ID $user_id = 1234;// Get Current Time$now = time();$min = date("i",$now);// Generate the Key$key = "online:".$min;// Adding user to online users$redis->sadd($key, $user_id);$redis->expire($key, 60 * 10); // Expire in 10 minutes
    47. 47. Getting Online Users/* Getting Onling Users */$keys = array();// Get Current Time$now = time();$min = date("i",$now);$count = 0;$minutes_ago = 5;while($count < $minutes_ago){! $keys[] = "online:".$min;!! $count++;! $min--;! if($min < 0)! {! ! $min = 59;! }}$scmd = $redis->createCommand("sunion",$keys);$online_ids = $redis->executeCommand($scmd);
    48. 48. Example: Friends Online• Data Types: • Sets• Additional Commands: • SUNIONSTORE <dest> <key1> <key2> <key....> • SINTER <key1> <key2> <key...>
    49. 49. My Friends Online/* My Friends Online */$keys = array(online_users);$user_id = 1234;// Get Current Time$min = date("i",time());$count = 0;$minutes_ago = 5;while($count < $minutes_ago){! $keys[] = "online:".$min;! $count++;! $min--;! if($min < 0) { $min = 59; }}// SUNIONSTORE online_users online:10 online:9 online:8 online:7 online:6$scmd = $redis->createCommand("sunionstore",$keys);$redis->executeCommand($scmd);$online_friend_ids = $redis->sinter(online_users! , user:.$user_id..friend_ids);
    50. 50. Under The Hood
    51. 51. Few Things About Redis• Single Threaded• Can “Shard” For More Capacity / Performance• All Commands are Atomic• Transactions for Multiple Atomic Commands• Pipelining for High Performance
    52. 52. Persistence• Snapshots on a Configurable Schedule • Will “fork” the process and write the DataSet to Disk• Append-Only File• Will Let You Survive a “Reboot”
    53. 53. New Stuff / On The Horizon• Lua Scripting (Kinda Querying)• Redis Clustering
    54. 54. aL ive ut bo ? AH ow emo D
    55. 55. One Redis Server
    56. 56. 50 Servers * 8 Clients = 400 Workers
    57. 57. Rackspace Cloud +Salt (saltstack.org) + Redis & PHP
    58. 58. Demo Time!
    59. 59. Questions?
    60. 60. Your HomeworkDownload & Play Around with Redis! It’s Awesome!
    61. 61. More Info?http://www.justincarmony.com/redis
    62. 62. Flickr Credits & Images: http://gim.ie/jsLJ
    63. 63. Thanks!Rate My Talk (PLEASE): https://joind.in/6486 Twitter: @JustinCarmony IRC: carmony #uphpu #phpc #salt Website: http://www.justincarmony.com/blog Email: justin@justincarmony.com
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×