Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

RubyでRedisデータベースを使用する方法

Redisとは何ですか?

Redisは、使用できるさまざまな種類のデータ構造を持つ一種のインメモリデータベースです。

いいね

  • キー/値の保存
  • リスト
  • セット

Postgresのような典型的なSQLデータベースとは何の関係もありません。

Redisの用途には次のものがあります

  • キャッシュ
  • リーダーボード
  • 訪問者を数える
  • 高速オートコンプリートの提案
  • アクティブなユーザーセッションを追跡する
  • 作業キューとメッセージキュー

RubyアプリケーションでRedisを使用する方法を見てみましょう!

Redisをローカルにインストールする

最初:

Redisサーバーをインストールする必要があります。

他のデータベースをインストールするのと同じように。

Ubuntuを実行している場合は、apt install redis-serverを使用できます 、Macではbrew install redisを使用できます &Windows 10では、「Windows Subsystem for Linux」が必要です(手順についてはクリックしてください)。

サーバーが稼働すると、redis-cliを使用できるようになります サーバーに接続します。

redis-serverを実行する必要がある場合があります 別の端末でサーバーに接続する前にサーバーを起動します。

これで、Redisの使用を開始する準備が整いました!

RedisGemsの使用

redis-cliを使用してRedisと直接対話できます 、ただし、RubyのRedisを使用する場合は、gemを使用する必要があります。

利用可能な宝石がいくつかあります

  • オックスブラッド
  • redic
  • redis-rb

ただし、Redis開発者が公式に推奨しているのはredis-rbの1つだけです。 。

インストール

gem install redis

gemをインストールすると、Redisサーバーに接続して作業を開始できます。

まず、aという1つのキーを追加します。 、値が1

コードは次のとおりです

require 'redis'

redis = Redis.new(host: "localhost")

redis.set("a", 1)
# "OK"

redis.get("a")
# "1"

このgemは、RubyメソッドをRedisコマンドにマッピングするのに適しているため、使用可能なコマンドを知りたい場合は、Redisのドキュメントを確認するか、gemのドキュメントを確認してください。

ドキュメントの操作

特定のコマンドの名前を入力するか、データ構造で検索することができます 。

「グループでフィルタリング」をクリックして「文字列」を選択し、コマンドの1つを選択してテストします。

たとえば、incrを使用できます コマンド:

redis.incr("a")
# "2"

または、setexを使用して自動有効期限キーを設定できます :

redis.setex("bacon", 10, 100)

ここで、2番目の引数はこのキーの有効期限が切れる数秒前であり、最後の引数はこのキーの値です。

redis.get("bacon")
# "100"

10秒後…

redis.get("bacon")
# nil

他のコマンドを探索して試してみてください!

Redisで並べ替えられたセットを使用する方法

Redisは単純なキー/値のストレージに限定されていません。

いくつかの強力なデータ構造を提供します。

ソートされたセットのように。

これにより、特定の値で並べ替えられた一意のアイテムのリストを作成できます。 。この値は、Redisドキュメントでは「スコア」と呼ばれています。

このセットの上位N個のアイテムを取得するためにクエリを実行できます。

したがって、これはリーダーボードに最適です!

redis.zadd("popular_fruit", 10, "apple")
# true
redis.zadd("popular_fruit", 20, "banana")
# true
redis.zadd("popular_fruit", 30, "orange")
# true

セットができたので、一番上のアイテムをクエリできます:

r.zrevrange("popular_fruit", 0, 0)
# ["orange"]

このコマンドは言っています

「最高ランク(0)から始めて、一番上のアイテムをください。」

すべてが必要な場合は、順番に

r.zrevrange("popular_fruit", 0, -1)
# ["orange", "banana", "apple"]

「zrevrange」の「rev」の部分に注意してください。これは逆を意味し、降順でアイテムを提供します。 。

「zrange」を使用すると、アイテムは昇順で取得されます 。

並べ替えられたセットはリーダーボードを超えています!

もう1つできることは、高速オートコンプリートエンジンを構築することです。 ZRANGEBYLEXを使用 コマンド。

その他のセット操作については、ドキュメントをお読みください。

キー、値、名前の間隔を理解する

列もテーブルもありません。すべてが1つのプレーンな名前空間です。

データをどのように整理できますか?

キー名自体を使用できます。

一般的な規則の1つは、コロン(:)を使用することです。 )一般名とその名前の特定の部分を分離します。

ここに例があります

redis.set("fruit:1", "apple")
# OK
redis.set("fruit:2", "banana")
# OK

この規則について特別なことは何もありません。Redis(ソフトウェア)にとって、コロン付きのキー キーなしのキーと同じです 、しかしあなた(フレンドリーなRuby開発者)にとっては、データを整理するのに役立ちます。

Redisでのデータの永続性

デフォルトでは、Redisは通常のデータベースのように行うすべての操作を保存するわけではありません。

サーバーを停止したときにのみデータをディスクに保存します。

またはこれらの条件下で

  • 15分後、1つ以上のキーが変更された場合
  • 5分後、10個以上のキーが変更された場合
  • 1分後、10,000個以上のキーが変更された場合

これにより、dump.rdbが作成されます 現在のディレクトリのファイル。

Redisの永続性をSQLデータベースのように動作させたい場合は、「追加専用モード」を有効にできます。これにより、毎秒変更が保存されます。

このモードを有効にするには、redis構成に次の行を追加(またはコメント解除)します。

appendonly yes

RedisをRailsキャッシュとして使用する

Rails 5.2以降、Redisをキャッシュストアとして使用できます。

必要なのはredisだけです 宝石とサーバー。

これを有効にするには

# config/environments/production.rb

Rails.application.configure do
  config.cache_store = :redis_cache_store, { url: "redis://localhost:6379/0" }
end

その後、RailsはすべてのキャッシュニーズにRedisを使用します。

キャッシュに何かを保存することもできます

Rails.cache.write("a", 1)
# "OK"

Rails.cache.read("a")
# 1

Railsは次のような値を格納します

"\u0004\bo: ActiveSupport::Cache::Entry\t:\v@valuei\u0006:\r@version0:\u0010@created_atf\u00171555005228.7954454:\u0010@expires_in0"

これは、ActiveRecordの結果など、シリアル化可能なRubyオブジェクトを保存できることを意味します。 クエリ。

Redis F.A.Q

「Redisサーバーのすべてのキーを一覧表示できますか?」

はい、keysを使用します またはscan コマンドですが、特にデータベースが大きくなるにつれて非常に遅くなるため、お勧めしません。

「Redisはいつ使用する必要がありますか?」

ユースケースに適している場合のみ。つまり、Redisデータ構造を利用して、コードの推論を容易にすることができます。

クールまたは人気があるという理由だけでRedisを使用したくない。

他の解決策よりも問題を解決するときに使用します。

「Redisを高速化するにはどうすればよいですか?」

hiredisをインストールします redis-rbの上にあるgem 最高のパフォーマンスを得るには。

概要

キャッシュ、カウント、キューなどの適切な状況で非常に役立つ高速のインメモリデータベースであるRedisについて学習しました。

この記事がおもしろいと思ったら、もっと多くの人に楽しんでもらえるように共有してください。

読んでくれてありがとう!


  1. Ruby Mapメソッドの使用方法(例付き)

    Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.

  2. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた