SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
WebエンジニアのためのはじめてのredisWebエンジニアのためのはじめてのredis
@nasa9084@nasa9084
$ whoami$ whoami
Masahiro Kitamura
@nasa9084
VirtualTech Japan Inc.
KEYWORDS: emacs python golang(new!) whiske?y
redisredis
What is "redis"?What is "redis"?
remote dictionary server
Key-Value Store (KVS)
Varied Data Structure
in-memory
having persistence
easy and fast
compatible w/Python, Ruby, …
→web engineers should learn redis!
Key-value Store (KVS)Key-value Store (KVS)
dict(Python)
hash(Perl, Ruby)
map(C++, Java, Go)
namespaces
Comparison with RDBMSsComparison with RDBMSs
Function RDBMS Redis
using simply △ ◎
high speed processing △ ◎
horizontal distribution × ◎
high availability △ ◎
persistency ◎ ○
complex query ◎ ×
transaction ◎ △
consistency ◎ △
Comparison with memcachedComparison with memcached
memcached redis
good at Cache Cache
data structure only string varied structure
persistency × ○
Disk I/O NOT DO can be disable
speed high high
multi thread ○ ×
memory efficiency △ ○
Redis Data StructureRedis Data Structure
StringString
String
replace
get length
number
INCR / DECR
max: 512MB
binary safe
can insert pictures, etc
StringString
redis python
> SET hoge fugafuga
OK
> GET hoge
"fugafuga"
> SET point 10
OK
> GET point
"10"
> INCR point
(integer) 11
> GET point
"11"
from redis import Redis
redis = Redis()
redis.set('hoge', 'fugafuga')
print(redis.get('hoge'))
#=> b'fugafuga'
redis.set('point', 10)
print(redis.get('point'))
#=> b'10'
redis.incr('point')
print(redis.get('point'))
#=> b'11'
ListList
List of Strings
Implemented with Linked List
insert or access to head or tail:
access to mid:
max size: 232-1 elements
O(1)
O(N)
ListList
redis python
> LPUSH 1 2 3
(integer) 3
> LRANGE piyo 0 -1
"3"
"2"
"1"
> LPOP piyo
"3"
> LRANGE piyo 0 -1
"2"
"1"
from redis import Redis
redis = Redis()
redis.lpush('piyo', 1, 2, 3)
print(redis.lrange('piyo', 0, -1))
#=> [b'3', b'2', b'1']
print(redis.lpop('piyo'))
#=> b'3'
print(redis.lrange('piyo', 0, -1))
#=> [b'2', b'1']
SetSet
Set of Strings
un-ordered
no duplication
add, delete, access avarage:
max size: 232-1 elements
O(1)
SetSet
redis python
> SADD foo 1 3 5
(integer) 3
> SMEMBERS foo
"1"
"3"
"5"
> SADD foo 1
(integer) 0
> SMEMBERS foo
"1"
"3"
"5"
from redis import Redis
redis = Redis()
redis.sadd('foo', 1, 3, 5)
print(redis.smembers('foo'))
#=>{b'3', b'5', b'1'}
redis.sadd('foo', 1)
print(redis.smembers('foo'))
#=>{b'3', b'5', b'1'}
Sorted Set (ZSet)Sorted Set (ZSet)
Set of Strings
no duplication
each members are ordered with its Score
take Score:
add:
O(1)
O(log N)
Sorted Set (ZSet)Sorted Set (ZSet)
redis python
> ZADD bar 20 ham
(integer) 1
> ZADD bar 10 egg
(integer) 1
> ZADD bar 30 spam
(integer) 1
> ZRANGE bar 0 -1 WITHSCORES
1) "egg"
2) "10"
3) "ham"
4) "20"
5) "spam"
6) "30"
from redis import Redis
redis = Redis()
redis.zadd('bar', 'ham', 20)
redis.zadd('bar', 'egg', 10)
redis.zadd('bar', 'spam', 30)
print(
redis.zrange('bar', 0, -1, withscores=True)
)
#=>[(b'egg', 10.0), (b'ham', 20.0), (b'spam', 30.0)]
HashHash
String to String map
Java: HashMap<String, String>
Go: ~map[string]string
add, delete, access:
max size: 232-1 pairs
O(1)
HashHash
redis python
> HSET bar 0:00 5
(integer) 1
> HGETALL bar
1) "0:00"
2) "5"
> HMSET bar 1:00 5 2:00 6
(integer) 2
> HKEYS bar
1) "0:00"
2) "1:00"
3) "2:00"
> HGET bar 0:00
"5"
from redis import Redis
redis = Redis()
redis.hset('bar', '0:00', '5')
print(redis.hgetall('bar'))
#=>{b'0:00': b'5'}
add_dict = {
'1:00': '5',
'2:00': '6'
}
redis.hmset('bar', add_dict)
print(redis.hkeys('bar'))
#=>[b'0:00', b'1:00', b'2:00]
print(redis.hget('bar', '0:00'))
#=>b'5'
UsecasesUsecases
data having expirationdata having expiration
can set expiration to key
EXPIRE key seconds
`key` is expired after `seconds` seconds
EXPIREAT key timestamp
`key` is expired on `timestamp`
for example,for example,
Session ID
One Time Token
Sample CodeSample Code
from redis import Redis
from uuid import uuid4
class User:
def generate_apikey(self):
redis = Redis(host='localhost', port=6389)
if redis.exists(self.token):
return self.token
new_apikey = 'hbt-' + str(uuid4())
ttl = 10 * 60 * 60 # 10 minutes
redis.setex(new_apikey, self.name, ttl)
self.apikey = new_apikey
return self.apikey
https://github.com/web-apps-tech/hubotmaker.git
https://hubot.web-apps.tech/
Real Time RankingReal Time Ranking
sorted set
zadd key score member
keyにscore点を持ったmemberを追加する add
a `member` that has `score` to `key`
zincrby key increment member
increment score of `member` of `key`
zrange key start stop
get `key`s members from `start` to `stop`
Sample CodeSample Code
from redis import Redis
redis = Redis()
while True:
print('input member:score> ', end='')
ipt = input()
if ipt == 'show': # command 'show'
ranking = redis.zrange('ranking', 0, 5, withscores=True)[::-1]
for i, m in enumerate(ranking):
values = {
'rank': i+1,
'member': m[0].decode(),
'point': m[1]
}
print('{rank}: {member} ({point}pt)'.format(**values))
continue
member, score = args.split(':')
redis.zadd('ranking', member, int(score))
print('good bye')
https://github.com/nasa9084/samples.git
try to use redistry to use redis
try redistry redis
http://try.redis.io/
official docker containerofficial docker container
$ docker run redis
in conclusionin conclusion
in-memory KVS
having persistency
very varied data structure
String, List, Set, Hash, SortedSet
you can try to use redis with `try redis`

