diskcache


Namediskcache JSON
Version 5.6.3 PyPI version JSON
download
home_pagehttp://www.grantjenks.com/docs/diskcache/
SummaryDisk Cache -- Disk and file backed persistent cache.
upload_time2023-08-31 06:12:00
maintainer
docs_urlNone
authorGrant Jenks
requires_python>=3
licenseApache 2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            DiskCache: Disk Backed Cache
============================

`DiskCache`_ is an Apache2 licensed disk and file backed cache library, written
in pure-Python, and compatible with Django.

The cloud-based computing of 2023 puts a premium on memory. Gigabytes of empty
space is left on disks as processes vie for memory. Among these processes is
Memcached (and sometimes Redis) which is used as a cache. Wouldn't it be nice
to leverage empty disk space for caching?

Django is Python's most popular web framework and ships with several caching
backends. Unfortunately the file-based cache in Django is essentially
broken. The culling method is random and large caches repeatedly scan a cache
directory which slows linearly with growth. Can you really allow it to take
sixty milliseconds to store a key in a cache with a thousand items?

In Python, we can do better. And we can do it in pure-Python!

::

   In [1]: import pylibmc
   In [2]: client = pylibmc.Client(['127.0.0.1'], binary=True)
   In [3]: client[b'key'] = b'value'
   In [4]: %timeit client[b'key']

   10000 loops, best of 3: 25.4 µs per loop

   In [5]: import diskcache as dc
   In [6]: cache = dc.Cache('tmp')
   In [7]: cache[b'key'] = b'value'
   In [8]: %timeit cache[b'key']

   100000 loops, best of 3: 11.8 µs per loop

**Note:** Micro-benchmarks have their place but are not a substitute for real
measurements. DiskCache offers cache benchmarks to defend its performance
claims. Micro-optimizations are avoided but your mileage may vary.

DiskCache efficiently makes gigabytes of storage space available for
caching. By leveraging rock-solid database libraries and memory-mapped files,
cache performance can match and exceed industry-standard solutions. There's no
need for a C compiler or running another process. Performance is a feature and
testing has 100% coverage with unit tests and hours of stress.

Testimonials
------------

`Daren Hasenkamp`_, Founder --

    "It's a useful, simple API, just like I love about Redis. It has reduced
    the amount of queries hitting my Elasticsearch cluster by over 25% for a
    website that gets over a million users/day (100+ hits/second)."

`Mathias Petermann`_, Senior Linux System Engineer --

    "I implemented it into a wrapper for our Ansible lookup modules and we were
    able to speed up some Ansible runs by almost 3 times. DiskCache is saving
    us a ton of time."

Does your company or website use `DiskCache`_? Send us a `message
<contact@grantjenks.com>`_ and let us know.

.. _`Daren Hasenkamp`: https://www.linkedin.com/in/daren-hasenkamp-93006438/
.. _`Mathias Petermann`: https://www.linkedin.com/in/mathias-petermann-a8aa273b/

Features
--------

- Pure-Python
- Fully Documented
- Benchmark comparisons (alternatives, Django cache backends)
- 100% test coverage
- Hours of stress testing
- Performance matters
- Django compatible API
- Thread-safe and process-safe
- Supports multiple eviction policies (LRU and LFU included)
- Keys support "tag" metadata and eviction
- Developed on Python 3.10
- Tested on CPython 3.6, 3.7, 3.8, 3.9, 3.10
- Tested on Linux, Mac OS X, and Windows
- Tested using GitHub Actions

.. image:: https://github.com/grantjenks/python-diskcache/workflows/integration/badge.svg
   :target: https://github.com/grantjenks/python-diskcache/actions?query=workflow%3Aintegration

.. image:: https://github.com/grantjenks/python-diskcache/workflows/release/badge.svg
   :target: https://github.com/grantjenks/python-diskcache/actions?query=workflow%3Arelease

Quickstart
----------

Installing `DiskCache`_ is simple with `pip <http://www.pip-installer.org/>`_::

  $ pip install diskcache

You can access documentation in the interpreter with Python's built-in help
function::

  >>> import diskcache
  >>> help(diskcache)                             # doctest: +SKIP

The core of `DiskCache`_ is three data types intended for caching. `Cache`_
objects manage a SQLite database and filesystem directory to store key and
value pairs. `FanoutCache`_ provides a sharding layer to utilize multiple
caches and `DjangoCache`_ integrates that with `Django`_::

  >>> from diskcache import Cache, FanoutCache, DjangoCache
  >>> help(Cache)                                 # doctest: +SKIP
  >>> help(FanoutCache)                           # doctest: +SKIP
  >>> help(DjangoCache)                           # doctest: +SKIP

Built atop the caching data types, are `Deque`_ and `Index`_ which work as a
cross-process, persistent replacements for Python's ``collections.deque`` and
``dict``. These implement the sequence and mapping container base classes::

  >>> from diskcache import Deque, Index
  >>> help(Deque)                                 # doctest: +SKIP
  >>> help(Index)                                 # doctest: +SKIP

