SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Fabrizio Farinacci
!!!!i!
i iiiiii i iii iii
i i i i sssss
1
1. What is Redis?
REmote DIctionary Server
2
“ is an in-memory data
structure store, that
can be served as a
database, cache or
message broker
(Pub/Sub).
3
?!?i?
eii!i?!i?ei!
4
… a ‘‘data structure server’’?
Redis is essentially a key-value database… but it’s NOT
a plain key-value database: it’s not limited to string values,
but can also hold complex data structures.
5
2. Supported Data Types
6
Strings
Command line:
> set mystr foo
OK
> set myint 1
OK
> get mystr
"foo"
> append mystr foo
(integer) 6
> incr myint
(integer) 2
> mget mystr myint
1) "foofoo"
2) "2"
Are key-value pairs, to store strings or integers, with:
□Common operations on strings (APPEND, STRLEN, exc.);
□Atomic increment/decrement (INCR/DECR) on integers;
□Get multiple values at once (MGET).
Python:
>>> import redis
>>> r = redis.StrictRedis(
host='localhost',
port=6379, db=0
)
>>> r.set('mystr', 'foo')
True
>>> r.set('myint', 1)
True
>>> r.get('mystr')
'foo'
>>> r.append('mystr', 'foo')
6L
>>> r.incr('myint')
2
>>> r.mget('mystr', 'myint')
['foofoo', '2']
7
Lists
Are linked-lists of strings:
□Index-based access to the entries;
□Insertion and deletion at head/tail,
in constant-time (push/pop);
□Trim/Range operations available.
8
Interacting
with Lists
Command line:
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 ‐1
1) "first"
2) "A"
3) "B"
> lrange mylist 1 3
1) "A"
2) "B"
Python:
>>> import redis
>>> r = redis.StrictRedis(
host='localhost',
port=6379, db=0
)
>>> r.rpush('mylist', 'A')
1L
>>> r.rpush('mylist', 'B')
2L
>>> r.lpush('mylist', 'first')
3L
>>> r.lrange('mylist', 0, ‐1)
['first', 'A', 'B']
>>> r.lrange('mylist', 1, 3)
['A', 'B']
9
Sets
Are sets of strings:
□Unordered collection of non-
repeating elements;
□Intersection/Union/Difference
between multiple sets;
□Membership test available.
10
Interacting
with Sets
Command line:
> sadd myset A
(integer) 1
> sadd myset B
(integer) 1
> sadd myset2 C
(integer) 1
> sismember myset C
(integer) 0
> smembers myset
1) "A"
2) "B"
> sunion myset myset2
1) "A"
2) "B"
3) "C"
Python:
>>> import redis
>>> r = redis.StrictRedis(
host='localhost',
port=6379, db=0
)
>>> r.sadd('myset', 'A')
1
>>> r.sadd('myset', 'B')
1
>>> r.sadd('myset2', 'C')
1
>>> r.sismember('myset', 'C')
False
>>> r.smembers('myset')
set(['A', 'B']) 
>>> r.sunion('myset', 'myset2')
set(['A', 'C', 'B'])
11
Sorted Set
(ZSET)
12
Are sorted sets of strings:
□Collection of non-repeating elements
sorted by floating-point numbers
(the score) and lexicographically;
□Range operations on score/lexicon;
□Intersection/Union between sets.
Interacting
with ZSETs
Command line:
> zadd myzset 2 C
(integer) 1
> zadd myzset 3 D
(integer) 1
> zadd myzset 1 A
(integer) 1
> zadd myzset 2 B
(integer) 1
> zrange myzset 0 ‐1
1) "A" 2) "B" 3) "C" 4) "D"
> zrangebyscore myzset 1 2
1) "A" 2) "B" 3) "C"
> zrangebylex myzset (A [D 
1) "B" 2) "C" 3) "D"
Python:
>>> import redis
>>> r = redis.StrictRedis(
host='localhost',
port=6379, db=0
)
>>> r.zadd('myzset', 2, 'C')
1
>>> r.zadd('myzset', 3, 'D') 
1
>>> r.zadd('myzset', A=1) 
1
>>> r.zadd('myzset', B=2) 
1
>>> r.zrange('myzset', 0, ‐1) 
['A', 'B', 'C', 'D']
>>> r.zrangebyscore('myzset', 1, 2) 
['A', 'B', 'C'] 
>>> r.zrangebylex('myzset', '(A', '[D') 
['B', 'C', 'D']
13
Hash
A map of field-value pairs:
□Key-based access, specifying
selected field or fields;
□To implement objects, specifying
the name of the field and its value.
14
Interacting
with Hashes
Command line:
> hset myhash key1 A
(integer) 1
> hmset myhash key2 B key3 C
OK
> hget myhash key2
"B"
> hmget myhash key1 key3
1) "A"
2) "C"
> hgetall myhash
1) "key1"
2) "A"
3) "key2"
4) "B"
5) "key3"
6) "C"
Python:
>>> import redis
>>> r = redis.StrictRedis(
host='localhost',
port=6379, db=0
)
>>> r.hset('myhash', 'key1', 'A') 
1L
>>> r.hmset('myhash',
{'key2':'B', 'key3':'C'}
) 
True
>>> r.hget('myhash', 'key2')
'B'
>>> r.hmget('myhash', 'key1', 'key3') 
['A', 'C']
>>> r.hgetall('myhash')
{'key3': 'C', 'key2': 'B', 'key1': 'A'}
15
Additional
Data
Structures
Bitmap: A set of
bit-oriented
operations (e.g.
GETBIT/SETBIT)
to manipulate string
values as blobs of
size up to 512 MB.
HyperLogLog: A
probabilistic data
structure structure
to estimate size of
sets (i.e. counting
unique elements)
efficiently and in
constant-space.
Geo: Geospatial
items, stored as
geospatial
indexes (in sorted
indexes). Support
for distance based
operations (eg.
GEODIST) and
radius queries
(GEORADIUS).
Available only in
the BETA testing
version (3.2.0).
16
3. Personal Project
17
Redis
Pub/Sub
18
To implement the Publish/Subscribe paradigm:
□Published messages (PUBLISH) are categorized
into channels and pushed to all the subscribers
(SUBSCRIBE).
□Publisher and subscriber are completely
decoupled: advantages are high scalability and
dynamic network features.
Place your screenshot here
□ Redis Pub/Sub channels are exploited as thematic channels
(EG. Sport, Tv Shows, exc.).
□ Users subscribe to the channels they’re interested in.
□ Once the web-chat session is started the user can:
■ Receive messages published on the channels of interest;
■ Publish messages onto selected channels.
Redis SubsChat:
A multi-thematic
web-chat
19
How it has
been done?
import redis
# At the beginning, to setup the Redis interface object
r = redis.StrictRedis(host='localhost', port=6379, db=0)
...
# When start is pressed, the session starts
def on_start():
pubsub = r.pubsub() 
# Disable Widgets and manage subscriptions
...
ui.checkBox.setEnabled(False)
if ui.checkBox.isChecked():
# Setup the the handler for the subscriber tasks
pubsub.subscribe(**{str(ui.checkBox.text()): 
mess_handler}) ... 
# This is done for all the checklists
...
# Run the receiver tasks into a parallel thread ... 
thread = pubsub.run_in_thread(sleep_time=0.001)
...
20
How it has
been done? (2)
...
# Handler that pushes the received message onto the web‐chat
def mess_handler(message):
QtCore.QMetaObject.invokeMethod(ui.textEdit, 
"append",QtCore.Q_ARG(str, str(message['data'])+'n')) 
... 
# To send a message when send is pressed
def on_send(): 
# Get the info about the message from the UI
msg = str(ui.textEdit_2.toPlainText()) 
if len(msg) > 0:
usrname = str(ui.lineEdit.text())
if len(usrname) == 0:
usrname = '<Anonymous>' 
channel = str(ui.comboBox.currentText())
ui.textEdit_2.clear() 
message = ‘%s [%s]: %s' % (usrname, channel, msg) 
# Publish the message onto the specified channel
r.publish(channel, message)
...
21
How it has
been done? (3)
...
def on_stop(): 
# Re‐enable the disabled widgets
...
ui.checkBox_2.setEnabled(True)
... 
# This is done for all the checklists
...
pubsub.close() 
... 
if __name__ == "__main__": 
# To setup the UI and make the application run
import sys
app = QtGui.QApplication(sys.argv) 
MainWindow = QtGui.QMainWindow() 
ui = Ui_MainWindow() ui.setupUi(MainWindow) 
MainWindow.show() 
sys.exit(app.exec_())
22
Live Demo
Let’s see how it works!!
23
4. Use cases
When should we use it?
24
Performances
and usability
Redis is an in-memory database, persistent on disk.
PROs:
□Faster reads and writes: all
happens in memory. A
transaction is considered
committed without the need of
writing on the disk.
□Simple complex data
structure manipulation: all
is in memory; lower complexity.
□Efficient persistency
management: snapshotting or
journal mode.
CONs:
□Suitable for small datasets,
of size up to memory capacity.
□Not suitable for application
where durability is a crucial
aspect.
25
When it
should be
used? We Should use it if:
□Small datasets that
fits in memory: very
high performance,
similar to a cache.
□Assumptions on
data structures and
queries: to take
advantage of the
supported data types.
□Realize a cache
layer: for example, to
speedup a conventional
RDBMS.
We Shouldn’t use it if:
□Frequent schema
changes: a traditional
key-value approach, with
the schema managed by
the application, would be
preferred.
□Prototyping: don’t
want to waste loads of
time in the design of the
database and have the
application soon ready.
□Durability critical
applications: like seat
booking mechanism.
26
Who’s using
Redis?
And many others!
27
thanks!
Any questions?
You can find me at:
https://it.linkedin.com/in/fabrizio-farinacci-496679116
https://github.com/FabFari/redis-subschat
?
28

