SlideShare a Scribd company logo
Redis and Python

    by Josiah Carlson
        @dr_josiah
 dr-josiah.blogspot.com
  bit.ly/redis-in-action
Redis and Python;
 It's PB & J time
     by Josiah Carlson
         @dr_josiah
  dr-josiah.blogspot.com
   bit.ly/redis-in-action
What will be covered
•   Who am I?
•   What is Redis?
•   Why Redis with Python?
•   Cool stuff you can do by combining them
Who am I?
•   A Python user for 12+ years
•   Former python-dev bike-shedder
•   Former maintainer of Python async sockets libraries
•   Author of a few small OS projects
    o   rpqueue, parse-crontab, async_http, timezone-utils, PyPE

•   Worked at some cool places you've never heard of
    (Networks In Motion, Ad.ly)
•   Cool places you have (Google)
•   And cool places you will (ChowNow)
•   Heavy user of Redis
•   Author of upcoming Redis in Action
What is Redis?
•   In-memory database/data structure server
     o Limited to main memory; vm and diskstore defunct
•   Persistence via snapshot or append-only file
•   Support for master/slave replication (multiple slaves
    and slave chaining supported)
     o No master-master, don't even try
     o Client-side sharding
     o Cluster is in-progress
•   Five data structures + publish/subscribe
     o Strings, Lists, Sets, Hashes, Sorted Sets (ZSETs)
•   Server-side scripting with Lua in Redis 2.6
What is Redis? (compared to other
databases/caches)
• Memcached
  o in-memory, no-persistence, counters, strings, very fast, multi-threaded

• Redis
  o in-memory, optionally persisted, data structures, very fast, server-side
    scripting, single-threaded
• MongoDB
  o on-disk, speed inversely related to data integrity, bson, master/slave,
    sharding, multi-master, server-side mapreduce, database-level locking
• Riak
  o on-disk, pluggable data stores, multi-master sharding, RESTful API,
    server-side map-reduce, (Erlang + C)
• MySQL/PostgreSQL
  o on-disk/in-memory, pluggable data stores, master/slave, sharding,
    stored procedures, ...
What is Redis? (Strings)
•   Really scalars of a few different types
    o   Character strings
          concatenate values to the end
          get/set individual bits
          get/set byte ranges
    o   Integers (platform long int)
          increment/decrement
          auto "casting"
    o   Floats (IEEE 754 FP Double)
          increment/decrement
          auto "casting"
What is Redis? (Lists)
•   Doubly-linked list of character strings
    o   Push/pop from both ends
    o   [Blocking] pop from multiple lists
    o   [Blocking] pop from one list, push on another
    o   Get/set/search for item in a list
    o   Sortable
What is Redis? (Sets)
•   Unique unordered sequence of character
    strings
    o   Backed by a hash table
    o   Add, remove, check membership, pop, random pop
    o   Set intersection, union, difference
    o   Sortable
What is Redis? (Hashes)
•   Key-value mapping inside a key
    o   Get/Set/Delete single/multiple
    o   Increment values by ints/floats
    o   Bulk fetch of Keys/Values/Both
    o   Sort-of like a small version of Redis that only
        supports strings/ints/floats
What is Redis? (Sorted Sets -
ZSETs)
•   Like a Hash, with 'members' and 'scores',
    scores limited to float values
    o   Get, set, delete, increment
    o   Can be accessed by the sorted order of the
        (score,member) pair
          By score
          By index
What is Redis? (Publish/Subscribe)
•   Readers subscribe to "channels" (exact
    strings or patterns)
•   Writers publish to channels, broadcasting to
    all subscribers
•   Messages are transient
Why Redis with Python?
•   The power of Python lies in:
    o   Reasonably sane syntax/semantics
    o   Easy manipulation of data and data structures
    o   Large and growing community
