/py-cache-guiosoft

Cache control with multiple storage types

Primary LanguagePythonMIT LicenseMIT

CACHE GUIOSOFT

Caching data using files, Redis or local SQLite

codecov Codecov push

[codecov]

Upload Python Package

Local files for caching

from cache_gs import CacheGS

# Storage on local directory

file_cache = CacheGS('path://directory_for_cache_storage')

# Storage on local SQLite database

slite_cache = CacheGS('sqlite://directory_or_file_for_storage')

# Storage on Redis

redis_cache = CacheGS('redis://host:6379')

[More options for redis](#Redis options and example)

Usage

Like INI files, data is grouped in section/key names.

Installing

pip install cache-guiosoft

Writing value

cache.set_value(section, key, value, ttl: int = 0)

# ttl is the life time of value in seconds from the time is created

Reading value

value = cache.get_value(section, key, default=None)

Deleting value

cache.delete_value(section, key)

Purging expired data

  • On Redis cache, this is handled by the server, automatically.
  • On SQLite cache, purging is executing on every instantiation.
  • On Local File cache, purging is automatically executed once a day, checked on every instantiation.

Force purging expired data

cache.purge_expired()

Redis options and example

Redis connection uses the redis-py component from Andy McCurdy. You can use the same connection strings that the Redis class uses:

  • redis://[[username]:[password]]@localhost:6379/0

  • rediss://[[username]:[password]]@localhost:6379/0

  • unix://[[username]:[password]]@/path/to/socket.sock?db=0

      Three URL schemes are supported:
    
      - ```redis://``
        <http://www.iana.org/assignments/uri-schemes/prov/redis>`_ creates a
        normal TCP socket connection
      - ```rediss://``
        <http://www.iana.org/assignments/uri-schemes/prov/rediss>`_ creates a
        SSL wrapped TCP socket connection
      - ``unix://`` creates a Unix Domain Socket connection
    
      There are several ways to specify a database number. The parse function
      will return the first specified option:
          1. A ``db`` querystring option, e.g. redis://localhost?db=0
          2. If using the redis:// scheme, the path argument of the url, e.g.
             redis://localhost/0
          3. The ``db`` argument to this function.
    
      If none of these options are specified, db=0 is used.
    

Redis on docker

docker-compose.yaml

redis:
    container_name: 'redis'
    image: 'redis:4-alpine'
    command: redis-server --requirepass 1234
    ports:
        - '6379:6379'

For testing, just run:

docker-compose up