从MySQL使用案例中了解Redis
我是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最大的时间提供更好,一次或两次搜索)
有几种不同的方式可以将数据存储在redis中,这有助于查询。
如果您将每个用户存储在自己的设置中,例如
HSET user:1234 date:2017-06-06 231
那么这将是很容易的递增数:
HINCRBY user:1234 date:2017-06-06)
但更难以得到的日期范围(你需要通过它检查日期检索整个哈希,然后循环。)
如果你使用存储时代日期的有序集合每个用户日期:
ZADD userdates:1234 1507317704 123
然后使用ZRANGEBYSCORE可以轻松获得日期范围,但难以增加分数,因为您需要检索当前分数然后将其写回。
您也可以使用这两者的混合,将日期存储在有序集合中,然后使用它在哈希中查找日期。这取决于你的数据,如果你事先知道日期。
或者是Redis的不是这种类型的查询和东西制成?
这是它的主要内容,但你可以一)维护自己的搜索索引 - 阅读更多https://redis.io/topics/indexes,或b)使用http://redisearch.io做到这一点。