https://github.com/grottopress/dude
A dead simple Redis cache
https://github.com/grottopress/dude
crystal redis redis-cache
Last synced: about 1 year ago
JSON representation
A dead simple Redis cache
- Host: GitHub
- URL: https://github.com/grottopress/dude
- Owner: GrottoPress
- License: mit
- Created: 2022-11-18T19:01:20.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-08-13T16:15:48.000Z (over 1 year ago)
- Last Synced: 2025-01-27T14:49:06.921Z (about 1 year ago)
- Topics: crystal, redis, redis-cache
- Language: Crystal
- Homepage:
- Size: 53.7 KB
- Stars: 0
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Dude
**Dude** is a dead simple Redis cache that supports multiple storage backends.
## Installation
1. Add the dependency to your `shard.yml`:
```yaml
dependencies:
dude:
github: GrottoPress/dude
#redis: # Uncomment if using the Redis backend
# github: jgaskins/redis
```
1. Run `shards update`
1. Require and configure *Dude*:
- Using the Redis backend
```crystal
# ->>> src/app/config.cr
# ...
require "dude/redis"
Dude.configure do |settings|
settings.store = Dude::Redis.new(
"redis://localhost:6379/0",
namespace: "dude"
)
end
# ...
```
- Using the Memory backend
```crystal
# ->>> src/app/config.cr
# ...
require "dude"
Dude.configure do |settings|
settings.store = Dude::Memory.new
end
# ...
```
- Skip caching
You may disable cache altogether by setting `Dude.settings.store` to `nil` (This is the default).
## Usage
- Fetch raw value from cache
```crystal
# Sets and returns block if key not found in cache
Dude.get("key", 1.minute) { "value" } # => `value`
```
- Fetch JSON-serializable value from cache
```crystal
struct User
include JSON::Serializable
getter id : Int32
def initialize(@id)
end
end
# Sets and returns block if key not found in cache
Dude.get(User, "key", 1.minute) { User.new(2) } # => `User(@id=2)`
```
- Perform multiple operations using a transaction
```crystal
Dude.transaction do |store|
Dude.set("key_1", "value1", 1.minute, store)
Dude.set("key_2", "value2", 3.minutes, store)
Dude.delete("key_3", store)
end
```
## Development
Create a `.env.sh` file:
```bash
#!/bin/bash
export REDIS_URL='redis://localhost:6379/0'
```
Update the file with your own details. Then run tests with `source .env.sh && crystal spec`.
## Contributing
1. [Fork it](https://github.com/GrottoPress/dude/fork)
1. Switch to the `master` branch: `git checkout master`
1. Create your feature branch: `git checkout -b my-new-feature`
1. Make your changes, updating changelog and documentation as appropriate.
1. Commit your changes: `git commit`
1. Push to the branch: `git push origin my-new-feature`
1. Submit a new *Pull Request* against the `GrottoPress:master` branch.