Finally, a number of `recipes`_ for cross-process synchronization are provided
using an underlying cache. Features like memoization with cache stampede
prevention, cross-process locking, and cross-process throttling are available::

  >>> from diskcache import memoize_stampede, Lock, throttle
  >>> help(memoize_stampede)                      # doctest: +SKIP
  >>> help(Lock)                                  # doctest: +SKIP
  >>> help(throttle)                              # doctest: +SKIP

Python's docstrings are a quick way to get started but not intended as a
replacement for the `DiskCache Tutorial`_ and `DiskCache API Reference`_.

.. _`Cache`: http://www.grantjenks.com/docs/diskcache/tutorial.html#cache
.. _`FanoutCache`: http://www.grantjenks.com/docs/diskcache/tutorial.html#fanoutcache
.. _`DjangoCache`: http://www.grantjenks.com/docs/diskcache/tutorial.html#djangocache
.. _`Django`: https://www.djangoproject.com/
.. _`Deque`: http://www.grantjenks.com/docs/diskcache/tutorial.html#deque
.. _`Index`: http://www.grantjenks.com/docs/diskcache/tutorial.html#index
.. _`recipes`: http://www.grantjenks.com/docs/diskcache/tutorial.html#recipes

User Guide
----------

For those wanting more details, this part of the documentation describes
tutorial, benchmarks, API, and development.

* `DiskCache Tutorial`_
* `DiskCache Cache Benchmarks`_
* `DiskCache DjangoCache Benchmarks`_
* `Case Study: Web Crawler`_
* `Case Study: Landing Page Caching`_
* `Talk: All Things Cached - SF Python 2017 Meetup`_
* `DiskCache API Reference`_
* `DiskCache Development`_

.. _`DiskCache Tutorial`: http://www.grantjenks.com/docs/diskcache/tutorial.html
.. _`DiskCache Cache Benchmarks`: http://www.grantjenks.com/docs/diskcache/cache-benchmarks.html
.. _`DiskCache DjangoCache Benchmarks`: http://www.grantjenks.com/docs/diskcache/djangocache-benchmarks.html
.. _`Talk: All Things Cached - SF Python 2017 Meetup`: http://www.grantjenks.com/docs/diskcache/sf-python-2017-meetup-talk.html
.. _`Case Study: Web Crawler`: http://www.grantjenks.com/docs/diskcache/case-study-web-crawler.html
.. _`Case Study: Landing Page Caching`: http://www.grantjenks.com/docs/diskcache/case-study-landing-page-caching.html
.. _`DiskCache API Reference`: http://www.grantjenks.com/docs/diskcache/api.html
.. _`DiskCache Development`: http://www.grantjenks.com/docs/diskcache/development.html

Comparisons
-----------

Comparisons to popular projects related to `DiskCache`_.

Key-Value Stores
................

`DiskCache`_ is mostly a simple key-value store. Feature comparisons with four
other projects are shown in the tables below.

* `dbm`_ is part of Python's standard library and implements a generic
  interface to variants of the DBM database — dbm.gnu or dbm.ndbm. If none of
  these modules is installed, the slow-but-simple dbm.dumb is used.
* `shelve`_ is part of Python's standard library and implements a “shelf” as a
  persistent, dictionary-like object. The difference with “dbm” databases is
  that the values can be anything that the pickle module can handle.
* `sqlitedict`_ is a lightweight wrapper around Python's sqlite3 database with
  a simple, Pythonic dict-like interface and support for multi-thread
  access. Keys are arbitrary strings, values arbitrary pickle-able objects.
* `pickleDB`_ is a lightweight and simple key-value store. It is built upon
  Python's simplejson module and was inspired by Redis. It is licensed with the
  BSD three-clause license.

.. _`dbm`: https://docs.python.org/3/library/dbm.html
.. _`shelve`: https://docs.python.org/3/library/shelve.html
.. _`sqlitedict`: https://github.com/RaRe-Technologies/sqlitedict
.. _`pickleDB`: https://pythonhosted.org/pickleDB/

**Features**

================ ============= ========= ========= ============ ============
Feature          diskcache     dbm       shelve    sqlitedict   pickleDB
================ ============= ========= ========= ============ ============
Atomic?          Always        Maybe     Maybe     Maybe        No
Persistent?      Yes           Yes       Yes       Yes          Yes
Thread-safe?     Yes           No        No        Yes          No
Process-safe?    Yes           No        No        Maybe        No
Backend?         SQLite        DBM       DBM       SQLite       File
Serialization?   Customizable  None      Pickle    Customizable JSON
Data Types?      Mapping/Deque Mapping   Mapping   Mapping      Mapping
Ordering?        Insert/Sorted None      None      None         None
Eviction?        LRU/LFU/more  None      None      None         None
Vacuum?          Automatic     Maybe     Maybe     Manual       Automatic
Transactions?    Yes           No        No        Maybe        No
Multiprocessing? Yes           No        No        No           No
Forkable?        Yes           No        No        No           No
Metadata?        Yes           No        No        No           No
================ ============= ========= ========= ============ ============

