SlideShare uma empresa Scribd logo
1 de 196
Baixar para ler offline
Redis For The
Everyday Developer


                     Ross Tuck
                        Confoo
                 March 1st, 2013
Who Am I?
Ross Tuck
Team Lead at Ibuildings
Codemonkey
HTTP nut
Hat guy
@rosstuck
Boring.
NoSQL
NoNoSQL
Evaluation
•   Created by Salvatore Sanfilippo ( @antirez )
•   Sponsored by VMware
•   4 years old
•   redis.io
“Redis is an open source, advanced
          key-value store.”
“It is often referred to as
a data structure server...”
Defancypants
Redis




Server A           Server B
In-Memory
In-Memory
The Cool Stuff
Fast.
Demo.
Oh wait, it's already done.
120,000~ ops per sec
Flexible.
(optionally)
Persistent.
Replication
     Pub/Sub
   Transactions
     Scripting
      Slices
      Dices
Makes julienne fries
“Well, Ross, that sounds cool...”
+
MySQL       Redis
MySQL
  +
Redis
 4ever
Setup
apt-get install redis-server




                  Easy but old
http://redis.io/download
PHP Libraries

• 5.3+: Predis

• 5.2: Predis or Rediska

• C Extension: phpredis

• redis-cli
$client = new PredisClient();
The Surprise Ending
PHP
 MySQL
Memcache
PHP
 MySQL
Memcache
PHP
MySQL
Redis
It's about 80% cases.
Use Case #1: Caching
Redis has commands.
Commands have parameters.
Think functions.
$client->commandGoesHere($params, $go, $here);
SET
$client->set('ross:mood', 'nervous');




// Later
$client->get('ross:mood'); // returns “nervous”
$client->set('ross:mood', 'nervous');
$client->expire('ross:mood', 5);



// 4 seconds later...
$client->get('ross:mood'); // “nervous”

// 5 seconds later...
$client->get('ross:mood'); // null
$client->set('ross:mood', 'nervous');
$client->expire('ross:mood', 5);
$client->setex('ross:mood', 5, 'nervous');
Great for caching
Ideal for sessions
Use Case #2: Simple Data
Search...

      omg cheezburgers in the lunchroom
      today. Better hurry if u want 1!!! ^_^




How do I store this?
key   value
key                value
homepage_message   omg cheezburgers...
key                value
homepage_message   omg cheezburgers...
tps_reports        new cover pages on...
You already know it.
$client->set('home:message', 'cheezburgers...');
$client->get('home:message');
Equal
 Easier
More Fun
Use Case #3: Hit Counters
increment
$client->incr('page:42:views');   // 1
$client->incr('page:42:views');   // 2
$client->incr('page:42:views');   // 3
Redis is hard ;)
How is this better?
Fast?
redis-benchmark
====== INCR ======
  10000 requests completed in 0.08 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1


100.00% <= 0 milliseconds
119047.62 requests per second
Fast enough.
$client->incr('cookies:eaten');
$client->incrBy('cookies:eaten', 2);
$client->incrByFloat('cookies:eaten', 0.5);   version 2.6+
Use Case #4: Latest News
“It is often referred to as
a data structure server...”
“...since keys can contain strings, hashes,
         lists, sets and sorted sets.”
$redis = array();
Generic
Hash
List
Set
Sorted Set
Generic
Hash         // strings and numbers
List         $redis['ross:mood'] = "happy";
Set          $redis['foo'] = 9;

Sorted Set
Generic
Hash         // associative array
List         $redis['foo']['name'] = 'Bob';
             $redis['foo']['age'] = 31;
Set
Sorted Set
             Objects, forms, records
Generic
Hash         // not associative
List         $redis['foo'][] = 'zip';
Set          $redis['foo'][] = 'zap';

Sorted Set
             Lists, stacks, queues
Generic
             // No dupes, no order
Hash
             shuffle(
List
                  array_unique($redis['foo'])
Set          );
Sorted Set
             Relations, stats, matching
