Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A DataMapper adapter for redis
Ruby
Tree: 75a856b967

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
benchmark
lib
spec
.gitignore
Gemfile
Gemfile.lock
MIT-LICENSE
README.textile
Rakefile
VERSION
dm-redis-adapter.gemspec

README.textile

dm-redis-adapter

This is a DataMapper adapter for the Redis key-value database.

Redis is a very fast key-value store with some interesting data structures added. You can have a key that is a SET, LIST, STRING or HASH that is binary safe. Data structures like SET and LIST allow for even more interesting things. Redis is a fabulous and fast engine for data structures, and you can read more about it here: redis. Redis is also a persistent data store, and can be used in large-scale environments with master-slave replication and consistent hashing on the client side.

DataMapper is a brilliant ORM that is based on the IdentityMap pattern. Usage of DataMapper resembles that of ActiveRecord, the popular ORM bundled with Ruby on Rails, but with some very important differences. A quote from the DM wiki: “One row in the database should equal one object reference. Pretty simple idea. Pretty profound impact.” Having an identity map allows for very efficient queries to the database, as well as interesting forms of lazy loading of attributes or associations.

Marrying DataMapper to Redis allows for schema-less models, you can add fields at any time without having to create a migration. DataMapper also allows us to store non-native Redis types in the db, like Date fields.

Upgrading

> v0.1 is not compatible with data created with previous versions! The new storage schema is designed to be more VM friendly. I won’t be releasing a gem version of v0.1 until a stable version of redis that includes hash support has been released.

Changelog

  • v0.3.0 Updates to support ruby 1.9.2 (thanks arbarlow!)
  • v0.2.1 Fixes to sorting
  • v0.1.1 Update to redis-rb v2.0.0
  • v0.1 Update to store records as redis hash values
  • v0.0.11 Updates to support newer versions of the redis client, support for JSON datatypes

Install

Prerequisites:

Install the dm-redis adapter:


> gem install dm-redis-adapter

Usage

Setup your adapter, define your models and properties:

  
    require 'rubygems'
    require 'dm-core'
    require 'dm_redis'

    DataMapper.setup(:default, {:adapter  => "redis"})

    class Cafe
      include DataMapper::Resource

      property :id,     Serial
      property :name,   Text
    end

    Cafe.create(:name => "Whoahbot's Caffienitorium")
  

Now you can use redis in a ORM style, and take advantage of all of the amazing things that DataMapper offers.

If you want to do finds on specific String fields, add an index:

  
    class Coffee
      include DataMapper::Resource

      property :id,            Serial
      property :description,   String, :index => true
    end

    Coffee.create(:description => "Notes of crude oil and sulphur")
    Coffee.first(:description => "Notes of crude oil and sulphur") # will now work
  

Validations on unique fields are now supported through indices and dm-validations:

  
    class Crumblecake
      include DataMapper::Resource
      validates_is_unique :flavor

      property :id,      Serial
      property :flavor,  String, :index => true
    end

    Crumblecake.create(:flavor => "snozzbler")
    Crumblecake.new(:flavor => "snozzbler").valid? # false (of course!  Who ever heard of a snozzbler crumblecake?)
  

Badass contributors

Something went wrong with that request. Please try again.