gpt4 book ai didi

mysql - 从 MySQL 用例理解 Redis

转载 作者:可可西里 更新时间:2023-11-01 11:12:57 25 4
gpt4 key购买 nike

我是 Redis 的新手,正在尝试用 PHP 和 Redis 实现一个东西。

我只是在描述 MySQL 中的场景,我并没有将任何东西从 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 中执行此操作,如果我想为单个用户计算,那么很容易,因为我知道 key 的格式并具有 user_id,因此我可以创建 key 并获取准确的数据我需要

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

但有没有类似或类似的东西

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

或者 Redis 不是为这种类型的查询而设计的吗?

如有任何帮助,我们将不胜感激。谢谢(或者如果你可以指导我一些有用的文档)

(原因,我在 Redis 中实现它而不是 MySQL,每秒会有很多增量查询,大约数百个,我认为 Redis 会更好。因为最大时间它只会是 INCR 查询,并且一次或两次搜索)

最佳答案

有几种不同的方法可以将数据存储在 redis 中,这有助于查询。

如果您将每个用户存储在他们自己的集合中,例如

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

那么增加计数就很容易了:

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

但更难按范围获取日期(您需要检索整个散列,然后遍历它来检查日期。)

如果您使用纪元日期将每个用户日期存储在排序集中:

ZADD userdates:1234 1507317704 123

然后使用 ZRANGEBYSCORE 获取日期范围会很容易,但很难增加分数,因为您需要检索当前分数然后将其写回。

您也可以混合使用这两者,将日期存储在一个排序集中,然后使用它在散列中查找日期。这取决于您的数据以及您是否提前知道日期。

关于mysql - 从 MySQL 用例理解 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46581053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com