2017-10-05 51 views
0

我是Redis的新手,嘗試使用php和redis實現一件事情。我只是在mysql中描述條件,我不會從mysql遷移任何東西到redis。從MySQL使用案例中瞭解Redis

比方說,我有一個表,其中我將存儲用戶的日常消費,用以下結構

+-----------+------------+---------+ 
| user_id | date | count | 
+-----------+------------+---------+ 
| 123  | 2017-06-06 | 231 | 
| 123  | 2017-06-07 | 456 | 
| 124  | 2017-06-06 | 433 | 
| 124  | 2017-06-07 | 188 | 
+-----------+------------+---------+ 

計列將在下列方式更新,每一個電話

UPDATE `table` 
SET count = count + 12 
WHERE user_id = 123 AND date = 2017-06-06 

在瞭解Redis之後,我瞭解Redis中沒有表格的概念並且存儲這些數據,我應該使用以下格式的密鑰:

(e.g. key user:123:date:2017-06-06) 

127.0.0.1:6379> INCRBY user:123:date:2017-06-06 12 
(integer) 12 
127.0.0.1:6379> INCRBY user:123:date:2017-06-06 32 
(integer) 44 

到目前爲止好。

現在我面臨的問題是查詢。 在MySQL中,在每月結束時,我可以簡單地使用下面的查詢用戶展示他們的消費和結算:

SELECT `date`,`count` FROM `table` WHERE `date` > 'some_date' AND `user_id` = 123 

SELECT SUM(`count`),`user_id`,MONTH(date) GROUP BY `user_id`,MONTH(`date`) 

但我不知道如何在Redis的做到這一點,如果我想計算單個用戶,那麼很容易,因爲我知道關鍵的格式,並user_id說明,這樣我就可以創建密鑰,並獲取準確的數據,我需要

127.0.0.1:6379> GET user:123:date:2017-06-06 32 

但就是療法e類似的東西或類似的東西

127.0.0.1:6379> GET user:*:date:* 

或者redis不是爲這種類型的查詢和東西?

任何幫助將是appreciated.Thanks (或者,如果你能告訴我一些有用的文檔)

(原因,我實現它在Redis的,而不是MySQL的是,將會有每秒許多增量查詢,約數百我認爲Redis的將是這將是唯一INCR查詢this.As最大的時間提供更好,一次或兩次搜索)

回答

1

有幾種不同的方式可以將數據存儲在redis中,這有助於查詢。

如果您將每個用戶存儲在自己的設置中,例如

HSET user:1234 date:2017-06-06 231 

那麼這將是很容易的遞增數:

HINCRBY user:1234 date:2017-06-06) 

但更難以得到的日期範圍(你需要通過它檢查日期檢索整個哈希,然後循環。)

如果你使用存儲時代日期的有序集合每個用戶日期:

ZADD userdates:1234 1507317704 123 

然後使用ZRANGEBYSCORE可以輕鬆獲得日期範圍,但難以增加分數,因爲您需要檢索當前分數然後將其寫回。

您也可以使用這兩者的混合,將日期存儲在有序集合中,然後使用它在哈希中查找日期。這取決於你的數據,如果你事先知道日期。