Weitere ähnliche Inhalte

Ähnlich wie Webエンジニアのためのはじめてのredis

Ruby on Big Data (Cassandra + Hadoop)
Ruby on Big Data (Cassandra + Hadoop)Ruby on Big Data (Cassandra + Hadoop)
Ruby on Big Data (Cassandra + Hadoop)Brian O'Neill
 
Web Performance Workshop - Velocity London 2013
Web Performance Workshop - Velocity London 2013Web Performance Workshop - Velocity London 2013
Web Performance Workshop - Velocity London 2013Andy Davies
 
Better d3 charts with tdd
Better d3 charts with tddBetter d3 charts with tdd
Better d3 charts with tddMarcos Iglesias
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisItamar Haber
 
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBNoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBJonathan Weiss
 
OpenCog Developer Workshop
OpenCog Developer WorkshopOpenCog Developer Workshop
OpenCog Developer WorkshopIbby Benali
 
An introduction to Scala.js
An introduction to Scala.jsAn introduction to Scala.js
An introduction to Scala.jsKnoldus Inc.
 
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The WinITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The WinITCamp
 
Introducing redis
Introducing redisIntroducing redis
Introducing redisNuno Caneco
 
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
 
Redis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHPRedis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHPChen Huang
 
5 R Tutorial Data Visualization
5 R Tutorial Data Visualization5 R Tutorial Data Visualization
5 R Tutorial Data VisualizationSakthi Dasans
 