•   Redis also has:
    o   Reasonably sane syntax/semantics
    o   Easy manipulation of data and data structures
    o   Medium-sized and growing community
    o   Available as remote server
         Like a remote IPython, only for data
         So useful, people have asked for a library version
Per-hour and Per-day hit counters
from itertools import imap
import redis
def process_lines(prefix, logfile):
   conn = redis.Redis()
   for log in imap(parse_line, open(logfile, 'rb')):
       time = log.timestamp.isoformat()
       hour = time.partition(':')[0]
       day = time.partition('T')[0]
       conn.zincrby(prefix + hour, log.path)
       conn.zincrby(prefix + day, log.path)
       conn.expire(prefix + hour, 7*86400)
       conn.expire(prefix + day, 30*86400)
Per-hour and Per-day hit counters
(with pipelines for speed)
from itertools import imap
import redis
def process_lines(prefix, logfile):
    pipe = redis.Redis().pipeline(False)
    for i, log in enumerate(imap(parse_line, open(logfile, 'rb'))):
        time = log.timestamp.isoformat()
        hour = time.partition(':')[0]
        day = time.partition('T')[0]
        pipe.zincrby(prefix + hour, log.path)
        pipe.zincrby(prefix + day, log.path)
        pipe.expire(prefix + hour, 7*86400)
        pipe.expire(prefix + day, 30*86400)
        if not i % 1000:
               pipe.execute()
    pipe.execute()
Simple task queue - add/run items
import json
import redis


def add_item(queue, name, *args, **kwargs):
   redis.Redis().rpush(queue,
       json.dumps([name, args, kwargs]))


def execute_one(queues):
   item = redis.Redis().blpop(queues, 30)
   name, args, kwargs = json.loads(item)
   REGISTRY[name](*args, **kwargs)
Simple task queue - register tasks
REGISTRY = {}
def task(queue):
    def wrapper(function):
        def defer(*args, **kwargs):
            add_item(queue, name, *args, **kwargs)
        name = function.__name__
        if name in REGISTRY:
            raise Exception(
                   "Duplicate callback %s"%(name,))
        REGISTRY[name] = function
        return defer
    if isinstance(queue, str):
        return wrapper
    function, queue = queue, 'default'
    return wrapper(function)
Simple task queue – register tasks
@task('high')
def do_something(arg):
    pass


@task
def do_something_else(arg):
    pass
Cool stuff to do...
•    Reddit                •   Publish/Subscribe
•    Caching               •   Messaging
•    Cookies               •   Search engines
•    Analytics             •   Ad targeting
•    Configuration         •   Twitter
     management            •   Chat rooms
•    Autocomplete          •   Job search
•    Distributed locks     •   ...
•    Counting Semaphores
•    Task queues
Thank you
      @dr_josiah
dr-josiah.blogspot.com
 bit.ly/redis-in-action



     Questions?

More Related Content

What's hot (20)

PDF
Hypertable
betaisao
 
PPTX
Hadoop Cluster Configuration and Data Loading - Module 2
Rohit Agrawal
 
PDF
SDEC2011 NoSQL concepts and models
Korea Sdec
 
PPTX
Avro intro
Randy Abernethy
 
PDF
PostgreSQL and Sphinx pgcon 2013
Emanuel Calvo
 
PDF
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
Duyhai Doan
 
PPT
Hadoop
Cassell Hsu
 
PDF
Introduction to Redis
Rizky Abdilah
 
PPTX
Practical Hadoop using Pig
David Wellman
 
PDF
PG Day'14 Russia, Работа со слабо-структурированными данными в PostgreSQL, Ол...
pgdayrussia
 
PDF
Ruby on hadoop
Ted O'Meara
 
KEY
Scaling php applications with redis
jimbojsb
 
PDF
OCF.tw's talk about "Introduction to spark"
Giivee The
 
PDF
Why hadoop map reduce needs scala, an introduction to scoobi and scalding
Xebia Nederland BV
 
