Download presentation
Presentation is loading. Please wait.
Published byAnne Andrews Modified over 9 years ago
1
Get more than a cache back! The Microsoft Azure (Redis) Cache Maarten Balliauw @maartenballiauw
2
Abstract Get more than a cache back! The Microsoft Azure (Redis) Cache 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.
3
Who am I? Maarten Balliauw Antwerp, Belgium Software Engineer, Microsoft Founder, MyGet AZUG Focus on web ASP.NET MVC, Azure, SignalR,... Former MVP Azure & ASPInsider Big passion: Azure http://blog.maartenballiauw.be @maartenballiauw Shameless self promotion: Pro NuGet - http://amzn.to/pronuget2 http://amzn.to/pronuget2
4
Agenda Azure Cache Redis Data types Transactions Pub/sub Scripting Sharding/partitioning Patterns
5
Azure Cache
6
Caching on Azure 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) A bit of history...
7
Caching on Azure 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 New ways to develop applications
8
Redis
9
“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. ”strings hasheslistssetssorted setsbitmapshyperloglogs
10
Redis 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, …) Things to remember
11
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
12
Redis 101 demo
13
The Little Redis Book http://openmymind.net/redis.pdfhttp://openmymind.net/redis.pdf By Karl Seguin
14
Data types TypeExample KeyExample value Stringcache:/home Home page Hashcategories:1Field name description numproducts Member Books Books for sale 50000 Setcategories:1:products20 11 56 89 32 4 Listproducts:20:comments[0] -> “...” [1] -> “...” [2] -> “...” Sorted setproducts:bestsellersField Eye Patch Parrot Score 84632 82120 + Bitmap, Hyperloglog
15
Data types demo
16
Data types TypeExample KeyExample value Stringcache:/home user:nextid Home page 2 Hashuser:1Field name handle Member Maarten @maartenballiauw Setuser:1:followers10 42 99 85 Listuser:1:timeline[0] -> “...” [1] -> “...” [2] -> “...” Sorted settrending:se:tagsField #sdc #redis Score 84632 82120 + Bitmap, Hyperloglog
17
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)
18
But....NET? Lots of options! http://www.redis.io/clientshttp://www.redis.io/clients NuGet: ServiceStack.Redis StackExchange.Redis RedisAspNetProviders
19
Connecting to Redis from.NET demo
20
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)
21
Azure Redis Cache demo
22
Azure Redis Cache Redis + Auth + SSL Monitoring Alerts Awesome tool: www.redsmin.comwww.redsmin.com
23
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
24
Transactions demo
25
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 http://www.redis.io/topics/notifications CONFIG SET notify-keyspace-events KEA PSUBSCRIBE '__key*__:*' (or __keyspace@0__:foo)
26
Pub/Sub demo
27
Scripting Run Lua scripts on Redis http://www.redis.io/commands/eval 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
28
Scripting demo
29
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)https://github.com/twitter/twemproxy var options = new ConfigurationOptions { EndPoints = { "my-server" }, Proxy = Proxy.Twemproxy };
30
Patterns
31
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
32
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 Avoid Redis for large objects Especially with lots of concurrent read/write operations
33
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)
34
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
35
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
36
Rate limiting API should only allows 5 requests per 60 seconds Redis List Record 5 latest requests If we’re at 5, check the leftmost item versus current time 12345 12:20:2512:20:2212:20:2112:20:1812:19:50
37
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
38
Autocompletion How to provide autocompletion over our million- records product catalog? SQL “LIKE” Lucene.NET / ElasticSearch Redis Sorted Set
39
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
40
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)
41
Conclusion
42
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.pdfhttp://openmymind.net/redis.pdf
43
Thank you! http://blog.maartenballiauw.be @maartenballiauw http://amzn.to/pronuget2
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.