Más contenido relacionado

La actualidad más candente

Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisArnab Mitra
 
An Introduction to REDIS NoSQL database
An Introduction to REDIS NoSQL databaseAn Introduction to REDIS NoSQL database
An Introduction to REDIS NoSQL databaseAli MasudianPour
 
An Introduction to Redis for Developers.pdf
An Introduction to Redis for Developers.pdfAn Introduction to Redis for Developers.pdf
An Introduction to Redis for Developers.pdfStephen Lorello
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examplesTerry Cho
 
Paris Redis Meetup Introduction
Paris Redis Meetup IntroductionParis Redis Meetup Introduction
Paris Redis Meetup IntroductionGregory Boissinot
 
High-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using RedisHigh-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using Rediscacois
 
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redisZhichao Liang
 
Redis persistence in practice
Redis persistence in practiceRedis persistence in practice
Redis persistence in practiceEugene Fidelin
 
Redis Overview
Redis OverviewRedis Overview
Redis OverviewHoang Long
 
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineRedis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineScaleGrid.io
 
Redis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRedis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRoberto Franchini
 
Redis in Practice
Redis in PracticeRedis in Practice
Redis in PracticeNoah Davis
 
Introduction to redis - version 2
Introduction to redis - version 2Introduction to redis - version 2
Introduction to redis - version 2Dvir Volk
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Michel Schudel
 