PDF
MongoDB Advanced Topics
César Rodas
 
PDF
Avro Data | Washington DC HUG
Cloudera, Inc.
 
PDF
Intro To Cascading
Nate Murray
 
PPT
Parquet and impala overview external
mattlieber
 
PDF
Fast track to getting started with DSE Max @ ING
Duyhai Doan
 
PDF
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
Emanuel Calvo
 
Hypertable
betaisao
 
Hadoop Cluster Configuration and Data Loading - Module 2
Rohit Agrawal
 
SDEC2011 NoSQL concepts and models
Korea Sdec
 
Avro intro
Randy Abernethy
 
PostgreSQL and Sphinx pgcon 2013
Emanuel Calvo
 
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
Duyhai Doan
 
Hadoop
Cassell Hsu
 
Introduction to Redis
Rizky Abdilah
 
Practical Hadoop using Pig
David Wellman
 
PG Day'14 Russia, Работа со слабо-структурированными данными в PostgreSQL, Ол...
pgdayrussia
 
Ruby on hadoop
Ted O'Meara
 
Scaling php applications with redis
jimbojsb
 
OCF.tw's talk about "Introduction to spark"
Giivee The
 
Why hadoop map reduce needs scala, an introduction to scoobi and scalding
Xebia Nederland BV
 
MongoDB Advanced Topics
César Rodas
 
Avro Data | Washington DC HUG
Cloudera, Inc.
 
Intro To Cascading
Nate Murray
 
Parquet and impala overview external
mattlieber
 
Fast track to getting started with DSE Max @ ING
Duyhai Doan
 
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
Emanuel Calvo
 

Viewers also liked (7)

PDF
Redis persistence in practice
Eugene Fidelin
 
PDF
Multiprocessing with python
Patrick Vergain
 
PDF
Python in Action (Part 2)
David Beazley (Dabeaz LLC)
 
PDF
Redis for the Everyday Developer
Ross Tuck
 
PDF
Python in Action (Part 1)
David Beazley (Dabeaz LLC)
 
PDF
Generators: The Final Frontier
David Beazley (Dabeaz LLC)
 
PDF
An Introduction to Python Concurrency
David Beazley (Dabeaz LLC)
 
Redis persistence in practice
Eugene Fidelin
 
Multiprocessing with python
Patrick Vergain
 
Python in Action (Part 2)
David Beazley (Dabeaz LLC)
 
Redis for the Everyday Developer
Ross Tuck
 
Python in Action (Part 1)
David Beazley (Dabeaz LLC)
 
Generators: The Final Frontier
David Beazley (Dabeaz LLC)
 
An Introduction to Python Concurrency
David Beazley (Dabeaz LLC)
 
Ad

Similar to Python redis talk (20)

PPTX
Redis Use Patterns (DevconTLV June 2014)
Itamar Haber
 
PPTX
Hadoop with Python
Donald Miner
 
PDF
H2O World - What's New in H2O with Cliff Click
Sri Ambati
 
PPTX
Redis Modules - Redis India Tour - 2017
HashedIn Technologies
 
KEY
PostgreSQL
Reuven Lerner
 
PDF
Apache hive
Inthra onsap
 
PDF
Migrating from matlab to python
ActiveState
 
PDF
Presto updates to 0.178
Kai Sasaki
 
PPTX
Hadoop for the Absolute Beginner
Ike Ellis
 
PDF
Tajolabigdatacamp2014 140618135810-phpapp01 hyunsik-choi
Data Con LA
 
PPTX
04 standard class library c#
Victor Matyushevskyy
 
PDF
Hadoop Overview & Architecture
EMC
 
PPTX
Why databases cry at night
Michael Yarichuk
 
ODP
Типы данных JSONb, соответствующие индексы и модуль jsquery – Олег Бартунов, ...
Yandex
 
ODP
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
Nikolay Samokhvalov
 
