RediSQL 0.8.0 發布將查詢結果寫入流中
RediSQL 0.8.0發布了,RediSQL是一個Redis模塊,為Redis提供完整的SQL功能。RediSQL支持所有Redis數據類型和功能,也支持SQL語句SELECT/INSERT/UPDATE/DELETE等等,以及一些嵌套的連接和數據倉庫功能(例如外鍵約束)。
此版本引入了兩個新命令:REDISQL.QUERY.INTO[.NOW]
與REDISQL.QUERY_STATEMENT.INTO[.NOW]
。新命令的行為類似於REDISQL.QUERY和REDISQL.QUERY_STATEMENT,但它們將結果作為第一個參數XADD
給 Redis流。
將查詢結果寫入流中可以帶來幾方面的好處:
首先,可以輕鬆地緩存這些高消耗查詢的結果。
其實,它將結果的創建與其消費分開,這是向前邁出了非常重要的一大步,特別是對於大的查詢結果來說。
將查詢結果寫入流中可以更有效地使用Redis 主線程時間。實際上,查詢的計算不是由 redis 主線程完成的,但它卸載到另一個線程以允許redis 繼續為客戶端提供服務,而返回結果必須在Redis 主線程中完成。因此,長時間的結果可能需要花費大量時間才能返回給客戶端,並且在那段時間內Redis 無法提供其它請求。將結果寫入流中可以帶來改進。
此外,一個小的消費者不會期望得到一個大的查詢結果,這會讓其不堪重負。在標準中,這個問題通常使用游標來解決,但Redis本身並不提供此功能。Redis提供列表,但它們只是平面列表,只能存儲字符串,在它們之上創建游標會很複雜。相反,使用流則會更加適合,雖然它們也只能存儲字符串,但會將其存儲到小的kv對象條目中,每個條目代表查詢結果集的一行。
關於如何使用新命令等更多詳細的內容,查看發佈公告。