Webinar: Data Processing and Aggregation Options
Webinar: Data Processing and Aggregation OptionsWebinar: Data Processing and Aggregation Options
Webinar: Data Processing and Aggregation OptionsMongoDB
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.Mike Brevoort
 
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuPostgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuRedis Labs
 

Ähnlich wie Webエンジニアのためのはじめてのredis (20)

Ruby on Big Data (Cassandra + Hadoop)
Ruby on Big Data (Cassandra + Hadoop)Ruby on Big Data (Cassandra + Hadoop)
Ruby on Big Data (Cassandra + Hadoop)
 
Web Performance Workshop - Velocity London 2013
Web Performance Workshop - Velocity London 2013Web Performance Workshop - Velocity London 2013
Web Performance Workshop - Velocity London 2013
 
Better d3 charts with tdd
Better d3 charts with tddBetter d3 charts with tdd
Better d3 charts with tdd
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDBNoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
 
OpenCog Developer Workshop
OpenCog Developer WorkshopOpenCog Developer Workshop
OpenCog Developer Workshop
 
An introduction to Scala.js
An introduction to Scala.jsAn introduction to Scala.js
An introduction to Scala.js
 
Introduction to R
Introduction to RIntroduction to R
Introduction to R
 
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The WinITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
 
Introducing redis
Introducing redisIntroducing redis
Introducing redis
 
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
 
Om (Cont.)
Om (Cont.)Om (Cont.)
Om (Cont.)
 
Redis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHPRedis in Practice: Scenarios, Performance and Practice with PHP
Redis in Practice: Scenarios, Performance and Practice with PHP
 
5 R Tutorial Data Visualization
5 R Tutorial Data Visualization5 R Tutorial Data Visualization
5 R Tutorial Data Visualization
 
Python redis talk
Python redis talkPython redis talk
Python redis talk
 
Webinar: Data Processing and Aggregation Options
Webinar: Data Processing and Aggregation OptionsWebinar: Data Processing and Aggregation Options
Webinar: Data Processing and Aggregation Options
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuPostgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
 
CouchDB on Rails
CouchDB on RailsCouchDB on Rails
CouchDB on Rails
 

Mehr von nasa9084

Webエンジニアのためのはじめてのredis.pdf
Webエンジニアのためのはじめてのredis.pdfWebエンジニアのためのはじめてのredis.pdf
Webエンジニアのためのはじめてのredis.pdfnasa9084
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredisnasa9084
 
Hubotをはじめる
HubotをはじめるHubotをはじめる
Hubotをはじめるnasa9084
 
Web Environments
Web EnvironmentsWeb Environments
Web Environmentsnasa9084
 
Efsta student session
Efsta student sessionEfsta student session
Efsta student sessionnasa9084
 
初めてのSQL
初めてのSQL初めてのSQL
初めてのSQLnasa9084
 
DIVE INTO /regexp?/
DIVE INTO /regexp?/DIVE INTO /regexp?/
DIVE INTO /regexp?/nasa9084
 
Flowchart w/program structure
Flowchart w/program structureFlowchart w/program structure
Flowchart w/program structurenasa9084
 
HTTPのお話
HTTPのお話HTTPのお話
HTTPのお話nasa9084
 
エディタ戦争のお話
エディタ戦争のお話エディタ戦争のお話
エディタ戦争のお話nasa9084
 
Linuxディストリビューションのお話
Linuxディストリビューションのお話Linuxディストリビューションのお話
Linuxディストリビューションのお話nasa9084
 
Introduction of Programming language
Introduction of Programming languageIntroduction of Programming language
Introduction of Programming languagenasa9084
 

Mehr von nasa9084 (14)

Webエンジニアのためのはじめてのredis.pdf
Webエンジニアのためのはじめてのredis.pdfWebエンジニアのためのはじめてのredis.pdf
Webエンジニアのためのはじめてのredis.pdf
 
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのrediswebエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
 
Hubotをはじめる
HubotをはじめるHubotをはじめる
Hubotをはじめる
 
Web Environments
Web EnvironmentsWeb Environments
Web Environments
 
Efsta student session
Efsta student sessionEfsta student session
Efsta student session
 
LT!
LT!LT!
LT!
 
