Familia - 2.0

Organize and store Ruby objects in Valkey/Redis. A powerful Ruby ORM (of sorts) for Valkey/Redis.

Familia provides a flexible and feature-rich way to interact with Valkey using Ruby objects. It’s designed to make working with Valkey as natural as working with Ruby classes, while offering advanced features for complex data management.

Quick Start

1. Installation

```bash # Add to Gemfile gem ‘familia’, ‘>= 2.0.0’

Or install directly

gem install familia ```

2. Configure Connection

```ruby # config/initializers/familia.rb (Rails) # or at the top of your script

require ‘familia’

Basic configuration

Familia.uri = ‘redis://localhost:6379/0’

Or with authentication

Familia.uri = ‘redis://user:password@localhost:6379/0’ ```

3. Create Your First Model

ruby class User < Familia::Horreum identifier_field :email field :email field :name field :created_at end

4. Basic Operations

```ruby # Create user = User.new(email: ‘alice@example.com’, name: ‘Alice’) user.save

Find

user = User.load(‘alice@example.com’)

Update

user.name = ‘Alice Smith’ user.save

Check existence

User.exists?(‘alice@example.com’) #=> true ```

Prerequisites

  • Ruby: 3.4+ (3.4+ recommended)
  • Valkey/Redis: 6.0+
  • Gems: redis (automatically installed)

Usage Examples

Creating and Saving Objects

ruby flower = Flower.create(name: "Red Rose", token: "rrose") flower.owners.push("Alice", "Bob") flower.tags.add("romantic") flower.metrics.increment("views", 1) flower.props[:color] = "red" flower.save

Retrieving and Updating Objects

ruby rose = Flower.find_by_id("rrose") rose.name = "Pink Rose" rose.save

Using Safe Dump

ruby user = User.create(username: "rosedog", first_name: "Rose", last_name: "Dog") user.safe_dump # => {id: "user:rosedog", username: "rosedog", full_name: "Rose Dog"}

Working with Time-based Data

ruby metric = DailyMetric.new metric.counter.increment # Increments the counter for the current hour

Bulk Operations

ruby Flower.multiget("rrose", "tulip", "daisy")

Transactional Operations

ruby user.transaction do |conn| conn.set("user:#{user.id}:status", "active") conn.zadd("active_users", Time.now.to_i, user.id) end

Conclusion

Familia provides a powerful and flexible way to work with Valkey-compatible in Ruby applications. Its features like automatic expiration, safe dumping, and quantization make it suitable for a wide range of use cases, from simple key-value storage to complex time-series data management.

For more information, visit: - Github Repository - RubyGems Page

Contributions are welcome! Feel free to submit a Pull Request.