La actualidad más candente (20)

Redis introduction
Redis introductionRedis introduction
Redis introduction
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
An Introduction to REDIS NoSQL database
An Introduction to REDIS NoSQL databaseAn Introduction to REDIS NoSQL database
An Introduction to REDIS NoSQL database
 
An Introduction to Redis for Developers.pdf
An Introduction to Redis for Developers.pdfAn Introduction to Redis for Developers.pdf
An Introduction to Redis for Developers.pdf
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examples
 
Redis and it's data types
Redis and it's data typesRedis and it's data types
Redis and it's data types
 
Paris Redis Meetup Introduction
Paris Redis Meetup IntroductionParis Redis Meetup Introduction
Paris Redis Meetup Introduction
 
High-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using RedisHigh-Volume Data Collection and Real Time Analytics Using Redis
High-Volume Data Collection and Real Time Analytics Using Redis
 
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redis
 
Redis persistence in practice
Redis persistence in practiceRedis persistence in practice
Redis persistence in practice
 
Redis Overview
Redis OverviewRedis Overview
Redis Overview
 
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineRedis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
 
Redis Persistence
Redis  PersistenceRedis  Persistence
Redis Persistence
 
Redis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRedis for duplicate detection on real time stream
Redis for duplicate detection on real time stream
 
Redis in Practice
Redis in PracticeRedis in Practice
Redis in Practice
 
Redis database
Redis databaseRedis database
Redis database
 
Introduction to redis - version 2
Introduction to redis - version 2Introduction to redis - version 2
Introduction to redis - version 2
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 

Destacado

Destacado (20)

Genuino and codebender
Genuino and codebenderGenuino and codebender
Genuino and codebender
 
AltBeacon
AltBeaconAltBeacon
AltBeacon
 