Generic
Hash         // Ordered by *score*
List         array_unique($redis['foo']);
Set
Sorted Set
             Curing cancer, world peace
             Sets but with order or scores
Y U NO STOP




LISTING THINGS
Generic
Hash
List
Set
Sorted Set
Generic
Hash
List
Set
Sorted Set
// Code
$client->lpush('news:latest', 'Aliens Attack!');



// Redis
['Aliens Attack!']
// 2 hours later...
$client->lpush('news:latest', 'Takei 2016');



// Redis
['Takei 2016', 'Aliens Attack!']
// That evening...
$client->lpush('news:latest', 'Eggs = Cancer!');



// Redis
['Eggs = Cancer!', 'Takei 2016', 'Aliens Attack!']
Recap
// Code
$client->lpush('news:latest', 'Aliens Attack!');
$client->lpush('news:latest', 'Takei 2016');
$client->lpush('news:latest', 'Eggs = Cancer!');


// Redis
['Eggs = Cancer!', 'Takei 2016', 'Aliens Attack!']
Getting it back out?
Start Index



$client->lrange('news:latest', 0, 1);




                                  En d Index
var_dump(
$client->lrange('news:latest', 0, 1)
);

array(2) {
     [0]=>   string(14) "Eggs = Cancer!"
     [1]=>   string(10) "Takei 2016"
}
That's it.
 Really.
What about size?
$client->lpush('news:latest', 'Free Jetpacks!');
$client->lpush('news:latest', 'Elvis Found!');
$client->lpush('news:latest', 'Takei Wins!');
//...and so on...
ltrim
$client->ltrim('news:latest', 0, 2);
// Only the three latest stories remain!
Cron
or simpler...
$client->lpush('news:latest', 'Cats Leave Euro');
$client->ltrim('news:latest', 0, 2);
Great option for notifications
Use Case #5: Tricksy Caching
SELECT * FROM Articles
INNER JOIN Authors ON (complicated joins)
-- More joins
WHERE (complicated logic)
LIMIT 0, 20
SELECT Articles.id FROM Articles
INNER JOIN Authors ON (complicated joins)
-- More joins
WHERE (complicated logic)
$client->lpush('search:a17f3', $ids);
$client->lrange('search:a17f3', $limit, $offset);
SELECT * FROM Articles
INNER JOIN Authors ON (complicated joins)
-- More joins
WHERE Articles.id IN (1, 2, 3)
Use Case #6: Recently Viewed
Generic
Hash
List
Set
Sorted Set
Generic
Hash
List         No duplicates
Set
Sorted Set
Generic
Hash
List
Set          Needs to be ordered
Sorted Set
Generic
Hash
List
Set
Sorted Set   Just Right
zadd
$client->zadd('mykey', 1, 'mydata');




                             Any integer
                                     t
                             or floa
$client->zadd('recent', 1, '/p/first');
$client->zadd('recent', time(), '/p/first');
$client->zadd('recent', 1338020901, '/p/first');
$client->zadd('recent', 1338020902, '/p/second');
$client->zadd('recent', 1338020903, '/p/third');
$client->zadd('recent', 1338020904, '/p/fourth');
Reading it back out?
$client->zrange('recent', 0, 2);

array(3) {
    [0]=> string(8) "/p/first"
    [1]=> string(9) "/p/second"
    [2]=> string(8) "/p/third"
}
Reverse


$client->zrevrange('recent', 0, 2);

array(3) {
    [0]=> string(9) "/p/fourth"
    [1]=> string(8) "/p/third"
    [2]=> string(9) "/p/second"
}
Duplicates?
$client->zadd('recent', 1338020901, '/p/first');


// later...
$client->zadd('recent', 1338020928, '/p/first');
$client->zrevrange('recent', 0, 2);

