Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yegor256/zache
Zero-footprint Ruby In-Memory Thread-Safe Cache
https://github.com/yegor256/zache
cache data-structures memory-management ruby ruby-gem
Last synced: 6 days ago
JSON representation
Zero-footprint Ruby In-Memory Thread-Safe Cache
- Host: GitHub
- URL: https://github.com/yegor256/zache
- Owner: yegor256
- License: mit
- Created: 2018-11-01T14:26:53.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-23T05:46:51.000Z (7 months ago)
- Last Synced: 2024-05-23T06:39:50.575Z (7 months ago)
- Topics: cache, data-structures, memory-management, ruby, ruby-gem
- Language: Ruby
- Homepage: https://www.yegor256.com/2019/02/05/zache.html
- Size: 243 KB
- Stars: 40
- Watchers: 4
- Forks: 6
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# In Memory Cache for Ruby
[![EO principles respected here](https://www.elegantobjects.org/badge.svg)](https://www.elegantobjects.org)
[![DevOps By Rultor.com](http://www.rultor.com/b/yegor256/zache)](http://www.rultor.com/p/yegor256/zache)
[![We recommend RubyMine](https://www.elegantobjects.org/rubymine.svg)](https://www.jetbrains.com/ruby/)[![rake](https://github.com/yegor256/zache/actions/workflows/rake.yml/badge.svg)](https://github.com/yegor256/zache/actions/workflows/rake.yml)
[![Gem Version](https://badge.fury.io/rb/zache.svg)](http://badge.fury.io/rb/zache)
[![Maintainability](https://api.codeclimate.com/v1/badges/c136afe340fa94f14696/maintainability)](https://codeclimate.com/github/yegor256/zache/maintainability)
[![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/yegor256/zache/master/frames)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/zache/blob/master/LICENSE.txt)
[![Test Coverage](https://img.shields.io/codecov/c/github/yegor256/zache.svg)](https://codecov.io/github/yegor256/zache?branch=master)
[![Hits-of-Code](https://hitsofcode.com/github/yegor256/zache)](https://hitsofcode.com/view/github/yegor256/zache)It's a simple Ruby gem for in-memory cache.
Read [this blog post](https://www.yegor256.com/2019/02/05/zache.html)
to understand what Zache is for.First, install it:
```bash
gem install zache
```Then, use it like this:
```ruby
require 'zache'
zache = Zache.new
# Expires in 5 minutes
v = zache.get(:count, lifetime: 5 * 60) { expensive() }
```If you omit the `lifetime` parameter, the key will never expire.
By default `Zache` is thread-safe. It locks the entire cache on each
`get` call. You turn that off by using `sync` argument:```ruby
zache = Zache.new(sync: false)
v = zache.get(:count) { expensive() }
```You may use "dirty" mode, which will return you an expired value, while
calculation is waiting. Say, you have something in the cache, but it's
expired. Then, you call `get` with a long running block. The thread waits,
while another one calls `get` again. That second thread won't wait, but will
receive what's left in the cache. This is a very convenient mode for situations
when you don't really care about data accuracy, but performance is an issue.The entire API is documented
[here](https://www.rubydoc.info/github/yegor256/zache/master/Zache)
(there are many other convenient methods).## How to contribute
Read
[these guidelines](https://www.yegor256.com/2014/04/15/github-guidelines.html).
Make sure you build is green before you contribute
your pull request. You will need to have
[Ruby](https://www.ruby-lang.org/en/) 2.3+ and
[Bundler](https://bundler.io/) installed. Then:```bash
bundle update
bundle exec rake
```If it's clean and you don't see any error messages, submit your pull request.