**Quality**

================ ============= ========= ========= ============ ============
Project          diskcache     dbm       shelve    sqlitedict   pickleDB
================ ============= ========= ========= ============ ============
Tests?           Yes           Yes       Yes       Yes          Yes
Coverage?        Yes           Yes       Yes       Yes          No
Stress?          Yes           No        No        No           No
CI Tests?        Linux/Windows Yes       Yes       Linux        No
Python?          2/3/PyPy      All       All       2/3          2/3
License?         Apache2       Python    Python    Apache2      3-Clause BSD
Docs?            Extensive     Summary   Summary   Readme       Summary
Benchmarks?      Yes           No        No        No           No
Sources?         GitHub        GitHub    GitHub    GitHub       GitHub
Pure-Python?     Yes           Yes       Yes       Yes          Yes
Server?          No            No        No        No           No
Integrations?    Django        None      None      None         None
================ ============= ========= ========= ============ ============

**Timings**

These are rough measurements. See `DiskCache Cache Benchmarks`_ for more
rigorous data.

================ ============= ========= ========= ============ ============
Project          diskcache     dbm       shelve    sqlitedict   pickleDB
================ ============= ========= ========= ============ ============
get                      25 µs     36 µs     41 µs       513 µs        92 µs
set                     198 µs    900 µs    928 µs       697 µs     1,020 µs
delete                  248 µs    740 µs    702 µs     1,717 µs     1,020 µs
================ ============= ========= ========= ============ ============

Caching Libraries
.................

* `joblib.Memory`_ provides caching functions and works by explicitly saving
  the inputs and outputs to files. It is designed to work with non-hashable and
  potentially large input and output data types such as numpy arrays.
* `klepto`_ extends Python’s `lru_cache` to utilize different keymaps and
  alternate caching algorithms, such as `lfu_cache` and `mru_cache`. Klepto
  uses a simple dictionary-sytle interface for all caches and archives.

.. _`klepto`: https://pypi.org/project/klepto/
.. _`joblib.Memory`: https://joblib.readthedocs.io/en/latest/memory.html

Data Structures
...............

* `dict`_ is a mapping object that maps hashable keys to arbitrary
  values. Mappings are mutable objects. There is currently only one standard
  Python mapping type, the dictionary.
* `pandas`_ is a Python package providing fast, flexible, and expressive data
  structures designed to make working with “relational” or “labeled” data both
  easy and intuitive.
* `Sorted Containers`_ is an Apache2 licensed sorted collections library,
  written in pure-Python, and fast as C-extensions. Sorted Containers
  implements sorted list, sorted dictionary, and sorted set data types.

.. _`dict`: https://docs.python.org/3/library/stdtypes.html#typesmapping
.. _`pandas`: https://pandas.pydata.org/
.. _`Sorted Containers`: http://www.grantjenks.com/docs/sortedcontainers/

Pure-Python Databases
.....................

* `ZODB`_ supports an isomorphic interface for database operations which means
  there's little impact on your code to make objects persistent and there's no
  database mapper that partially hides the datbase.
* `CodernityDB`_ is an open source, pure-Python, multi-platform, schema-less,
  NoSQL database and includes an HTTP server version, and a Python client
  library that aims to be 100% compatible with the embedded version.
* `TinyDB`_ is a tiny, document oriented database optimized for your
  happiness. If you need a simple database with a clean API that just works
  without lots of configuration, TinyDB might be the right choice for you.

.. _`ZODB`: http://www.zodb.org/
.. _`CodernityDB`: https://pypi.org/project/CodernityDB/
.. _`TinyDB`: https://tinydb.readthedocs.io/

Object Relational Mappings (ORM)
................................

* `Django ORM`_ provides models that are the single, definitive source of
  information about data and contains the essential fields and behaviors of the
  stored data. Generally, each model maps to a single SQL database table.
* `SQLAlchemy`_ is the Python SQL toolkit and Object Relational Mapper that
  gives application developers the full power and flexibility of SQL. It
  provides a full suite of well known enterprise-level persistence patterns.
* `Peewee`_ is a simple and small ORM. It has few (but expressive) concepts,
  making it easy to learn and intuitive to use. Peewee supports Sqlite, MySQL,
  and PostgreSQL with tons of extensions.
* `SQLObject`_ is a popular Object Relational Manager for providing an object
  interface to your database, with tables as classes, rows as instances, and
  columns as attributes.
* `Pony ORM`_ is a Python ORM with beautiful query syntax. Use Python syntax
  for interacting with the database. Pony translates such queries into SQL and
  executes them in the database in the most efficient way.

.. _`Django ORM`: https://docs.djangoproject.com/en/dev/topics/db/
.. _`SQLAlchemy`: https://www.sqlalchemy.org/
.. _`Peewee`: http://docs.peewee-orm.com/
.. _`SQLObject`: http://sqlobject.org/
.. _`Pony ORM`: https://ponyorm.com/

SQL Databases
.............