PPTX
Big data week presentation
Joseph Adler
 
PPTX
מיכאל
sqlserver.co.il
 
PPTX
Big data, just an introduction to Hadoop and Scripting Languages
Corley S.r.l.
 
PDF
What is MariaDB Server 10.3?
Colin Charles
 
PPTX
Code for Startup MVP (Ruby on Rails) Session 2
Henry S
 
Redis Use Patterns (DevconTLV June 2014)
Itamar Haber
 
Hadoop with Python
Donald Miner
 
H2O World - What's New in H2O with Cliff Click
Sri Ambati
 
Redis Modules - Redis India Tour - 2017
HashedIn Technologies
 
PostgreSQL
Reuven Lerner
 
Apache hive
Inthra onsap
 
Migrating from matlab to python
ActiveState
 
Presto updates to 0.178
Kai Sasaki
 
Hadoop for the Absolute Beginner
Ike Ellis
 
Tajolabigdatacamp2014 140618135810-phpapp01 hyunsik-choi
Data Con LA
 
04 standard class library c#
Victor Matyushevskyy
 
Hadoop Overview & Architecture
EMC
 
Why databases cry at night
Michael Yarichuk
 
Типы данных JSONb, соответствующие индексы и модуль jsquery – Олег Бартунов, ...
Yandex
 
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
Nikolay Samokhvalov
 
Big data week presentation
Joseph Adler
 
מיכאל
sqlserver.co.il
 
Big data, just an introduction to Hadoop and Scripting Languages
Corley S.r.l.
 
What is MariaDB Server 10.3?
Colin Charles
 
Code for Startup MVP (Ruby on Rails) Session 2
Henry S
 
Ad

Recently uploaded (20)

PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Biography of Daniel Podor.pdf
Daniel Podor
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 

