Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Get more than a cache back! 
The Microsoft Azure (Redis) Cache 
Maarten Balliauw 
@maartenballiauw
Thank you CloudBurst sponsors!
Talk Like a Parrot Day 
http://www.howpilgrim.com/how-talk-like-parrot-day.htm 
September 20th
Who am I? 
Maarten Balliauw 
Antwerp, Belgium 
Developer Advocate, JetBrains 
Founder, MyGet 
AZUG 
Focus on web 
ASP.NET ...
Agenda 
Azure Cache 
Redis 
Data types 
Transactions 
Pub/sub 
Scripting 
Sharding/partitioning 
Patterns
Azure Cache
Caching on Azure 
A bit of history... 
Windows Server: AppFabric (“Velocity”) (2009- 
2010) 
Azure 
(ASP.NET cache) 
“Shar...
Caching on Azure 
New ways to develop applications 
1920: Cache used to be a cache 
2012: Cache became the go-to datastore...
Redis
Redis 
“Redis is an open source, BSD licensed, 
networked, single-threaded, in-memory 
key-value cache and store. It is of...
Redis 
Things to remember 
Key-value cache and store (value can be a couple of 
things) 
In-memory (no persistence, but yo...
So no persistence? 
Possible using a lot of I/O 
AOF (append-only files) 
RDB (Redis DB snapshots) 
With or without: all y...
Redis 101 
demo
The Little Redis Book 
By Karl Seguin 
http://openmymind.net/redis.pdf
Data types 
Type Example Key Example value 
String cache:/home <html><head><title>Home page</title> 
Hash categories:1 Fie...
Data types 
demo
Data types 
Type Example Key Example value 
String cache:/home 
user:nextid 
<html><head><title>Home page</title> 
2 
Hash...
Keys 
Good practice: use a pattern for keys 
E.g. users:1:maarten 
Get by id: 
KEYS users:1:* 
GET ...... 
Get by name: 
K...
But... .NET? 
Lots of options! http://www.redis.io/clients 
NuGet: 
ServiceStack.Redis 
StackExchange.Redis 
RedisAspNetPr...
Connecting to Redis 
from .NET 
demo
But... Azure? 
“It’s just Redis!” 
Main differences: auth mechanism and SSL 
support 
Use local for development from GitHu...
Azure Redis Cache 
demo
Azure Redis Cache 
Redis + Auth + SSL 
Monitoring 
Alerts 
Awesome tool: www.redsmin.com
Transactions 
MULTI, EXEC, DISCARD, WATCH 
No rollbacks (just discard queue) 
Failures are because of you, not Redis 
Opti...
Transactions 
demo
Pub/Sub 
(P)SUBSCRIBE, UNSUBSCRIBE, PUBLISH 
Subscribe to a queue 
SUBSCRIBE news (or PSUBSCRIBE news:*) 
Send data to a q...
Pub/Sub 
demo
Scripting 
Run Lua scripts on Redis 
http://www.redis.io/commands/eval 
EVAL ‘return “Hello, World!”’ 0 
Scripts are cache...
Scripting 
demo
What if I need more memory? 
Sharding! 
On client (consistent hashing) 
On server (Redis Cluster, not on Azure) 
Using a p...
Patterns
When can I use Redis? 
ASP.NET Output Caching (RedisAspNetProviders) 
ASP.NET Session State 
General-purpose cache 
Table ...
When should I avoid Redis? 
More data than can fit in RAM 
Can use multiple, but even then: SUM(RAM) == max. data size 
Da...
Counting stuff 
How would you count “likes” if you were 
Facebook? 
Table Storage 
1 entity per likeable entity + per serv...
Counting stuff (2) 
How would you count “likes” if you were 
Facebook? 
And how would you get the 5 most popular 
posts? 
...
Get the latest 5 product reviews 
No need to go to the database 
Use a Redis List, truncated at 5 items 
Need more? Query ...
Rate limiting 
API should only allows 5 requests per 60 seconds 
Redis List 
1 2 3 4 5 
12:20:25 12:20:22 12:20:21 12:20:1...
What’sUp? 
Sending short messages between parties, how to 
implement? 
Pub/Sub: 
Every user gets a subscription, others ca...
Autocompletion 
How to provide autocompletion over our million-records 
product catalog? 
SQL “LIKE” 
Lucene.NET / Elastic...
Intersecting collections 
“Which friends do we have in common?” 
Algorithm could be: 
Find friends that we have in common ...
Sort 
We have a series of bugs 
Priority, Status, Title, ... 
A user follows a few of these bugs 
How to store? 
How to qu...
Conclusion
Conclusion 
Azure Cache 
Redis is not just a cache 
Data types 
Transactions 
Pub/sub 
Scripting 
Sharding/partitioning 
P...
Thank you! 
http://blog.maartenballiauw.be 
@maartenballiauw 
http://amzn.to/pronuget2
Get more than a cache back! The Microsoft Azure (Redis) Cache - CloudBurst 2014
Get more than a cache back! The Microsoft Azure (Redis) Cache - CloudBurst 2014
Nächste SlideShare
Wird geladen in …5
×

Get more than a cache back! The Microsoft Azure (Redis) Cache - CloudBurst 2014

3.176 Aufrufe

Veröffentlicht am

The Microsoft Azure Redis Cache must be the fourth or fifth generation of a hosted cache service on Azure. This time, an open-source solution has been embraced: Redis. In this session, we’ll see that it’s more than just an in-memory cache system we can use in our applications. Let’s explore what Redis is, what the different data types are and why we should care. And once we grasp how Redis stores its stuff, we’ll delve into how we can use it to its fullest extent: searching the key-value store, transactions, pub/sub support and scripting.

  • Als Erste(r) kommentieren

Get more than a cache back! The Microsoft Azure (Redis) Cache - CloudBurst 2014

  1. 1. Get more than a cache back! The Microsoft Azure (Redis) Cache Maarten Balliauw @maartenballiauw
  2. 2. Thank you CloudBurst sponsors!
  3. 3. Talk Like a Parrot Day http://www.howpilgrim.com/how-talk-like-parrot-day.htm September 20th
  4. 4. Who am I? Maarten Balliauw Antwerp, Belgium Developer Advocate, JetBrains Founder, MyGet AZUG Focus on web ASP.NET MVC, Azure, SignalR, ... MVP Azure & ASPInsider Big passion: Azure http://blog.maartenballiauw.be @maartenballiauw Shameless self promotion: Pro NuGet - http://amzn.to/pronuget2
  5. 5. Agenda Azure Cache Redis Data types Transactions Pub/sub Scripting Sharding/partitioning Patterns
  6. 6. Azure Cache
  7. 7. Caching on Azure A bit of history... Windows Server: AppFabric (“Velocity”) (2009- 2010) Azure (ASP.NET cache) “Shared Cache” (AppFabric cache, multi-tenant) Self-Hosted Dedicated Cache Managed Cache (the above, but managed by Microsoft and with an SLA)
  8. 8. Caching on Azure New ways to develop applications 1920: Cache used to be a cache 2012: Cache became the go-to datastore Twitter stores 800 tweets / timeline in Redis New application types on Azure: PHP, Node, Java, ... Too much work to write AppFabric clients for all! http://www.redis.io/clients Way easier: just make it work on Windows and Azure
  9. 9. Redis
  10. 10. Redis “Redis is an open source, BSD licensed, networked, single-threaded, in-memory key-value cache and store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets, sorted sets, bitmaps and hyperloglogs.”
  11. 11. Redis Things to remember Key-value cache and store (value can be a couple of things) In-memory (no persistence, but you can) Single-threaded (atomic operations & transactions) Networked (it’s a server and it does master/slave) Some other stuff (scripting, pub/sub, Sentinel, snapshot, …)
  12. 12. So no persistence? Possible using a lot of I/O AOF (append-only files) RDB (Redis DB snapshots) With or without: all your data must fit in memory
  13. 13. Redis 101 demo
  14. 14. The Little Redis Book By Karl Seguin http://openmymind.net/redis.pdf
  15. 15. Data types Type Example Key Example value String cache:/home <html><head><title>Home page</title> Hash categories:1 Field name description numproducts Member Books Books for sale 50000 Set categories:1:products 20 11 56 89 32 4 List products:20:comments [0] -> “...” [1] -> “...” [2] -> “...” Sorted set products:bestsellers Field Eye Patch Parrot Score 84632 82120 + Bitmap, Hyperloglog
  16. 16. Data types demo
  17. 17. Data types Type Example Key Example value String cache:/home user:nextid <html><head><title>Home page</title> 2 Hash user:1 Field name handle Member Maarten @maartenballiauw Set user:1:followers 10 42 99 85 List user:1:timeline [0] -> “...” [1] -> “...” [2] -> “...” Sorted set trending:se:tags Field #cloudburst #pirate Score 84632 82120 + Bitmap, Hyperloglog
  18. 18. Keys Good practice: use a pattern for keys E.g. users:1:maarten Get by id: KEYS users:1:* GET ...... Get by name: KEYS users:*:maarten GET ...... O(N) operation – use with caution! (SCAN)
  19. 19. But... .NET? Lots of options! http://www.redis.io/clients NuGet: ServiceStack.Redis StackExchange.Redis RedisAspNetProviders
  20. 20. Connecting to Redis from .NET demo
  21. 21. But... Azure? “It’s just Redis!” Main differences: auth mechanism and SSL support Use local for development from GitHub or NuGet (Redis-32 or Redis-64)
  22. 22. Azure Redis Cache demo
  23. 23. Azure Redis Cache Redis + Auth + SSL Monitoring Alerts Awesome tool: www.redsmin.com
  24. 24. Transactions MULTI, EXEC, DISCARD, WATCH No rollbacks (just discard queue) Failures are because of you, not Redis Optimistic locking with WATCH Only execute transaction queue if watched keys did not change
  25. 25. Transactions demo
  26. 26. Pub/Sub (P)SUBSCRIBE, UNSUBSCRIBE, PUBLISH Subscribe to a queue SUBSCRIBE news (or PSUBSCRIBE news:*) Send data to a queue PUBLISH news “This just in!” (optional) Keyspace notifications http://www.redis.io/topics/notifications CONFIG SET notify-keyspace-events KEA PSUBSCRIBE '__key*__:*' (or __keyspace@0__:foo)
  27. 27. Pub/Sub demo
  28. 28. Scripting Run Lua scripts on Redis http://www.redis.io/commands/eval EVAL ‘return “Hello, World!”’ 0 Scripts are cached (SCRIPT FLUSH) Scripts can be used as functions Although we must pass the body all the time (or use SCRIPT LOAD + EVALSHA) Helper functions available! Base, table, string, math, debug, struct, cjson, cmsgpack, redis.sha1hex
  29. 29. Scripting demo
  30. 30. What if I need more memory? Sharding! On client (consistent hashing) On server (Redis Cluster, not on Azure) Using a proxy (Twemproxy - https://github.com/twitter/twemproxy) var options = new ConfigurationOptions { EndPoints = { "my-server" }, Proxy = Proxy.Twemproxy };
  31. 31. Patterns
  32. 32. When can I use Redis? ASP.NET Output Caching (RedisAspNetProviders) ASP.NET Session State General-purpose cache Table Storage secondary index “Cache with benefits” Pub/sub Generally: when use case maps and data fits in RAM
  33. 33. When should I avoid Redis? More data than can fit in RAM Can use multiple, but even then: SUM(RAM) == max. data size Data and query model fits well in a relational model Materialize certain queries in Redis if needed
  34. 34. Counting stuff How would you count “likes” if you were Facebook? Table Storage 1 entity per likeable entity + per server instance for writes, sum entities for read I/O and CPU time... SQL UPDATE ... Locking... Redis INCR post:12345 (Every once in a while, check keys to persist)
  35. 35. Counting stuff (2) How would you count “likes” if you were Facebook? And how would you get the 5 most popular posts? Use a sorted set Elements are scored (= # of likes) We can use ZREVRANGE to get the top X posts ZREVRANGE posts:likes 0 5 withscores
  36. 36. Get the latest 5 product reviews No need to go to the database Use a Redis List, truncated at 5 items Need more? Query the database
  37. 37. Rate limiting API should only allows 5 requests per 60 seconds Redis List 1 2 3 4 5 12:20:25 12:20:22 12:20:21 12:20:18 12:19:50 Record 5 latest requests If we’re at 5, check the leftmost item versus current time
  38. 38. What’sUp? Sending short messages between parties, how to implement? Pub/Sub: Every user gets a subscription, others can end to that subscription Server listens on all subscriptions to archive/persist messages When user comes online, server can publish messages since last visit from archive/a Redis list
  39. 39. Autocompletion How to provide autocompletion over our million-records product catalog? SQL “LIKE” Lucene.NET / ElasticSearch Redis Sorted Set
  40. 40. Intersecting collections “Which friends do we have in common?” Algorithm could be: Find friends that we have in common Find friends they have in common Score the # of connections
  41. 41. Sort We have a series of bugs Priority, Status, Title, ... A user follows a few of these bugs How to store? How to query? (give me my top 5 bugs by priority)
  42. 42. Conclusion
  43. 43. Conclusion Azure Cache Redis is not just a cache Data types Transactions Pub/sub Scripting Sharding/partitioning Patterns 1 thing to remember: http://openmymind.net/redis.pdf
  44. 44. Thank you! http://blog.maartenballiauw.be @maartenballiauw http://amzn.to/pronuget2

×