# Nebulex v3.1.0 - Table of Contents > In-memory and distributed caching toolkit for Elixir ## GUIDES - Introduction - [Getting Started](getting-started.md) - [Official adapters](nbx-adapters.md) - Learning - [Cache Usage Patterns with Caching Decorators](cache-usage-patterns.md) - [Declarative Caching: Patterns and Best Practices](declarative-caching.md) - [Info API](info-api.md) - [Creating a new adapter](creating-new-adapter.md) - Upgrading - [Upgrading to v3.1](v3-1.md) - [Upgrading to v3.0](v3-0.md) ## Modules - [Nebulex](Nebulex.md): Nebulex is split into two main components - [Nebulex.Cache](Nebulex.Cache.md): Cache abstraction layer inspired by [Ecto](https://github.com/elixir-ecto/ecto). - [Nebulex.Event](Nebulex.Event.md): Nebulex cache event. - [Nebulex.Event.CacheEntryEvent](Nebulex.Event.CacheEntryEvent.md): A cache entry event. - Caching decorators - [Nebulex.Caching](Nebulex.Caching.md): Applies caching to Elixir functions so they run fewer times. Each time a decorated function is called, the decorator checks whether a result for the given arguments is already in the cache. If it is, the cached result is returned and the function body is skipped. If it is not, the function runs, its result is stored in the cache, and the next call with the same arguments gets the cached result. An expensive function (CPU or IO bound) therefore runs once per set of arguments. The caller does not see any of this; it calls the function as usual. - [Nebulex.Caching.Decorators](Nebulex.Caching.Decorators.md): Declarative decorator-based caching, inspired by [Spring Cache Abstraction][spring-cache]. - [Nebulex.Caching.Decorators.Context](Nebulex.Caching.Decorators.Context.md): Decorator context struct and stack management. - Adapter specification - [Nebulex.Adapter](Nebulex.Adapter.md): Specifies the minimal API required from adapters. - [Nebulex.Adapter.CompositeKV](Nebulex.Adapter.CompositeKV.md): Specifies the adapter Composite KV API. - [Nebulex.Adapter.Info](Nebulex.Adapter.Info.md): Specifies the adapter Info API. - [Nebulex.Adapter.KV](Nebulex.Adapter.KV.md): Specifies the adapter Key/Value API. - [Nebulex.Adapter.Observable](Nebulex.Adapter.Observable.md): Specifies the adapter Observable API. - [Nebulex.Adapter.Queryable](Nebulex.Adapter.Queryable.md): Specifies the adapter Query API. - [Nebulex.Adapter.Transaction](Nebulex.Adapter.Transaction.md): Specifies the adapter Transaction API. - Built-in adapters - [Nebulex.Adapters.Nil](Nebulex.Adapters.Nil.md): The Nil adapter is a special cache adapter that turns off the cache. It drops everything written to it, behaves as if every key were missing on reads, and reports success on all writes. It is mostly useful for tests. - Built-in info implementation - [Nebulex.Adapters.Common.Info](Nebulex.Adapters.Common.Info.md): A simple/default implementation for `Nebulex.Adapter.Info` behaviour. - [Nebulex.Adapters.Common.Info.Stats](Nebulex.Adapters.Common.Info.Stats.md): Stats implementation using [Erlang counters][erl_counters]. - Telemetry handlers - [Nebulex.Telemetry.CacheEntryHandler](Nebulex.Telemetry.CacheEntryHandler.md): Telemetry handler that listens to the `:stop` event of cache commands, builds the matching cache entry event, and runs the registered filter and listener on it. - [Nebulex.Telemetry.CacheStatsCounterHandler](Nebulex.Telemetry.CacheStatsCounterHandler.md): Telemetry handler that keeps the cache stats up to date. It relies on the default `Nebulex.Adapters.Common.Info` implementation, which stores the stats in Erlang counters. See `Nebulex.Adapters.Common.Info.Stats`. - Utilities - [Nebulex.Time](Nebulex.Time.md): Time utilities. - [Nebulex.Utils](Nebulex.Utils.md): General purpose utilities. - Exceptions - [Nebulex.CacheNotFoundError](Nebulex.CacheNotFoundError.md): Raised when the cache cannot be found in the registry because it is not running or does not exist. - [Nebulex.Error](Nebulex.Error.md): Raised, or returned in an `{:error, _}` tuple, when a command fails. For example, the adapter could not run it, it timed out, or a transaction was aborted. - [Nebulex.KeyError](Nebulex.KeyError.md): Raised, or returned in an `{:error, _}` tuple, when a key does not exist in the cache. - [Nebulex.QueryError](Nebulex.QueryError.md): Raised at runtime when the query is invalid. ## Mix Tasks - [mix nbx](Mix.Tasks.Nbx.md): Prints Nebulex tasks and their information. - [mix nbx.gen.cache](Mix.Tasks.Nbx.Gen.Cache.md): Generates a new cache.