Skip to content

Latest commit

 

History

History
316 lines (199 loc) · 14.4 KB

CHANGES.rst

File metadata and controls

316 lines (199 loc) · 14.4 KB

CHANGES

1.0.0 (2023-xx-xx)

Migration instructions

There are a number of backwards-incompatible changes. These points should help with migrating from an older release:

  • RedisBackend now expects a redis.Redis instance as an argument, instead of creating one internally from keyword arguments.
  • The key_builder parameter for caches now expects a callback which accepts 2 strings and returns a string in all cache implementations, making the builders simpler and interchangeable.
  • The key parameter has been removed from the cached decorator. The behaviour can be easily reimplemented with key_builder=lambda *a, **kw: "foo"
  • When using the key_builder parameter in @multicached, the function will now return the original, unmodified keys, only using the transformed keys in the cache (this has always been the documented behaviour, but not the implemented behaviour).
  • BaseCache and BaseSerializer are now ABCs, so cannot be instantiated directly.
  • If subclassing BaseCache to implement a custom backend:
    • The cache key type used by the backend must now be specified when inheriting (e.g. BaseCache[str] typically).
    • The build_key() method must now be defined (this should generally involve calling self._str_build_key() as a helper).

0.12.0 (2023-01-13)

  • Added async with support to BaseCache.
  • Added initial typing support.
  • Migrated to redis library (aioredis is no longer supported).
  • SimpleMemoryBackend now has a cache per instance, rather than a global cache.
  • Improved support for build_key(key, namespace) [#569](#569) -- Padraic Shafer
  • Removed deprecated loop parameters.
  • Removed deprecated cache parameter from create().
  • Added support for keyword arguments in TimingPlugin methods.
  • Fixed inconsistent enum keys between different Python versions. -- Padraic Shafer
  • Fixed .clear() breaking when no keys are present.
  • Fixed from aiocache import *.
  • Fixed .delete() when values are falsy.

0.11.1 (2019-07-31)

  • Don't hardcode import redis and memcached in factory [#461](#461) - Manuel Miranda

0.11.0 (2019-07-31)

  • Support str for timeout and ttl [#454](#454) - Manuel Miranda
  • Add aiocache_wait_for_write decorator param [#448](#448) - Manuel Miranda
  • Extend and improve usage of Cache class [#446](#446) - Manuel Miranda
  • Add caches.add functionality [#440](#440) - Manuel Miranda
  • Use raw msgpack attribute for loads [#439](#439) - Manuel Miranda
  • Add docs regarding plugin timeouts and multicached [#438](#438) - Manuel Miranda
  • Fix typehints in lock.py [#434](#434) - Aviv
  • Use pytest_configure instead of pytest_namespace [#436](#436) - Manuel Miranda
  • Add Cache class factory [#430](#430) - Manuel Miranda

0.10.1 (2018-11-15)

  • Cancel the previous ttl timer if exists when setting a new value in the in-memory cache [#424](#424) - Minh Tu Le
  • Add python 3.7 to CI, now its supported! [#420](#420) - Manuel Miranda
  • Add function as parameter for key_builder [#417](#417) - Manuel Miranda
  • Always use __name__ when getting logger [#412](#412) - Mansur Mamkin
  • Format code with black [#410](#410) - Manuel Miranda

0.10.0 (2018-06-17)

  • Cache can be disabled in decorated functions using cache_read and cache_write [#404](#404) - Josep Cugat
  • Cache constructor can receive now default ttl [#405](#405) - Josep Cugat

0.9.1 (2018-04-27)

  • Single deploy step [#395](#395) - Manuel Miranda
  • Catch ImportError when importing optional msgpack [#398](#398) - Paweł Kowalski
  • Lazy load redis asyncio.Lock [#397](#397) - Jordi Soucheiron

0.9.0 (2018-04-24)

* Bug #389/propagate redlock exceptions [#394](#394) - Manuel Miranda

___aexit__ was returning whether asyncio Event was removed or not. In

some cases this was avoiding the context manager to propagate exceptions happening inside. Now its not returning anything and will raise always any exception raised from inside

  • Fix sphinx build [#392](#392) - Manuel Miranda _Also add extra step in build pipeline to avoid future errors._
  • Update alias config when config already exists [#383](#383) - Josep Cugat
  • Ensure serializers are instances [#379](#379) - Manuel Miranda
  • Add MsgPackSerializer [#370](#370) - Adam Hopkins
  • Add create_connection_timeout for redis>=1.0.0 when creating connections [#368](#368) - tmarques82
  • Fixed spelling error in serializers.py [#371](#371) - Jared Shields

0.8.0 (2017-11-08)

  • Add pypy support in build pipeline [#359](#359) - Manuel Miranda
  • Fix multicached bug when using keys as an arg rather than kwarg [#356](#356) - Manuel Miranda
  • Reuse cache when using decorators with alias [#355](#355) - Manuel Miranda
  • Cache available from function.cache object for decorated functions [#354](#354) - Manuel Miranda
  • aioredis and aiomcache are now optional dependencies [#337](#337) - Jair Henrique
  • Generate wheel package on release [#338](#338) - Jair Henrique
  • Add key_builder param to caches to customize keys [#315](#315) - Manuel Miranda

0.7.2 (2017-07-23)

  • Add key_builder param to caches to customize keys [#310](#310) - Manuel Miranda
  • Propagate correct message on memcached connector error [#309](#309) - Manuel Miranda

0.7.1 (2017-07-15)

  • Remove explicit loop usages [#305](#305) - Manuel Miranda
  • Remove bad logging configuration [#304](#304) - Manuel Miranda

0.7.0 (2017-07-01)

  • Upgrade to aioredis 0.3.3. - Manuel Miranda
  • Get CMD now returns values that evaluate to False correctly [#282](#282) - Manuel Miranda
* New locks public API exposed [#279](#279) - Manuel Miranda

_Users can now use aiocache.lock.RedLock and

aiocache.lock.OptimisticLock

* Memory now uses new NullSerializer [#273](#273) - Manuel Miranda

_Memory is a special case and doesn't need a serializer because

anything can be stored in memory. Created a new NullSerializer that does nothing which is the default that SimpleMemoryCache will use now._

* Multi_cached can use args for key_from_attr [#271](#271) - Manuel Miranda

_before only params defined in kwargs where working due to the

behavior defined in _get_args_dict function. This has now been fixed and it behaves as expected._

  • Removed cached key_from_attr [#274](#274) - Manuel Miranda _To reproduce the same behavior, use the new key_builder attr
  • Removed settings module. - Manuel Miranda

0.6.1 (2017-06-12)

* Removed connection reusage for decorators [#267](#267 Manuel Miranda (thanks @dmzkrsk)

_when decorated function is costly connections where being kept while

being iddle. This is a bad scenario and this reverts back to using a connection from the cache pool for every cache operation

* Key_builder for cached [#265](#265) - Manuel Miranda

_Also fixed a bug with multi_cached where key_builder wasn't applied

when saving the keys

  • Updated aioredis (0.3.1) and aiomcache (0.5.2) versions - Manuel Miranda

0.6.0 (2017-06-05)

New

  • Cached supports stampede locking [#249](#249) - Manuel Miranda
  • Memory redlock implementation [#241](#241) - Manuel Miranda
  • Memcached redlock implementation [#240](#240) - Manuel Miranda
  • Redis redlock implementation [#235](#235) - Manuel Miranda
  • Add close function to clean up resources [#236](#236) - Quinn Perfetto

    _Call await cache.close() to close a pool and its connections

  • caches.create works without alias [#253](#253) - Manuel Miranda

Changes

  • Decorators use JsonSerializer by default now [#258](#258) - Manuel Miranda

    _Also renamed DefaultSerializer to StringSerializer

* Decorators use single connection [#257](#257) - Manuel Miranda

_Decorators (except cached_stampede) now use a single connection for

each function call. This means connection doesn't go back to the pool after each cache call. Since the cache instance is the same for a decorated function, this means that the pool size must be high if there is big expected concurrency for that given function

* Change close to clear for redis [#239](#239) - Manuel Miranda

_clear will free connections but will allow the user to still use the

cache if needed (same behavior for aiomcache and ofc memory)_

0.5.2

  • Reuse connection context manager [#225](#225) [argaen]
  • Add performance footprint tests [#228](#228) [argaen]
  • Timeout=0 takes precedence over self.timeout [#227](#227) [argaen]
  • Lock when acquiring redis connection [#224](#224) [argaen]
  • Added performance concurrency tests [#216](#216) [argaen]

0.5.1

  • Deprecate settings module [#215](#215) [argaen]
  • Decorators support introspection [#213](#213) [argaen]

0.5.0 (2017-04-29)

  • Removed pool reusage for redis. A new one is created for each instance [argaen]
  • Soft dependencies for redis and memcached [#197](#197) [argaen]
  • Added incr CMD [#188](#188>) [Manuel Miranda]
  • Create factory accepts cache args [#209](#209) [argaen]
  • Cached and multi_cached can use alias caches (creates new instance per call) [#205](#205) [argaen]
  • Method create to create new instances from alias [#204](#204) [argaen]
  • Remove unnecessary warning [#200](#200) [Petr Timofeev]
  • Add asyncio trove classifier [#199](#199) [Thanos Lefteris]
  • Pass pool_size to the underlayed aiomcache [#189](#189) [Aurélien Busi]
  • Added marshmallow example [#181](#181) [argaen]
  • Added example for compression serializer [#179](#179) [argaen]
  • Added BasePlugin.add_hook helper [#173](#173) [argaen]

Breaking

  • Refactored how settings and defaults work. Now aliases are the only way. [#193](#193) [argaen]
  • Consistency between backends and serializers. With SimpleMemoryCache, some data will change on how its stored when using DefaultSerializer [#191](#191) [argaen]

0.3.3 (2017-04-06)

  • Added CHANGELOG and release process [#172](#172) [argaen]
  • Added pool_min_size pool_max_size to redisbackend [#167](#167) [argaen]
  • Timeout per function. Propagate it correctly with defaults. [#166](#166) [argaen]
  • Added noself arg to cached decorator [#137](#137) [argaen]
  • Cache instance in decorators is built in every call [#135](#135) [argaen]

0.3.1 (2017-02-13)

  • Changed add redis to use set with not existing flag [#119](#119) [argaen]
  • Memcached multi_set with ensure_future [#114](#114) [argaen]

0.3.0 (2017-01-12)

  • Fixed asynctest issues for timeout tests [#109](#109) [argaen]
  • Created new API class [#108](#108) [argaen]
  • Set multicached keys only when non existing [#98](#98) [argaen]
  • Added expire command [#97](#97) [argaen]
  • Ttl tasks are cancelled for memory backend if key is deleted [#92](#92) [argaen]
  • Ignore caching if AIOCACHE_DISABLED is set to 1 [#90](#90) [argaen]