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について学習しました。
この記事がおもしろいと思ったら、もっと多くの人に楽しんでもらえるように共有してください。
読んでくれてありがとう!
-
Ruby Mapメソッドの使用方法(例付き)
Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.
-
RubyでStructとOpenStructを使用する方法
Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた