私のRailsアプリケーションでは、入れ子になったAPI JSONオブジェクトを私のRedisキーの値として保存していました。 "A"。オブジェクト全体は、 "A"のGETを呼び出すことによってアクセスされます。しかし、オブジェクトの特定の名前の値を変更したい場合、私は何をする必要がありますか?私はRedis値としてJSONオブジェクト全体を保存していたので、新しいモデルを作成し、モデル内で同じ値を複製し、例えばPostgresを通じて変更する必要がありますか?または、Redisのキー "A"の値として格納されているJSONオブジェクトの特定の値をターゲットにする方法はありますか?もしそうなら、フロントエンドの開発者がレールアプリの外でキャッシュを更新できるようにルートを作成するにはどうすればよいですか?RedisキャッシュのキャッシュされたJSON APIからオブジェクト値にアクセスするにはどうすればよいですか?
答えて
Redisは、その値内でJSONドキュメントの変更をネイティブでサポートしていません。そのためにはexperimental pluginsがありますが、現在の値(doc = redis.get('A')
)を逆シリアル化してから(doc['name'] = 'foo'
)変更し、再初期化してRedis(redis.set('A', JSON.encode(doc))
)に保存する必要があります。
しかし、このようなJSONドキュメントを使用したり、データベース内のJSONドキュメントの値をクエリすることに興味がある場合は、NoSQL JSONドキュメントストア(MongoDBなど)を使用することを強くおすすめします。 )、Postgresの新しいネイティブJSONサポートを利用することができます。
また、「フロントエンド開発者がRailsスタック外でキャッシュを更新できるようにする」というコメントは少し心配です。データベース(Redis、Mongo、またはPostgresのような)への書き込みアクセスをフロントエンドに直接公開している場合、潜在的にセキュリティ問題のホストにさらされている可能性があります。あなたがその能力を望んでいて、あなたが提案したようにJSON文書を変更したいのであれば、Firebaseを使って、自分自身が一番気に入っているかもしれません。クライアント側から直接アクセスできるように設計されていて、JSONをネイティブに使用しています。 。
Redisは、その値内でJSONドキュメントを変更することをネイティブにサポートしていません。
は正しく@Robert Nubelを言ったが、あなたはそれを達成するための2つの実行可能な代替持っている:
サーバー側のLuaスクリプト - RedisのLuaのサンドボックスが
cjson
ライブラリに同梱されています。組み込みのシリアライズされたJSON文字列から、ネットワークのペナルティなしで要素を抽出/更新するために使用することができます。 https://github.com/RedisLabsModules/rejson/tree/master/benchmarks/luaRedisモジュール - 上記のスクリプトは、RedisのネイティブなJSONデータ型を提供する新しく開発されたRedisモジュールの(必須ではない)部分です。モジュールはまだプレビューモードですが、GAになり、近い将来に機能が追加されると考えています(開示 - 作者はこちら))。あなたはhttps://github.com/redislabsmodules/rejsonでReJSON、RedisのためのJSONデータ型を見つけ、comparative results vs. the Lua approach
- 1. Chromeでapiキャッシュをリセットするにはどうすればよいですか?
- 2. ロードバランスされたアプリケーションでキーによるキャッシュを削除するにはどうすればよいですか?
- 3. findAllメソッドでキャッシュから特定のオブジェクトを削除するにはどうすればよいですか?
- 4. AndroidアプリでJSONをどのくらいキャッシュすればよいですか?
- 5. キャッシュからキャッシュにアクセスするスレーブオブジェクト
- 6. URLDownloadToFileがキャッシュから取得できないようにするにはどうすればよいですか?
- 7. サーバーのキャッシュをオフにするにはどうすればよいですか?
- 8. IronPythonで.NET APIオブジェクトのオーバーライドされたプロパティにアクセスするにはどうすればよいですか?
- 9. Hybrisキャッシュを無効にするにはどうすればよいですか?
- 10. ロケーションベースのデータベースクエリをキャッシュするにはどうすればよいですか?
- 11. ASTのハッシュコードをキャッシュするにはどうすればよいですか?
- 12. キャッシュ内のファイルをテストするにはどうすればよいですか?
- 13. MacOSでCoreBluetoothキャッシュをクリアするにはどうすればよいですか?
- 14. CocoaでWebViewキャッシュをクリアするにはどうすればよいですか?
- 15. プログラムでキャッシュをクリアするにはどうすればよいですか?
- 16. Parse Serverでクエリをキャッシュするにはどうすればよいですか?
- 17. キャッシュされたSvg/SvgItemをPlasma5に再ロードするにはどうすればよいですか?
- 18. Google App Engineにキャッシュされたユーザーオブジェクトを更新するにはどうすればよいですか?
- 19. JSONオブジェクトの子にどのようにアクセスすればよいですか?
- 20. APIからプライベートスプレッドシートにアクセスするにはどうすればよいですか?
- 21. PHPでキャッシュされたコンテンツに変数を渡すにはどうすればよいですか?
- 22. jQuery DOMキャッシュをクリアするにはどうすればよいですか?
- 23. .net 2.0でキャッシュされたタイムゾーン情報をクリアするにはどうすればよいですか?
- 24. Rails 4でパーソナライズされたフラグメントをキャッシュするにはどうすればよいですか?
- 25. geocoder-php/GeocoderLaravelから返された保護オブジェクトにアクセスするにはどうすればよいですか?
- 26. Azure Redisキャッシュを標準から基本にスケールダウンするにはどうしたらいいですか?
- 27. express.staticで提供されるファイルをメモリにキャッシュするにはどうすればよいですか?
- 28. ネストされたjson関係値オブジェクトをlodashにリンクするにはどうすればよいですか?
- 29. Fetch APIレスポンス以外のJSONオブジェクトにアクセスするにはどうすればよいですか?
- 30. ユーザごとの外部apiレスポンスをレールにキャッシュするにはどうすればよいですか?
ほとんど正確に確認することを確認することができます - あなたは、常に痛みの少なくともいくつかを回避するためのLuaを使用することができます。加えて、その地域にはいくつかの最近の開発があります - 詳細については私の答えをチェックしてください。 –
入力いただきありがとうございます。もし私が尋ねることがあれば、デシリアライズメソッドまたはデータベース(MongoDB/PG)を使って作業することの利点は何ですか? –
ローカルでのデシリアライズと再シリアライズでは、JSON本体全体をダウンロードしてからサーバーにアップロードする必要があり、帯域幅とネットワークコストが追加されます。あなたがそれをたくさんしているなら、それは良い選択肢ではありません。 @ItamarHaberにはRedisを使って、あなたが望むことをやり遂げる方法についての良い点があります。 –