array(3) {
    [0]=> string(8) "/p/first"
    [1]=> string(9) "/p/fourth"
    [2]=> string(8) "/p/third"
}
Cool.
Other things we can do?
$client->zrangebyscore('recent', $low, $high);
$yesterday = time()-(60*60*24);
$client->zrangebyscore('recent', $yesterday, '+inf');
Intersections
zinterstore
$client->zinterstore('omg', 2, 'recent', 'favorite');
$client->zrange('omg', 0, 4);
Deletion
zrem
zremrangebyscore
$yesterday = time()-(60*60*24);
$client->zremrangebyscore(
     'recent', '-inf', $yesterday
);
We can do a lot.
Scores can be anything.
Use Case #7: Sharing Data
PHP




          Redis

Node.js           Python
•   ActionScript   •   Java
•   C              •   Lua
•   C#             •   Node.js
•   C++            •   Objective-C
•   Clojure        •   Perl
•   Common Lisp    •   PHP
•   Erlang         •   Pure Data
•   Fancy          •   Python
•   Go             •   Ruby
•   Haskell        •   Scala
•   haXe           •   Smalltalk
•   Io             •   Tcl
$client = new PredisClient();
$client->set('foo', 'bar');
var redis = require("redis");
var client = redis.createClient();


client.get("foo", redis.print);
Step Further...
Pub/Sub
$client->publish('bids:42', '$13.01');
client.on("message", function (channel, message) {
      console.log(channel + "= " + message);
});
client.subscribe("bids:42");

// prints “bids:42= $13.01”
yet
Not everyday
Use Case #8: Worker Queues
$client->lpush('jobs:pending', 'clear_cache');
$client->lpush('jobs:pending', '{"do":"email", …}');
$client->lpush('jobs:pending', 'job:45');
// worker
$client = new PredisClient(array(
       'read_write_timeout' => -1
));


do {
       $job = $client->brpop('jobs:pending', 0);
       doJob($job);
} while(true);
This will work.
However...
Things break.
Things break.
Clients break.
Clients break.
Clients crash.
do {
       $job = $client->brpop('jobs:pending', 0);
       doJob($job);
} while(true);
Multiple keys is the redis way.
'jobs:pending'
'jobs:working'
What we need is:   blocking
                   rpop
                   lpush
brpoplpush
                .
      No, really
do {
       $job = $client->brpoplpush(
            'jobs:pending', 'jobs:working', 0
       );


       doJob($job);
} while(true);
do {
       $job = $client->brpoplpush(
            'jobs:pending', 'jobs:working', 0
       );


       if(doJob($job)) {
            $client->lrem('jobs:working', 0, $job);
       }
} while(true);
Use Case #9: Scripted Commands
Use Case #9: Impressing People
$client->set('jesse', 'dude');
$client->set('chester', 'sweet');
Lua
var                          arguments


local first = redis.call('get', KEYS[1]);
local second = redis.call('get', KEYS[2]);


redis.call('set', KEYS[1], second);
redis.call('set', KEYS[2], first);


return {first, second};
// jesse: dude
// chester: sweet


EVAL 'local first...' 2 jesse chester


// jesse: sweet
// chester: dude
Eval != Evil

   *Offer  only applies
   in Redis-Land.
                       .
    Void where pedantic
Don't over do it.
Reusing scripts?
SCRIPT LOAD 'local first...'
// 591d1b681192f606d8cb658e1e173e771a90e60e
EVAL 'local first...' 2 jesse chester
EVALSHA 591d1... 2 jesse chester
Sweet.
Epilogue
Simple = Powerful
Fun.
Keep it in RAM.
Extensible + Ecosystem
Great docs.
Use them.
Bad for the DB?
Might be good for Redis.
Bad for the DB?
Might be good for Redis.
IAEA     Kotaku



@svdgraaf




               Alltheragefaces


                   QuickMeme
http://joind.in/7971

Mais conteúdo relacionado

Mais procurados

Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020
Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020
Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020Andrew Lavers
 
Yy
YyYy
Yyyygh
 
Nouveau document texte
Nouveau document texteNouveau document texte
Nouveau document texteSai Ef
 
Inside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseInside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseMike Dirolf
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talkLocaweb
 
Introduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genIntroduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genMongoDB
 
Indexing thousands of writes per second with redis
Indexing thousands of writes per second with redisIndexing thousands of writes per second with redis
Indexing thousands of writes per second with redispauldix
 