Adafruit Huzzah Esp8266 WiFi Board
Adafruit Huzzah Esp8266 WiFi BoardAdafruit Huzzah Esp8266 WiFi Board
Adafruit Huzzah Esp8266 WiFi Board
 
Temboo
TembooTemboo
Temboo
 
AltBeacon
AltBeaconAltBeacon
AltBeacon
 
ThingStudio Presentation
ThingStudio PresentationThingStudio Presentation
ThingStudio Presentation
 
Intel Curie Presentation
Intel Curie PresentationIntel Curie Presentation
Intel Curie Presentation
 
Blynk presentation
Blynk presentationBlynk presentation
Blynk presentation
 
Elm 327 Obd
Elm 327 ObdElm 327 Obd
Elm 327 Obd
 
Presentation raspberry pi
Presentation   raspberry piPresentation   raspberry pi
Presentation raspberry pi
 
BEACON AND ITS PROTOCOLS
BEACON AND ITS PROTOCOLS BEACON AND ITS PROTOCOLS
BEACON AND ITS PROTOCOLS
 
[Individual presentation] android fragment
[Individual presentation] android fragment[Individual presentation] android fragment
[Individual presentation] android fragment
 
AWS IoT
AWS IoTAWS IoT
AWS IoT
 
Neo4j and graph databases introduction
Neo4j and graph databases introduction Neo4j and graph databases introduction
Neo4j and graph databases introduction
 
Idea my smartrome
Idea my smartromeIdea my smartrome
Idea my smartrome
 
Ecohome lab: From Monitoring to Control
Ecohome lab: From Monitoring to ControlEcohome lab: From Monitoring to Control
Ecohome lab: From Monitoring to Control
 
Presentazione resin.io
Presentazione resin.ioPresentazione resin.io
Presentazione resin.io
 
Smart Health & Arduino
Smart Health & ArduinoSmart Health & Arduino
Smart Health & Arduino
 
InfluxDb
InfluxDbInfluxDb
InfluxDb
 
Arduino based health monitoring system
Arduino based health monitoring systemArduino based health monitoring system
Arduino based health monitoring system
 

Similar a Redis - Usability and Use Cases

"You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics""You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics"ITCP Community
 
All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2goMoriyoshi Koizumi
 
r2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyr2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyRay Song
 
From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)Night Sailer
 
Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]
Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]
Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]RootedCON
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisDvir Volk
 
REDIS intro and how to use redis
REDIS intro and how to use redisREDIS intro and how to use redis
REDIS intro and how to use redisKris Jeong
 
A Small Talk on Getting Big
A Small Talk on Getting BigA Small Talk on Getting Big
A Small Talk on Getting Bigbritt
 
Get expertise with mongo db
Get expertise with mongo dbGet expertise with mongo db
Get expertise with mongo dbAmit Thakkar
 
Python dictionary : past, present, future
Python dictionary: past, present, futurePython dictionary: past, present, future
Python dictionary : past, present, futuredelimitry
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQLOpenFest team
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Vincenzo Iozzo
 
[FT-7][snowmantw] How to make a new functional language and make the world be...
[FT-7][snowmantw] How to make a new functional language and make the world be...[FT-7][snowmantw] How to make a new functional language and make the world be...
[FT-7][snowmantw] How to make a new functional language and make the world be...Functional Thursday
 
Rootkit on linux_x86_v2.6
Rootkit on linux_x86_v2.6Rootkit on linux_x86_v2.6
Rootkit on linux_x86_v2.6scuhurricane
 
Beware: Sharp Tools
Beware: Sharp ToolsBeware: Sharp Tools
Beware: Sharp Toolschrismdp
 

Similar a Redis - Usability and Use Cases (20)

"You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics""You shall not pass : anti-debug methodics"
"You shall not pass : anti-debug methodics"
 
All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
 
R-House (LSRC)
R-House (LSRC)R-House (LSRC)
R-House (LSRC)
 
r2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyr2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCy
 
From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)From mysql to MongoDB(MongoDB2011北京交流会)
From mysql to MongoDB(MongoDB2011北京交流会)
 
Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]
Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]
Sergi Álvarez & Roi Martín - Radare2 Preview [RootedCON 2010]
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
Mongodb workshop
Mongodb workshopMongodb workshop
Mongodb workshop
 
REDIS intro and how to use redis
REDIS intro and how to use redisREDIS intro and how to use redis
REDIS intro and how to use redis
 