Python redis talk

  • 1. Redis and Python by Josiah Carlson @dr_josiah dr-josiah.blogspot.com bit.ly/redis-in-action
  • 2. Redis and Python; It's PB & J time by Josiah Carlson @dr_josiah dr-josiah.blogspot.com bit.ly/redis-in-action
  • 3. What will be covered • Who am I? • What is Redis? • Why Redis with Python? • Cool stuff you can do by combining them
  • 4. Who am I? • A Python user for 12+ years • Former python-dev bike-shedder • Former maintainer of Python async sockets libraries • Author of a few small OS projects o rpqueue, parse-crontab, async_http, timezone-utils, PyPE • Worked at some cool places you've never heard of (Networks In Motion, Ad.ly) • Cool places you have (Google) • And cool places you will (ChowNow) • Heavy user of Redis • Author of upcoming Redis in Action
  • 5. What is Redis? • In-memory database/data structure server o Limited to main memory; vm and diskstore defunct • Persistence via snapshot or append-only file • Support for master/slave replication (multiple slaves and slave chaining supported) o No master-master, don't even try o Client-side sharding o Cluster is in-progress • Five data structures + publish/subscribe o Strings, Lists, Sets, Hashes, Sorted Sets (ZSETs) • Server-side scripting with Lua in Redis 2.6
  • 6. What is Redis? (compared to other databases/caches) • Memcached o in-memory, no-persistence, counters, strings, very fast, multi-threaded • Redis o in-memory, optionally persisted, data structures, very fast, server-side scripting, single-threaded • MongoDB o on-disk, speed inversely related to data integrity, bson, master/slave, sharding, multi-master, server-side mapreduce, database-level locking • Riak o on-disk, pluggable data stores, multi-master sharding, RESTful API, server-side map-reduce, (Erlang + C) • MySQL/PostgreSQL o on-disk/in-memory, pluggable data stores, master/slave, sharding, stored procedures, ...
  • 7. What is Redis? (Strings) • Really scalars of a few different types o Character strings  concatenate values to the end  get/set individual bits  get/set byte ranges o Integers (platform long int)  increment/decrement  auto "casting" o Floats (IEEE 754 FP Double)  increment/decrement  auto "casting"
  • 8. What is Redis? (Lists) • Doubly-linked list of character strings o Push/pop from both ends o [Blocking] pop from multiple lists o [Blocking] pop from one list, push on another o Get/set/search for item in a list o Sortable
  • 9. What is Redis? (Sets) • Unique unordered sequence of character strings o Backed by a hash table o Add, remove, check membership, pop, random pop o Set intersection, union, difference o Sortable
  • 10. What is Redis? (Hashes) • Key-value mapping inside a key o Get/Set/Delete single/multiple o Increment values by ints/floats o Bulk fetch of Keys/Values/Both o Sort-of like a small version of Redis that only supports strings/ints/floats
  • 11. What is Redis? (Sorted Sets - ZSETs) • Like a Hash, with 'members' and 'scores', scores limited to float values o Get, set, delete, increment o Can be accessed by the sorted order of the (score,member) pair  By score  By index
  • 12. What is Redis? (Publish/Subscribe) • Readers subscribe to "channels" (exact strings or patterns) • Writers publish to channels, broadcasting to all subscribers • Messages are transient
  • 13. Why Redis with Python? • The power of Python lies in: o Reasonably sane syntax/semantics o Easy manipulation of data and data structures o Large and growing community • Redis also has: o Reasonably sane syntax/semantics o Easy manipulation of data and data structures o Medium-sized and growing community o Available as remote server  Like a remote IPython, only for data  So useful, people have asked for a library version
  • 14. Per-hour and Per-day hit counters from itertools import imap import redis def process_lines(prefix, logfile): conn = redis.Redis() for log in imap(parse_line, open(logfile, 'rb')): time = log.timestamp.isoformat() hour = time.partition(':')[0] day = time.partition('T')[0] conn.zincrby(prefix + hour, log.path) conn.zincrby(prefix + day, log.path) conn.expire(prefix + hour, 7*86400) conn.expire(prefix + day, 30*86400)
  • 15. Per-hour and Per-day hit counters (with pipelines for speed) from itertools import imap import redis def process_lines(prefix, logfile): pipe = redis.Redis().pipeline(False) for i, log in enumerate(imap(parse_line, open(logfile, 'rb'))): time = log.timestamp.isoformat() hour = time.partition(':')[0] day = time.partition('T')[0] pipe.zincrby(prefix + hour, log.path) pipe.zincrby(prefix + day, log.path) pipe.expire(prefix + hour, 7*86400) pipe.expire(prefix + day, 30*86400) if not i % 1000: pipe.execute() pipe.execute()
  • 16. Simple task queue - add/run items import json import redis def add_item(queue, name, *args, **kwargs): redis.Redis().rpush(queue, json.dumps([name, args, kwargs])) def execute_one(queues): item = redis.Redis().blpop(queues, 30) name, args, kwargs = json.loads(item) REGISTRY[name](*args, **kwargs)
  • 17. Simple task queue - register tasks REGISTRY = {} def task(queue): def wrapper(function): def defer(*args, **kwargs): add_item(queue, name, *args, **kwargs) name = function.__name__ if name in REGISTRY: raise Exception( "Duplicate callback %s"%(name,)) REGISTRY[name] = function return defer if isinstance(queue, str): return wrapper function, queue = queue, 'default' return wrapper(function)
  • 18. Simple task queue – register tasks @task('high') def do_something(arg): pass @task def do_something_else(arg): pass
  • 19. Cool stuff to do... • Reddit • Publish/Subscribe • Caching • Messaging • Cookies • Search engines • Analytics • Ad targeting • Configuration • Twitter management • Chat rooms • Autocomplete • Job search • Distributed locks • ... • Counting Semaphores • Task queues
  • 20. Thank you @dr_josiah dr-josiah.blogspot.com bit.ly/redis-in-action Questions?