* `SQLite`_ is part of Python's standard library and provides a lightweight
  disk-based database that doesn’t require a separate server process and allows
  accessing the database using a nonstandard variant of the SQL query language.
* `MySQL`_ is one of the world’s most popular open source databases and has
  become a leading database choice for web-based applications. MySQL includes a
  standardized database driver for Python platforms and development.
* `PostgreSQL`_ is a powerful, open source object-relational database system
  with over 30 years of active development. Psycopg is the most popular
  PostgreSQL adapter for the Python programming language.
* `Oracle DB`_ is a relational database management system (RDBMS) from the
  Oracle Corporation. Originally developed in 1977, Oracle DB is one of the
  most trusted and widely used enterprise relational database engines.
* `Microsoft SQL Server`_ is a relational database management system developed
  by Microsoft. As a database server, it stores and retrieves data as requested
  by other software applications.

.. _`SQLite`: https://docs.python.org/3/library/sqlite3.html
.. _`MySQL`: https://dev.mysql.com/downloads/connector/python/
.. _`PostgreSQL`: http://initd.org/psycopg/
.. _`Oracle DB`: https://pypi.org/project/cx_Oracle/
.. _`Microsoft SQL Server`: https://pypi.org/project/pyodbc/

Other Databases
...............

* `Memcached`_ is free and open source, high-performance, distributed memory
  object caching system, generic in nature, but intended for use in speeding up
  dynamic web applications by alleviating database load.
* `Redis`_ is an open source, in-memory data structure store, used as a
  database, cache and message broker. It supports data structures such as
  strings, hashes, lists, sets, sorted sets with range queries, and more.
* `MongoDB`_ is a cross-platform document-oriented database program. Classified
  as a NoSQL database program, MongoDB uses JSON-like documents with
  schema. PyMongo is the recommended way to work with MongoDB from Python.
* `LMDB`_ is a lightning-fast, memory-mapped database. With memory-mapped
  files, it has the read performance of a pure in-memory database while
  retaining the persistence of standard disk-based databases.
* `BerkeleyDB`_ is a software library intended to provide a high-performance
  embedded database for key/value data. Berkeley DB is a programmatic toolkit
  that provides built-in database support for desktop and server applications.
* `LevelDB`_ is a fast key-value storage library written at Google that
  provides an ordered mapping from string keys to string values. Data is stored
  sorted by key and users can provide a custom comparison function.

.. _`Memcached`: https://pypi.org/project/python-memcached/
.. _`MongoDB`: https://api.mongodb.com/python/current/
.. _`Redis`: https://redis.io/clients#python
.. _`LMDB`: https://lmdb.readthedocs.io/
.. _`BerkeleyDB`: https://pypi.org/project/bsddb3/
.. _`LevelDB`: https://plyvel.readthedocs.io/

Reference
---------

* `DiskCache Documentation`_
* `DiskCache at PyPI`_
* `DiskCache at GitHub`_
* `DiskCache Issue Tracker`_

.. _`DiskCache Documentation`: http://www.grantjenks.com/docs/diskcache/
.. _`DiskCache at PyPI`: https://pypi.python.org/pypi/diskcache/
.. _`DiskCache at GitHub`: https://github.com/grantjenks/python-diskcache/
.. _`DiskCache Issue Tracker`: https://github.com/grantjenks/python-diskcache/issues/

License
-------

Copyright 2016-2023 Grant Jenks

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License.  You may obtain a copy of the
License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.

.. _`DiskCache`: http://www.grantjenks.com/docs/diskcache/

            