A Small Talk on Getting Big
A Small Talk on Getting BigA Small Talk on Getting Big
A Small Talk on Getting Big
 
Get expertise with mongo db
Get expertise with mongo dbGet expertise with mongo db
Get expertise with mongo db
 
Python dictionary : past, present, future
Python dictionary: past, present, futurePython dictionary: past, present, future
Python dictionary : past, present, future
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQL
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
 
Python for Penetration testers
Python for Penetration testersPython for Penetration testers
Python for Penetration testers
 
Mongo db dla administratora
Mongo db dla administratoraMongo db dla administratora
Mongo db dla administratora
 
[FT-7][snowmantw] How to make a new functional language and make the world be...
[FT-7][snowmantw] How to make a new functional language and make the world be...[FT-7][snowmantw] How to make a new functional language and make the world be...
[FT-7][snowmantw] How to make a new functional language and make the world be...
 
Rootkit on linux_x86_v2.6
Rootkit on linux_x86_v2.6Rootkit on linux_x86_v2.6
Rootkit on linux_x86_v2.6
 
Beware: Sharp Tools
Beware: Sharp ToolsBeware: Sharp Tools
Beware: Sharp Tools
 

Más de Fabrizio Farinacci

A taxonomy of botnet detection approaches
A taxonomy of botnet detection approachesA taxonomy of botnet detection approaches
A taxonomy of botnet detection approachesFabrizio Farinacci
 
Project in malware analysis:C2C
Project in malware analysis:C2CProject in malware analysis:C2C
Project in malware analysis:C2CFabrizio Farinacci
 
Classifying IoT malware delivery patterns for attack detection
Classifying IoT malware delivery patterns for attack detectionClassifying IoT malware delivery patterns for attack detection
Classifying IoT malware delivery patterns for attack detectionFabrizio Farinacci
 
A Taxonomy of Botnet Detection Approaches
A Taxonomy of Botnet Detection ApproachesA Taxonomy of Botnet Detection Approaches
A Taxonomy of Botnet Detection ApproachesFabrizio Farinacci
 
Deanonymize Tor Hidden Services
Deanonymize Tor Hidden ServicesDeanonymize Tor Hidden Services
Deanonymize Tor Hidden ServicesFabrizio Farinacci
 
RecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeoverRecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeoverFabrizio Farinacci
 
RecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeoverRecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeoverFabrizio Farinacci
 

Más de Fabrizio Farinacci (8)

A taxonomy of botnet detection approaches
A taxonomy of botnet detection approachesA taxonomy of botnet detection approaches
A taxonomy of botnet detection approaches
 
Project in malware analysis:C2C
Project in malware analysis:C2CProject in malware analysis:C2C
Project in malware analysis:C2C
 
Classifying IoT malware delivery patterns for attack detection
Classifying IoT malware delivery patterns for attack detectionClassifying IoT malware delivery patterns for attack detection
Classifying IoT malware delivery patterns for attack detection
 
A Taxonomy of Botnet Detection Approaches
A Taxonomy of Botnet Detection ApproachesA Taxonomy of Botnet Detection Approaches
A Taxonomy of Botnet Detection Approaches
 
The Same-Origin Policy
The Same-Origin PolicyThe Same-Origin Policy
The Same-Origin Policy
 
Deanonymize Tor Hidden Services
Deanonymize Tor Hidden ServicesDeanonymize Tor Hidden Services
Deanonymize Tor Hidden Services
 
RecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeoverRecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeover
 
RecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeoverRecipeX - Your personal caregiver and lifestyle makeover
RecipeX - Your personal caregiver and lifestyle makeover
 

Último

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 

Último (20)

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 