初めてのSQL
初めてのSQL初めてのSQL
初めてのSQL
 
Shell入門
Shell入門Shell入門
Shell入門
 
DIVE INTO /regexp?/
DIVE INTO /regexp?/DIVE INTO /regexp?/
DIVE INTO /regexp?/
 
Flowchart w/program structure
Flowchart w/program structureFlowchart w/program structure
Flowchart w/program structure
 
HTTPのお話
HTTPのお話HTTPのお話
HTTPのお話
 
エディタ戦争のお話
エディタ戦争のお話エディタ戦争のお話
エディタ戦争のお話
 
Linuxディストリビューションのお話
Linuxディストリビューションのお話Linuxディストリビューションのお話
Linuxディストリビューションのお話
 
Introduction of Programming language
Introduction of Programming languageIntroduction of Programming language
Introduction of Programming language
 

Kürzlich hochgeladen

UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingrknatarajan
 
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSRajkumarAkumalla
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Christo Ananth
 
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...RajaP95
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130Suhani Kapoor
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduitsrknatarajan
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxpurnimasatapathy1234
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130Suhani Kapoor
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxupamatechverse
 

Kürzlich hochgeladen (20)

UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and workingUNIT-V FMM.HYDRAULIC TURBINE - Construction and working
UNIT-V FMM.HYDRAULIC TURBINE - Construction and working
 
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICSHARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
HARDNESS, FRACTURE TOUGHNESS AND STRENGTH OF CERAMICS
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 
★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR
★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR
★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR
 
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
IMPLICATIONS OF THE ABOVE HOLISTIC UNDERSTANDING OF HARMONY ON PROFESSIONAL E...
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
 
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINEDJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
Microscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptxMicroscopic Analysis of Ceramic Materials.pptx
Microscopic Analysis of Ceramic Materials.pptx
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
 
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
 
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptx
 