Raw data

            {
    "_id": null,
    "home_page": "http://www.grantjenks.com/docs/diskcache/",
    "name": "diskcache",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3",
    "maintainer_email": "",
    "keywords": "",
    "author": "Grant Jenks",
    "author_email": "contact@grantjenks.com",
    "download_url": "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz",
    "platform": null,
    "description": "DiskCache: Disk Backed Cache\n============================\n\n`DiskCache`_ is an Apache2 licensed disk and file backed cache library, written\nin pure-Python, and compatible with Django.\n\nThe cloud-based computing of 2023 puts a premium on memory. Gigabytes of empty\nspace is left on disks as processes vie for memory. Among these processes is\nMemcached (and sometimes Redis) which is used as a cache. Wouldn't it be nice\nto leverage empty disk space for caching?\n\nDjango is Python's most popular web framework and ships with several caching\nbackends. Unfortunately the file-based cache in Django is essentially\nbroken. The culling method is random and large caches repeatedly scan a cache\ndirectory which slows linearly with growth. Can you really allow it to take\nsixty milliseconds to store a key in a cache with a thousand items?\n\nIn Python, we can do better. And we can do it in pure-Python!\n\n::\n\n   In [1]: import pylibmc\n   In [2]: client = pylibmc.Client(['127.0.0.1'], binary=True)\n   In [3]: client[b'key'] = b'value'\n   In [4]: %timeit client[b'key']\n\n   10000 loops, best of 3: 25.4 \u00b5s per loop\n\n   In [5]: import diskcache as dc\n   In [6]: cache = dc.Cache('tmp')\n   In [7]: cache[b'key'] = b'value'\n   In [8]: %timeit cache[b'key']\n\n   100000 loops, best of 3: 11.8 \u00b5s per loop\n\n**Note:** Micro-benchmarks have their place but are not a substitute for real\nmeasurements. DiskCache offers cache benchmarks to defend its performance\nclaims. Micro-optimizations are avoided but your mileage may vary.\n\nDiskCache efficiently makes gigabytes of storage space available for\ncaching. By leveraging rock-solid database libraries and memory-mapped files,\ncache performance can match and exceed industry-standard solutions. There's no\nneed for a C compiler or running another process. Performance is a feature and\ntesting has 100% coverage with unit tests and hours of stress.\n\nTestimonials\n------------\n\n`Daren Hasenkamp`_, Founder --\n\n    \"It's a useful, simple API, just like I love about Redis. It has reduced\n    the amount of queries hitting my Elasticsearch cluster by over 25% for a\n    website that gets over a million users/day (100+ hits/second).\"\n\n`Mathias Petermann`_, Senior Linux System Engineer --\n\n    \"I implemented it into a wrapper for our Ansible lookup modules and we were\n    able to speed up some Ansible runs by almost 3 times. DiskCache is saving\n    us a ton of time.\"\n\nDoes your company or website use `DiskCache`_? Send us a `message\n<contact@grantjenks.com>`_ and let us know.\n\n.. _`Daren Hasenkamp`: https://www.linkedin.com/in/daren-hasenkamp-93006438/\n.. _`Mathias Petermann`: https://www.linkedin.com/in/mathias-petermann-a8aa273b/\n\nFeatures\n--------\n\n- Pure-Python\n- Fully Documented\n- Benchmark comparisons (alternatives, Django cache backends)\n- 100% test coverage\n- Hours of stress testing\n- Performance matters\n- Django compatible API\n- Thread-safe and process-safe\n- Supports multiple eviction policies (LRU and LFU included)\n- Keys support \"tag\" metadata and eviction\n- Developed on Python 3.10\n- Tested on CPython 3.6, 3.7, 3.8, 3.9, 3.10\n- Tested on Linux, Mac OS X, and Windows\n- Tested using GitHub Actions\n\n.. image:: https://github.com/grantjenks/python-diskcache/workflows/integration/badge.svg\n   :target: https://github.com/grantjenks/python-diskcache/actions?query=workflow%3Aintegration\n\n.. image:: https://github.com/grantjenks/python-diskcache/workflows/release/badge.svg\n   :target: https://github.com/grantjenks/python-diskcache/actions?query=workflow%3Arelease\n\nQuickstart\n----------\n\nInstalling `DiskCache`_ is simple with `pip <http://www.pip-installer.org/>`_::\n\n  $ pip install diskcache\n\nYou can access documentation in the interpreter with Python's built-in help\nfunction::\n\n  >>> import diskcache\n  >>> help(diskcache)                             # doctest: +SKIP\n\nThe core of `DiskCache`_ is three data types intended for caching. `Cache`_\nobjects manage a SQLite database and filesystem directory to store key and\nvalue pairs. `FanoutCache`_ provides a sharding layer to utilize multiple\ncaches and `DjangoCache`_ integrates that with `Django`_::\n\n  >>> from diskcache import Cache, FanoutCache, DjangoCache\n  >>> help(Cache)                                 # doctest: +SKIP\n  >>> help(FanoutCache)                           # doctest: +SKIP\n  >>> help(DjangoCache)                           # doctest: +SKIP\n\nBuilt atop the caching data types, are `Deque`_ and `Index`_ which work as a\ncross-process, persistent replacements for Python's ``collections.deque`` and\n``dict``. These implement the sequence and mapping container base classes::\n\n  >>> from diskcache import Deque, Index\n  >>> help(Deque)                                 # doctest: +SKIP\n  >>> help(Index)                                 # doctest: +SKIP\n\nFinally, a number of `recipes`_ for cross-process synchronization are provided\nusing an underlying cache. Features like memoization with cache stampede\nprevention, cross-process locking, and cross-process throttling are available::\n\n  >>> from diskcache import memoize_stampede, Lock, throttle\n  >>> help(memoize_stampede)                      # doctest: +SKIP\n  >>> help(Lock)                                  # doctest: +SKIP\n  >>> help(throttle)                              # doctest: +SKIP\n\nPython's docstrings are a quick way to get started but not intended as a\nreplacement for the `DiskCache Tutorial`_ and `DiskCache API Reference`_.\n\n.. _`Cache`: http://www.grantjenks.com/docs/diskcache/tutorial.html#cache\n.. _`FanoutCache`: http://www.grantjenks.com/docs/diskcache/tutorial.html#fanoutcache\n.. _`DjangoCache`: http://www.grantjenks.com/docs/diskcache/tutorial.html#djangocache\n.. _`Django`: https://www.djangoproject.com/\n.. _`Deque`: http://www.grantjenks.com/docs/diskcache/tutorial.html#deque\n.. _`Index`: http://www.grantjenks.com/docs/diskcache/tutorial.html#index\n.. _`recipes`: http://www.grantjenks.com/docs/diskcache/tutorial.html#recipes\n\nUser Guide\n----------\n\nFor those wanting more details, this part of the documentation describes\ntutorial, benchmarks, API, and development.\n\n* `DiskCache Tutorial`_\n* `DiskCache Cache Benchmarks`_\n* `DiskCache DjangoCache Benchmarks`_\n* `Case Study: Web Crawler`_\n* `Case Study: Landing Page Caching`_\n* `Talk: All Things Cached - SF Python 2017 Meetup`_\n* `DiskCache API Reference`_\n* `DiskCache Development`_\n\n.. _`DiskCache Tutorial`: http://www.grantjenks.com/docs/diskcache/tutorial.html\n.. _`DiskCache Cache Benchmarks`: http://www.grantjenks.com/docs/diskcache/cache-benchmarks.html\n.. _`DiskCache DjangoCache Benchmarks`: http://www.grantjenks.com/docs/diskcache/djangocache-benchmarks.html\n.. _`Talk: All Things Cached - SF Python 2017 Meetup`: http://www.grantjenks.com/docs/diskcache/sf-python-2017-meetup-talk.html\n.. _`Case Study: Web Crawler`: http://www.grantjenks.com/docs/diskcache/case-study-web-crawler.html\n.. _`Case Study: Landing Page Caching`: http://www.grantjenks.com/docs/diskcache/case-study-landing-page-caching.html\n.. _`DiskCache API Reference`: http://www.grantjenks.com/docs/diskcache/api.html\n.. _`DiskCache Development`: http://www.grantjenks.com/docs/diskcache/development.html\n\nComparisons\n-----------\n\nComparisons to popular projects related to `DiskCache`_.\n\nKey-Value Stores\n................\n\n`DiskCache`_ is mostly a simple key-value store. Feature comparisons with four\nother projects are shown in the tables below.\n\n* `dbm`_ is part of Python's standard library and implements a generic\n  interface to variants of the DBM database \u2014 dbm.gnu or dbm.ndbm. If none of\n  these modules is installed, the slow-but-simple dbm.dumb is used.\n* `shelve`_ is part of Python's standard library and implements a \u201cshelf\u201d as a\n  persistent, dictionary-like object. The difference with \u201cdbm\u201d databases is\n  that the values can be anything that the pickle module can handle.\n* `sqlitedict`_ is a lightweight wrapper around Python's sqlite3 database with\n  a simple, Pythonic dict-like interface and support for multi-thread\n  access. Keys are arbitrary strings, values arbitrary pickle-able objects.\n* `pickleDB`_ is a lightweight and simple key-value store. It is built upon\n  Python's simplejson module and was inspired by Redis. It is licensed with the\n  BSD three-clause license.\n\n.. _`dbm`: https://docs.python.org/3/library/dbm.html\n.. _`shelve`: https://docs.python.org/3/library/shelve.html\n.. _`sqlitedict`: https://github.com/RaRe-Technologies/sqlitedict\n.. _`pickleDB`: https://pythonhosted.org/pickleDB/\n\n**Features**\n\n================ ============= ========= ========= ============ ============\nFeature          diskcache     dbm       shelve    sqlitedict   pickleDB\n================ ============= ========= ========= ============ ============\nAtomic?          Always        Maybe     Maybe     Maybe        No\nPersistent?      Yes           Yes       Yes       Yes          Yes\nThread-safe?     Yes           No        No        Yes          No\nProcess-safe?    Yes           No        No        Maybe        No\nBackend?         SQLite        DBM       DBM       SQLite       File\nSerialization?   Customizable  None      Pickle    Customizable JSON\nData Types?      Mapping/Deque Mapping   Mapping   Mapping      Mapping\nOrdering?        Insert/Sorted None      None      None         None\nEviction?        LRU/LFU/more  None      None      None         None\nVacuum?          Automatic     Maybe     Maybe     Manual       Automatic\nTransactions?    Yes           No        No        Maybe        No\nMultiprocessing? Yes           No        No        No           No\nForkable?        Yes           No        No        No           No\nMetadata?        Yes           No        No        No           No\n================ ============= ========= ========= ============ ============\n\n**Quality**\n\n================ ============= ========= ========= ============ ============\nProject          diskcache     dbm       shelve    sqlitedict   pickleDB\n================ ============= ========= ========= ============ ============\nTests?           Yes           Yes       Yes       Yes          Yes\nCoverage?        Yes           Yes       Yes       Yes          No\nStress?          Yes           No        No        No           No\nCI Tests?        Linux/Windows Yes       Yes       Linux        No\nPython?          2/3/PyPy      All       All       2/3          2/3\nLicense?         Apache2       Python    Python    Apache2      3-Clause BSD\nDocs?            Extensive     Summary   Summary   Readme       Summary\nBenchmarks?      Yes           No        No        No           No\nSources?         GitHub        GitHub    GitHub    GitHub       GitHub\nPure-Python?     Yes           Yes       Yes       Yes          Yes\nServer?          No            No        No        No           No\nIntegrations?    Django        None      None      None         None\n================ ============= ========= ========= ============ ============\n\n**Timings**\n\nThese are rough measurements. See `DiskCache Cache Benchmarks`_ for more\nrigorous data.\n\n================ ============= ========= ========= ============ ============\nProject          diskcache     dbm       shelve    sqlitedict   pickleDB\n================ ============= ========= ========= ============ ============\nget                      25 \u00b5s     36 \u00b5s     41 \u00b5s       513 \u00b5s        92 \u00b5s\nset                     198 \u00b5s    900 \u00b5s    928 \u00b5s       697 \u00b5s     1,020 \u00b5s\ndelete                  248 \u00b5s    740 \u00b5s    702 \u00b5s     1,717 \u00b5s     1,020 \u00b5s\n================ ============= ========= ========= ============ ============\n\nCaching Libraries\n.................\n\n* `joblib.Memory`_ provides caching functions and works by explicitly saving\n  the inputs and outputs to files. It is designed to work with non-hashable and\n  potentially large input and output data types such as numpy arrays.\n* `klepto`_ extends Python\u2019s `lru_cache` to utilize different keymaps and\n  alternate caching algorithms, such as `lfu_cache` and `mru_cache`. Klepto\n  uses a simple dictionary-sytle interface for all caches and archives.\n\n.. _`klepto`: https://pypi.org/project/klepto/\n.. _`joblib.Memory`: https://joblib.readthedocs.io/en/latest/memory.html\n\nData Structures\n...............\n\n* `dict`_ is a mapping object that maps hashable keys to arbitrary\n  values. Mappings are mutable objects. There is currently only one standard\n  Python mapping type, the dictionary.\n* `pandas`_ is a Python package providing fast, flexible, and expressive data\n  structures designed to make working with \u201crelational\u201d or \u201clabeled\u201d data both\n  easy and intuitive.\n* `Sorted Containers`_ is an Apache2 licensed sorted collections library,\n  written in pure-Python, and fast as C-extensions. Sorted Containers\n  implements sorted list, sorted dictionary, and sorted set data types.\n\n.. _`dict`: https://docs.python.org/3/library/stdtypes.html#typesmapping\n.. _`pandas`: https://pandas.pydata.org/\n.. _`Sorted Containers`: http://www.grantjenks.com/docs/sortedcontainers/\n\nPure-Python Databases\n.....................\n\n* `ZODB`_ supports an isomorphic interface for database operations which means\n  there's little impact on your code to make objects persistent and there's no\n  database mapper that partially hides the datbase.\n* `CodernityDB`_ is an open source, pure-Python, multi-platform, schema-less,\n  NoSQL database and includes an HTTP server version, and a Python client\n  library that aims to be 100% compatible with the embedded version.\n* `TinyDB`_ is a tiny, document oriented database optimized for your\n  happiness. If you need a simple database with a clean API that just works\n  without lots of configuration, TinyDB might be the right choice for you.\n\n.. _`ZODB`: http://www.zodb.org/\n.. _`CodernityDB`: https://pypi.org/project/CodernityDB/\n.. _`TinyDB`: https://tinydb.readthedocs.io/\n\nObject Relational Mappings (ORM)\n................................\n\n* `Django ORM`_ provides models that are the single, definitive source of\n  information about data and contains the essential fields and behaviors of the\n  stored data. Generally, each model maps to a single SQL database table.\n* `SQLAlchemy`_ is the Python SQL toolkit and Object Relational Mapper that\n  gives application developers the full power and flexibility of SQL. It\n  provides a full suite of well known enterprise-level persistence patterns.\n* `Peewee`_ is a simple and small ORM. It has few (but expressive) concepts,\n  making it easy to learn and intuitive to use. Peewee supports Sqlite, MySQL,\n  and PostgreSQL with tons of extensions.\n* `SQLObject`_ is a popular Object Relational Manager for providing an object\n  interface to your database, with tables as classes, rows as instances, and\n  columns as attributes.\n* `Pony ORM`_ is a Python ORM with beautiful query syntax. Use Python syntax\n  for interacting with the database. Pony translates such queries into SQL and\n  executes them in the database in the most efficient way.\n\n.. _`Django ORM`: https://docs.djangoproject.com/en/dev/topics/db/\n.. _`SQLAlchemy`: https://www.sqlalchemy.org/\n.. _`Peewee`: http://docs.peewee-orm.com/\n.. _`SQLObject`: http://sqlobject.org/\n.. _`Pony ORM`: https://ponyorm.com/\n\nSQL Databases\n.............\n\n* `SQLite`_ is part of Python's standard library and provides a lightweight\n  disk-based database that doesn\u2019t require a separate server process and allows\n  accessing the database using a nonstandard variant of the SQL query language.\n* `MySQL`_ is one of the world\u2019s most popular open source databases and has\n  become a leading database choice for web-based applications. MySQL includes a\n  standardized database driver for Python platforms and development.\n* `PostgreSQL`_ is a powerful, open source object-relational database system\n  with over 30 years of active development. Psycopg is the most popular\n  PostgreSQL adapter for the Python programming language.\n* `Oracle DB`_ is a relational database management system (RDBMS) from the\n  Oracle Corporation. Originally developed in 1977, Oracle DB is one of the\n  most trusted and widely used enterprise relational database engines.\n* `Microsoft SQL Server`_ is a relational database management system developed\n  by Microsoft. As a database server, it stores and retrieves data as requested\n  by other software applications.\n\n.. _`SQLite`: https://docs.python.org/3/library/sqlite3.html\n.. _`MySQL`: https://dev.mysql.com/downloads/connector/python/\n.. _`PostgreSQL`: http://initd.org/psycopg/\n.. _`Oracle DB`: https://pypi.org/project/cx_Oracle/\n.. _`Microsoft SQL Server`: https://pypi.org/project/pyodbc/\n\nOther Databases\n...............\n\n* `Memcached`_ is free and open source, high-performance, distributed memory\n  object caching system, generic in nature, but intended for use in speeding up\n  dynamic web applications by alleviating database load.\n* `Redis`_ is an open source, in-memory data structure store, used as a\n  database, cache and message broker. It supports data structures such as\n  strings, hashes, lists, sets, sorted sets with range queries, and more.\n* `MongoDB`_ is a cross-platform document-oriented database program. Classified\n  as a NoSQL database program, MongoDB uses JSON-like documents with\n  schema. PyMongo is the recommended way to work with MongoDB from Python.\n* `LMDB`_ is a lightning-fast, memory-mapped database. With memory-mapped\n  files, it has the read performance of a pure in-memory database while\n  retaining the persistence of standard disk-based databases.\n* `BerkeleyDB`_ is a software library intended to provide a high-performance\n  embedded database for key/value data. Berkeley DB is a programmatic toolkit\n  that provides built-in database support for desktop and server applications.\n* `LevelDB`_ is a fast key-value storage library written at Google that\n  provides an ordered mapping from string keys to string values. Data is stored\n  sorted by key and users can provide a custom comparison function.\n\n.. _`Memcached`: https://pypi.org/project/python-memcached/\n.. _`MongoDB`: https://api.mongodb.com/python/current/\n.. _`Redis`: https://redis.io/clients#python\n.. _`LMDB`: https://lmdb.readthedocs.io/\n.. _`BerkeleyDB`: https://pypi.org/project/bsddb3/\n.. _`LevelDB`: https://plyvel.readthedocs.io/\n\nReference\n---------\n\n* `DiskCache Documentation`_\n* `DiskCache at PyPI`_\n* `DiskCache at GitHub`_\n* `DiskCache Issue Tracker`_\n\n.. _`DiskCache Documentation`: http://www.grantjenks.com/docs/diskcache/\n.. _`DiskCache at PyPI`: https://pypi.python.org/pypi/diskcache/\n.. _`DiskCache at GitHub`: https://github.com/grantjenks/python-diskcache/\n.. _`DiskCache Issue Tracker`: https://github.com/grantjenks/python-diskcache/issues/\n\nLicense\n-------\n\nCopyright 2016-2023 Grant Jenks\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License.  You may obtain a copy of the\nLicense at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n\n.. _`DiskCache`: http://www.grantjenks.com/docs/diskcache/\n",
    "bugtrack_url": null,
    "license": "Apache 2.0",
    "summary": "Disk Cache -- Disk and file backed persistent cache.",
    "version": "5.6.3",
    "project_urls": {
        "Documentation": "http://www.grantjenks.com/docs/diskcache/",
        "Funding": "https://gum.co/diskcache",
        "Homepage": "http://www.grantjenks.com/docs/diskcache/",
        "Source": "https://github.com/grantjenks/python-diskcache",
        "Tracker": "https://github.com/grantjenks/python-diskcache/issues"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f274570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9",
                "md5": "391c230cc36937e1b78eef3ec7594b41",
                "sha256": "5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"
            },
            "downloads": -1,
            "filename": "diskcache-5.6.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "391c230cc36937e1b78eef3ec7594b41",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3",
            "size": 45550,
            "upload_time": "2023-08-31T06:11:58",
            "upload_time_iso_8601": "2023-08-31T06:11:58.822453Z",
            "url": "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f211c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6",
                "md5": "d92b4afa944bb70ed38c84a622f7abb5",
                "sha256": "2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"
            },
            "downloads": -1,
            "filename": "diskcache-5.6.3.tar.gz",
            "has_sig": false,
            "md5_digest": "d92b4afa944bb70ed38c84a622f7abb5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3",
            "size": 67916,
            "upload_time": "2023-08-31T06:12:00",
            "upload_time_iso_8601": "2023-08-31T06:12:00.316130Z",
            "url": "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-08-31 06:12:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "grantjenks",
    "github_project": "python-diskcache",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "diskcache"
}
        
Elapsed time: 0.11209s