2016-01-13 67 views
0

我試圖提高我對Redis的理解,因爲我有一個項目需要快速處理很多數字,但是,我遇到了一個問題,要麼是我的理解錯誤,要麼是我的理解錯誤代碼沒有按預期工作。ARe Redis SINTER語句與SQL WHERE語句相媲美嗎?

我有數據在MariaDB的表,我使用ioredishmset數據的每一行到Redis的數據庫,然後執行sadd創造每個點指數,我需要樞軸轉動而離開的。

但是,我的結果集不匹配。例如,在MariaDB的,我得到一個結果集的rougly 55K記錄過兩個字段:使用Redis的那些相同的字段

SELECT COUNT(`Email`) FROM myTable 
WHERE `Qual Field A`='Yes' AND `Qual Field B`='Something else' 

我2K左右得到結果:

SINTER qualFieldA:'Yes' qualFieldB:'Something else' 

我根據我在SO和其他地方閱讀的內容,我認爲做SINTER key1:value key2:value大致相當於SELECT {fields} FROM {table} WHERE field1=value AND field2=value

是這種情況,也許我的導入或sadd電話關閉,或者我不正確地瞭解SINTER如何工作?

+0

如果您的集合填充正確,則流程正確。也許分享你的進口代碼? –

+0

這裏是我的代碼引入記錄和'sadd'的例子。我在想我在sadd()中的鍵是關閉的。 https://jsbin.com/sefevihohe/1/edit?js,output – afithings

+0

你的代碼看起來很理智。請注意,您提供的SINTER不應在鍵名中包含勾號('),除非它們實際上是數據記錄對象中的數據的一部分(我傾向於認爲它們不是) –

回答

1

然而,原則上你是正確的,但除了導入過程中的錯誤,主要的懷疑IMO是這樣的:MariaDB確實以某些方式對值進行索引排序和標準化以供選擇,而在redis中,你看到的是你所得到的。

例如,如果您查詢「是」,則MariaDB中的值爲「是」,「是」,「是」和「是」都會被選中,在redis中只有「是」 。

它不只是小寫 - 如果你處理unicode,你將進入一個痛苦的世界,試圖通過自己來實現規範化和整理。

+0

我知道「是」v「是」v「是」的問題。奇怪的是,當我在SQL查詢中添加一個「LIMIT」時更準確。 – afithings

+1

這主要是一個編碼問題,所以我將其標記爲正確的答案。我使用LIMIT獲得更多「準確」結果的原因是因爲該分部碰巧與我正在搜索的內容相匹配。謝謝。 – afithings