Webエンジニアのためのはじめてのredis

  • 2. $ whoami$ whoami Masahiro Kitamura @nasa9084 VirtualTech Japan Inc. KEYWORDS: emacs python golang(new!) whiske?y
  • 4. What is "redis"?What is "redis"? remote dictionary server Key-Value Store (KVS) Varied Data Structure in-memory having persistence easy and fast compatible w/Python, Ruby, … →web engineers should learn redis!
  • 5. Key-value Store (KVS)Key-value Store (KVS) dict(Python) hash(Perl, Ruby) map(C++, Java, Go) namespaces
  • 6. Comparison with RDBMSsComparison with RDBMSs Function RDBMS Redis using simply △ ◎ high speed processing △ ◎ horizontal distribution × ◎ high availability △ ◎ persistency ◎ ○ complex query ◎ × transaction ◎ △ consistency ◎ △
  • 7. Comparison with memcachedComparison with memcached memcached redis good at Cache Cache data structure only string varied structure persistency × ○ Disk I/O NOT DO can be disable speed high high multi thread ○ × memory efficiency △ ○
  • 8. Redis Data StructureRedis Data Structure
  • 9. StringString String replace get length number INCR / DECR max: 512MB binary safe can insert pictures, etc
  • 10. StringString redis python > SET hoge fugafuga OK > GET hoge "fugafuga" > SET point 10 OK > GET point "10" > INCR point (integer) 11 > GET point "11" from redis import Redis redis = Redis() redis.set('hoge', 'fugafuga') print(redis.get('hoge')) #=> b'fugafuga' redis.set('point', 10) print(redis.get('point')) #=> b'10' redis.incr('point') print(redis.get('point')) #=> b'11'
  • 11. ListList List of Strings Implemented with Linked List insert or access to head or tail: access to mid: max size: 232-1 elements O(1) O(N)
  • 12. ListList redis python > LPUSH 1 2 3 (integer) 3 > LRANGE piyo 0 -1 "3" "2" "1" > LPOP piyo "3" > LRANGE piyo 0 -1 "2" "1" from redis import Redis redis = Redis() redis.lpush('piyo', 1, 2, 3) print(redis.lrange('piyo', 0, -1)) #=> [b'3', b'2', b'1'] print(redis.lpop('piyo')) #=> b'3' print(redis.lrange('piyo', 0, -1)) #=> [b'2', b'1']
  • 13. SetSet Set of Strings un-ordered no duplication add, delete, access avarage: max size: 232-1 elements O(1)
  • 14. SetSet redis python > SADD foo 1 3 5 (integer) 3 > SMEMBERS foo "1" "3" "5" > SADD foo 1 (integer) 0 > SMEMBERS foo "1" "3" "5" from redis import Redis redis = Redis() redis.sadd('foo', 1, 3, 5) print(redis.smembers('foo')) #=>{b'3', b'5', b'1'} redis.sadd('foo', 1) print(redis.smembers('foo')) #=>{b'3', b'5', b'1'}
  • 15. Sorted Set (ZSet)Sorted Set (ZSet) Set of Strings no duplication each members are ordered with its Score take Score: add: O(1) O(log N)
  • 16. Sorted Set (ZSet)Sorted Set (ZSet) redis python > ZADD bar 20 ham (integer) 1 > ZADD bar 10 egg (integer) 1 > ZADD bar 30 spam (integer) 1 > ZRANGE bar 0 -1 WITHSCORES 1) "egg" 2) "10" 3) "ham" 4) "20" 5) "spam" 6) "30" from redis import Redis redis = Redis() redis.zadd('bar', 'ham', 20) redis.zadd('bar', 'egg', 10) redis.zadd('bar', 'spam', 30) print( redis.zrange('bar', 0, -1, withscores=True) ) #=>[(b'egg', 10.0), (b'ham', 20.0), (b'spam', 30.0)]
  • 17. HashHash String to String map Java: HashMap<String, String> Go: ~map[string]string add, delete, access: max size: 232-1 pairs O(1)
  • 18. HashHash redis python > HSET bar 0:00 5 (integer) 1 > HGETALL bar 1) "0:00" 2) "5" > HMSET bar 1:00 5 2:00 6 (integer) 2 > HKEYS bar 1) "0:00" 2) "1:00" 3) "2:00" > HGET bar 0:00 "5" from redis import Redis redis = Redis() redis.hset('bar', '0:00', '5') print(redis.hgetall('bar')) #=>{b'0:00': b'5'} add_dict = { '1:00': '5', '2:00': '6' } redis.hmset('bar', add_dict) print(redis.hkeys('bar')) #=>[b'0:00', b'1:00', b'2:00] print(redis.hget('bar', '0:00')) #=>b'5'
  • 20. data having expirationdata having expiration can set expiration to key EXPIRE key seconds `key` is expired after `seconds` seconds EXPIREAT key timestamp `key` is expired on `timestamp`
  • 21. for example,for example, Session ID One Time Token
  • 22. Sample CodeSample Code from redis import Redis from uuid import uuid4 class User: def generate_apikey(self): redis = Redis(host='localhost', port=6389) if redis.exists(self.token): return self.token new_apikey = 'hbt-' + str(uuid4()) ttl = 10 * 60 * 60 # 10 minutes redis.setex(new_apikey, self.name, ttl) self.apikey = new_apikey return self.apikey https://github.com/web-apps-tech/hubotmaker.git https://hubot.web-apps.tech/
  • 23. Real Time RankingReal Time Ranking sorted set zadd key score member keyにscore点を持ったmemberを追加する add a `member` that has `score` to `key` zincrby key increment member increment score of `member` of `key` zrange key start stop get `key`s members from `start` to `stop`
  • 24. Sample CodeSample Code from redis import Redis redis = Redis() while True: print('input member:score> ', end='') ipt = input() if ipt == 'show': # command 'show' ranking = redis.zrange('ranking', 0, 5, withscores=True)[::-1] for i, m in enumerate(ranking): values = { 'rank': i+1, 'member': m[0].decode(), 'point': m[1] } print('{rank}: {member} ({point}pt)'.format(**values)) continue member, score = args.split(':') redis.zadd('ranking', member, int(score)) print('good bye') https://github.com/nasa9084/samples.git
  • 25. try to use redistry to use redis
  • 27. official docker containerofficial docker container $ docker run redis
  • 28. in conclusionin conclusion in-memory KVS having persistency very varied data structure String, List, Set, Hash, SortedSet you can try to use redis with `try redis`