Shapkeep
Shapkeep keeps track of your Redis Lua script SHA's so you don't have to.
Shapkeep will optimize your Redis EVAL calls by always attempting to use EVALSHA.
If we get a NOSCRIPT
error, we load the script, and then retry
.
Next time, we won't get a NOSCRIPT
, and so it's Optimized™.
Shapkeep also gives you a central repo of Lua scripts in the form of a YAML file that you put them all in. The advantages of this are debatable, but for right now I like it.
It does allow us to eval scripts by name:
Shapkeep.new('/path/to/store.yml').eval(redis, :name)
Installation
Add this line to your application's Gemfile:
gem 'shapkeep'
And then execute:
$ bundle
Or install it yourself as:
$ gem install shapkeep
Usage
Shapkeep has two ways of using it, as a separate object and as a wrapper of your Redis object
As a separate object:
redis = Redis.new
shapkeep = Shapkeep.new('/path/to/store.yml')
shapkeep.eval(redis, :script__name)
Or as a wrapper (uses SimpleDelegator)
redis = Shapkeep::Wrapper.new('/path/to/store.yml', redis)
redis.keys # => []
redis.eval_script(:one) # => 1
Shapkeep#eval
and Shapkeep::Wrapper#eval_script
both accept the keys
and
args
arguments as arrays.
redis.eval_script(:one, ['key1'], ['arg1'])
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request