Redis - Usability and Use Cases

  • 2. !!!!i! i iiiiii i iii iii i i i i sssss 1
  • 3. 1. What is Redis? REmote DIctionary Server 2
  • 4. “ is an in-memory data structure store, that can be served as a database, cache or message broker (Pub/Sub). 3
  • 6. … a ‘‘data structure server’’? Redis is essentially a key-value database… but it’s NOT a plain key-value database: it’s not limited to string values, but can also hold complex data structures. 5
  • 8. Strings Command line: > set mystr foo OK > set myint 1 OK > get mystr "foo" > append mystr foo (integer) 6 > incr myint (integer) 2 > mget mystr myint 1) "foofoo" 2) "2" Are key-value pairs, to store strings or integers, with: □Common operations on strings (APPEND, STRLEN, exc.); □Atomic increment/decrement (INCR/DECR) on integers; □Get multiple values at once (MGET). Python: >>> import redis >>> r = redis.StrictRedis( host='localhost', port=6379, db=0 ) >>> r.set('mystr', 'foo') True >>> r.set('myint', 1) True >>> r.get('mystr') 'foo' >>> r.append('mystr', 'foo') 6L >>> r.incr('myint') 2 >>> r.mget('mystr', 'myint') ['foofoo', '2'] 7
  • 9. Lists Are linked-lists of strings: □Index-based access to the entries; □Insertion and deletion at head/tail, in constant-time (push/pop); □Trim/Range operations available. 8
  • 10. Interacting with Lists Command line: > rpush mylist A (integer) 1 > rpush mylist B (integer) 2 > lpush mylist first (integer) 3 > lrange mylist 0 ‐1 1) "first" 2) "A" 3) "B" > lrange mylist 1 3 1) "A" 2) "B" Python: >>> import redis >>> r = redis.StrictRedis( host='localhost', port=6379, db=0 ) >>> r.rpush('mylist', 'A') 1L >>> r.rpush('mylist', 'B') 2L >>> r.lpush('mylist', 'first') 3L >>> r.lrange('mylist', 0, ‐1) ['first', 'A', 'B'] >>> r.lrange('mylist', 1, 3) ['A', 'B'] 9
  • 11. Sets Are sets of strings: □Unordered collection of non- repeating elements; □Intersection/Union/Difference between multiple sets; □Membership test available. 10
  • 12. Interacting with Sets Command line: > sadd myset A (integer) 1 > sadd myset B (integer) 1 > sadd myset2 C (integer) 1 > sismember myset C (integer) 0 > smembers myset 1) "A" 2) "B" > sunion myset myset2 1) "A" 2) "B" 3) "C" Python: >>> import redis >>> r = redis.StrictRedis( host='localhost', port=6379, db=0 ) >>> r.sadd('myset', 'A') 1 >>> r.sadd('myset', 'B') 1 >>> r.sadd('myset2', 'C') 1 >>> r.sismember('myset', 'C') False >>> r.smembers('myset') set(['A', 'B'])  >>> r.sunion('myset', 'myset2') set(['A', 'C', 'B']) 11
  • 13. Sorted Set (ZSET) 12 Are sorted sets of strings: □Collection of non-repeating elements sorted by floating-point numbers (the score) and lexicographically; □Range operations on score/lexicon; □Intersection/Union between sets.
  • 14. Interacting with ZSETs Command line: > zadd myzset 2 C (integer) 1 > zadd myzset 3 D (integer) 1 > zadd myzset 1 A (integer) 1 > zadd myzset 2 B (integer) 1 > zrange myzset 0 ‐1 1) "A" 2) "B" 3) "C" 4) "D" > zrangebyscore myzset 1 2 1) "A" 2) "B" 3) "C" > zrangebylex myzset (A [D  1) "B" 2) "C" 3) "D" Python: >>> import redis >>> r = redis.StrictRedis( host='localhost', port=6379, db=0 ) >>> r.zadd('myzset', 2, 'C') 1 >>> r.zadd('myzset', 3, 'D')  1 >>> r.zadd('myzset', A=1)  1 >>> r.zadd('myzset', B=2)  1 >>> r.zrange('myzset', 0, ‐1)  ['A', 'B', 'C', 'D'] >>> r.zrangebyscore('myzset', 1, 2)  ['A', 'B', 'C']  >>> r.zrangebylex('myzset', '(A', '[D')  ['B', 'C', 'D'] 13
  • 15. Hash A map of field-value pairs: □Key-based access, specifying selected field or fields; □To implement objects, specifying the name of the field and its value. 14
  • 16. Interacting with Hashes Command line: > hset myhash key1 A (integer) 1 > hmset myhash key2 B key3 C OK > hget myhash key2 "B" > hmget myhash key1 key3 1) "A" 2) "C" > hgetall myhash 1) "key1" 2) "A" 3) "key2" 4) "B" 5) "key3" 6) "C" Python: >>> import redis >>> r = redis.StrictRedis( host='localhost', port=6379, db=0 ) >>> r.hset('myhash', 'key1', 'A')  1L >>> r.hmset('myhash', {'key2':'B', 'key3':'C'} )  True >>> r.hget('myhash', 'key2') 'B' >>> r.hmget('myhash', 'key1', 'key3')  ['A', 'C'] >>> r.hgetall('myhash') {'key3': 'C', 'key2': 'B', 'key1': 'A'} 15
  • 17. Additional Data Structures Bitmap: A set of bit-oriented operations (e.g. GETBIT/SETBIT) to manipulate string values as blobs of size up to 512 MB. HyperLogLog: A probabilistic data structure structure to estimate size of sets (i.e. counting unique elements) efficiently and in constant-space. Geo: Geospatial items, stored as geospatial indexes (in sorted indexes). Support for distance based operations (eg. GEODIST) and radius queries (GEORADIUS). Available only in the BETA testing version (3.2.0). 16
  • 19. Redis Pub/Sub 18 To implement the Publish/Subscribe paradigm: □Published messages (PUBLISH) are categorized into channels and pushed to all the subscribers (SUBSCRIBE). □Publisher and subscriber are completely decoupled: advantages are high scalability and dynamic network features.
  • 20. Place your screenshot here □ Redis Pub/Sub channels are exploited as thematic channels (EG. Sport, Tv Shows, exc.). □ Users subscribe to the channels they’re interested in. □ Once the web-chat session is started the user can: ■ Receive messages published on the channels of interest; ■ Publish messages onto selected channels. Redis SubsChat: A multi-thematic web-chat 19
  • 21. How it has been done? import redis # At the beginning, to setup the Redis interface object r = redis.StrictRedis(host='localhost', port=6379, db=0) ... # When start is pressed, the session starts def on_start(): pubsub = r.pubsub()  # Disable Widgets and manage subscriptions ... ui.checkBox.setEnabled(False) if ui.checkBox.isChecked(): # Setup the the handler for the subscriber tasks pubsub.subscribe(**{str(ui.checkBox.text()):  mess_handler}) ...  # This is done for all the checklists ... # Run the receiver tasks into a parallel thread ...  thread = pubsub.run_in_thread(sleep_time=0.001) ... 20
  • 22. How it has been done? (2) ... # Handler that pushes the received message onto the web‐chat def mess_handler(message): QtCore.QMetaObject.invokeMethod(ui.textEdit,  "append",QtCore.Q_ARG(str, str(message['data'])+'n'))  ...  # To send a message when send is pressed def on_send():  # Get the info about the message from the UI msg = str(ui.textEdit_2.toPlainText())  if len(msg) > 0: usrname = str(ui.lineEdit.text()) if len(usrname) == 0: usrname = '<Anonymous>'  channel = str(ui.comboBox.currentText()) ui.textEdit_2.clear()  message = ‘%s [%s]: %s' % (usrname, channel, msg)  # Publish the message onto the specified channel r.publish(channel, message) ... 21
  • 23. How it has been done? (3) ... def on_stop():  # Re‐enable the disabled widgets ... ui.checkBox_2.setEnabled(True) ...  # This is done for all the checklists ... pubsub.close()  ...  if __name__ == "__main__":  # To setup the UI and make the application run import sys app = QtGui.QApplication(sys.argv)  MainWindow = QtGui.QMainWindow()  ui = Ui_MainWindow() ui.setupUi(MainWindow)  MainWindow.show()  sys.exit(app.exec_()) 22
  • 24. Live Demo Let’s see how it works!! 23
  • 25. 4. Use cases When should we use it? 24
  • 26. Performances and usability Redis is an in-memory database, persistent on disk. PROs: □Faster reads and writes: all happens in memory. A transaction is considered committed without the need of writing on the disk. □Simple complex data structure manipulation: all is in memory; lower complexity. □Efficient persistency management: snapshotting or journal mode. CONs: □Suitable for small datasets, of size up to memory capacity. □Not suitable for application where durability is a crucial aspect. 25
  • 27. When it should be used? We Should use it if: □Small datasets that fits in memory: very high performance, similar to a cache. □Assumptions on data structures and queries: to take advantage of the supported data types. □Realize a cache layer: for example, to speedup a conventional RDBMS. We Shouldn’t use it if: □Frequent schema changes: a traditional key-value approach, with the schema managed by the application, would be preferred. □Prototyping: don’t want to waste loads of time in the design of the database and have the application soon ready. □Durability critical applications: like seat booking mechanism. 26
  • 29. thanks! Any questions? You can find me at: https://it.linkedin.com/in/fabrizio-farinacci-496679116 https://github.com/FabFari/redis-subschat ? 28