在我的Rails應用程序中,我已經到了將嵌套的API JSON對象存儲爲我的Redis鍵值的階段,例如。 「一個」。通過調用「A」的GET來訪問整個對象。但是,如果我想要更改某個特定名稱的值,我需要做什麼?由於我將整個JSON對象存儲爲Redis值,我是否需要創建新模型並在模型中複製相同的值並通過Postgres實例進行更改?或者,有沒有一種方法可以針對在Redis中存儲爲鍵「A」的值的JSON對象中的特定值?如果是這樣,我將如何創建路線以允許前端開發人員更新rails應用程序之外的緩存?如何從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,但你必須實現兩個可行的替代品:
服務器端Lua腳本 - Redis的Lua的沙箱隨
cjson
庫。您可以使用它從嵌入式序列化的JSON字符串中提取/更新任何元素,而無需網絡支配。您可以在https://github.com/RedisLabsModules/rejson/tree/master/benchmarks/lua上找到一堆腳本,它們可以做到這些腳本Redis模塊 - 上述引用的腳本是爲Redis提供本機JSON數據類型的新開發的Redis模塊(非必要)的一部分。該模塊仍處於預覽模式,但我相信它會在不久的將來成爲GA並加入功能(披露 - 此處作者))。您可以在https://github.com/redislabsmodules/rejson找到ReJSON,對Redis的JSON數據類型,一定要檢查comparative results vs. the Lua approach
- 1. 訪問緩存從緩存中緩存對象
- 2. Django:order_by API json值或緩存對象
- 3. Django Redis緩存值
- 4. Redis緩存結構
- 5. 可緩存對象緩存
- 6. Yii2 redis緩存在文件緩存中
- 7. 緩存訪問
- 8. Asp.Net緩存,修改緩存中的對象,並更改緩存的值
- 9. 谷歌App Engine的內存緩存+如何從緩存中
- 10. Zend_View的緩存(Redis的)
- 11. Keycloak - Infinispan Redis緩存存儲
- 12. 瞭解網頁緩存(Redis)
- 13. Redis緩存結構用例
- 14. 排序redis緩存
- 15. Redis作爲RDBMS的緩存
- 16. Django 1.9在Redis中緩存
- 17. Azure的Redis緩存錯誤
- 18. 用Symfony2緩存API緩存
- 19. Azure Redis緩存中的數據丟失
- 20. 什麼是Azure Redis緩存?
- 21. C++ - 緩存對象
- 22. ASP.NET緩存對象
- 23. Jquery對象緩存
- 24. 緩存UserControl對象
- 25. 春季Redis的問題:從Redis的緩存GetAllCacheNames不與RedisCacheManager
- 26. 如何使用JavaScript訪問緩存對象?
- 27. Azure Redis緩存序列化
- 28. ASP.NET UnauthorizedAccessException從緩存中訪問項目
- 29. 在Application_AuthenticateRequest中緩存對象
- 30. 如何緩存渲染:json
晴準確的 - 你總是可以使用Lua中,以避免至少一些痛苦的。此外,該領域也有一些近期的發展 - 請查閱我的答案以瞭解更多詳情。 –
感謝您的輸入Robert。如果我問,選擇反序列化方法還是使用數據庫(MongoDB/PG)有什麼好處? –
本地反序列化和重新序列化將要求您下載完整的JSON主體並將其上傳到服務器,這會增加帶寬和網絡成本。所以如果你做了很多,這不是一個好的選擇。儘管如此,@ItamarHaber在你仍然可以使用Redis做你想做的事情方面有很好的觀點。 –