All Things Open 2016 -- Database Programming for Newbies
All Things Open 2016 -- Database Programming for NewbiesAll Things Open 2016 -- Database Programming for Newbies
All Things Open 2016 -- Database Programming for NewbiesDave Stokes
 

Mais procurados (16)

Nubilus Perl
Nubilus PerlNubilus Perl
Nubilus Perl
 
C99
C99C99
C99
 
Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020
Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020
Redis is not just a cache, Andrew Lavers, ConFoo Montreal 2020
 
Yy
YyYy
Yy
 
Nouveau document texte
Nouveau document texteNouveau document texte
Nouveau document texte
 
dotCloud and go
dotCloud and godotCloud and go
dotCloud and go
 
veracruz
veracruzveracruz
veracruz
 
Perl Web Client
Perl Web ClientPerl Web Client
Perl Web Client
 
Inside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source DatabaseInside MongoDB: the Internals of an Open-Source Database
Inside MongoDB: the Internals of an Open-Source Database
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talk
 
Mongo db for c# developers
Mongo db for c# developersMongo db for c# developers
Mongo db for c# developers
 
Nodejs - A quick tour (v6)
Nodejs - A quick tour (v6)Nodejs - A quick tour (v6)
Nodejs - A quick tour (v6)
 
Cod
CodCod
Cod
 
Introduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genIntroduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10gen
 
Indexing thousands of writes per second with redis
Indexing thousands of writes per second with redisIndexing thousands of writes per second with redis
Indexing thousands of writes per second with redis
 
All Things Open 2016 -- Database Programming for Newbies
All Things Open 2016 -- Database Programming for NewbiesAll Things Open 2016 -- Database Programming for Newbies
All Things Open 2016 -- Database Programming for Newbies
 

Semelhante a Redis for the Everyday Developer

The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistenceHugo Hamon
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQLOpenFest team
 
Php 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodPhp 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodJeremy Kendall
 
Redis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationRedis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationrjsmelo
 
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014Amazon Web Services
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionAdam Trachtenberg
 
Introduction to CloudForecast / YAPC::Asia 2010 Tokyo
Introduction to CloudForecast / YAPC::Asia 2010 TokyoIntroduction to CloudForecast / YAPC::Asia 2010 Tokyo
Introduction to CloudForecast / YAPC::Asia 2010 TokyoMasahiro Nagano
 
Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Masahiro Nagano
 
Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in OptimizationDavid Golden
 
Open Source Search: An Analysis
Open Source Search: An AnalysisOpen Source Search: An Analysis
Open Source Search: An AnalysisJustin Finkelstein
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency InjectionRifat Nabi
 

Semelhante a Redis for the Everyday Developer (20)

The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistence
 
Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQL
 
Php 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodPhp 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the Good
 
Redis for your boss
Redis for your bossRedis for your boss
Redis for your boss
 
Redis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationRedis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your application
 
PHP Tips & Tricks
PHP Tips & TricksPHP Tips & Tricks
PHP Tips & Tricks
 
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
(DEV305) Building Apps with the AWS SDK for PHP | AWS re:Invent 2014
 
Smelling your code
Smelling your codeSmelling your code
Smelling your code
 
Fatc
FatcFatc
Fatc
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP Extension
 
Introduction to CloudForecast / YAPC::Asia 2010 Tokyo
Introduction to CloudForecast / YAPC::Asia 2010 TokyoIntroduction to CloudForecast / YAPC::Asia 2010 Tokyo
Introduction to CloudForecast / YAPC::Asia 2010 Tokyo
 
veracruz
veracruzveracruz
veracruz
 
veracruz
veracruzveracruz
veracruz
 
veracruz
veracruzveracruz
veracruz
 
Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7
 
Adventures in Optimization
Adventures in OptimizationAdventures in Optimization
Adventures in Optimization
 
Open Source Search: An Analysis
Open Source Search: An AnalysisOpen Source Search: An Analysis
Open Source Search: An Analysis
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 

Último

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Último (20)

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

Redis for the Everyday Developer