- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想开始一个大型的 cakePHP 项目,其中性能将是一个问题。我将有一个用户表,其中包含行为树行为和许多与用户相关的财务数据。该应用程序将生成大量动态报告,聚合不同树节点等的数据。
因为有关于 github一个易于使用的库,它将模型的数据源设置为 redis,我想知道将它用于整个应用程序是否是个好主意?有没有人有这方面的经验,如果我决定依赖 Redis 作为主要/唯一的数据存储,可能会出现什么潜在问题?
编辑:我已经安装了 redis 并尝试将 RedisModel 用于具有简单关系 HasMany/BelongsTo 的两个模型。当我尝试简单地使用像标准 AppModels 这样的模型时 - 它根本无法工作(Redis 错误:缺少 key )。显然你不能以标准方式使用 Model->find Model->save 等。您必须改用 redis 方法(setKeyValue 等)。这意味着分页和其他 cakePHP future 也将不起作用。所以也许对我所有的模型都使用 redisModel 不是最好的主意......
最佳答案
我不能具体代表 CakePHP,但我会一般性地谈论 redis,并特别讨论您问题的要点,它最终应该适用于您选择的框架。让我们看看:
你提到你想启动一个性能将成为问题的应用程序——我只是想提一下你应该小心假设你会需要一个 nosql 解决方案,因为这很难事先评估。 Redis 非常快,但事实证明,例如 MySQL 能够很好地处理数百万条记录和操作,前提是正确配置和使用它,如果您需要大量关系结构,它会简单得多。
<关于 Redis 作为主要且唯一的数据存储:
Redis 非常稳定,可以胜任这项工作。 Instagram的据报道stored 300 million key-value pairs伪分片使用散列效果很好,虽然它不是唯一的数据他们使用的存储系统,这表明redis非常可靠。这个网站 (Stack Overflow) uses redis也广泛用于缓存目的。
Redis 也是reported平均拥有出色的整体连续正常运行时间(考虑到以上几点,这不足为奇)
存在缓解停机问题的选项,replication在某种程度上得到支持,并且Redis Cluster即将推出以支持适当的分布式方法。
你可能面临的主要问题是没有正确理解它是如何运作的坚持工作。你绝对应该阅读 this和 this开始之前的文章,因为这一点很重要。简而言之,redis 不会立即将更改写入磁盘,这意味着根据您的配置,崩溃可能导致自上次磁盘写入后几秒到几分钟不等的数据丢失。根据您的用例,这可能是问题,也可能不是问题;如果数据非常敏感(例如,财务记录),您可能需要在转用 Redis 之前三思而后行,或者构建一个不单独使用 Redis 而是与另一个存储系统结合使用的系统。
像 Redis 这样的非关系数据存储中的关系结构意味着需要做更多的工作并且经常复制/非规范化数据。可以做到,但需要考虑;在你的问题中你提到你需要聚合数据以生成动态报告,你确定要为此使用 redis 吗?听起来关系数据库可以以非常小的性能成本为您提供更大的灵 active 。如果您事先知道您需要对数据运行复杂的查询,那么最好不要重新发明轮子,除非您绝对需要。
我的建议是首先更好地了解 Redis 是什么以及它是如何工作的,可能会构建自己的模型而不是依赖他人来更好地理解可以做什么和不能做什么,然后从那里评估你想在哪里做拿着。 Redis 足够可靠,可以独立使用,但归根结底,明智的做法是为正确的工作使用正确的工具,你可能会发现你的应用程序的某些部分与 Redis 配合得很好,而另一些则更适合更传统的存储系统。
关于cakephp - 用于 cakePHP 应用程序的 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535049/
我有一个关于 Redis Pubsub 的练习,如下所示: 如果发布者发布消息但订阅者没有收到服务器崩溃。订阅者如何在重启服务器时收到该消息? 请帮帮我,谢谢! 最佳答案 在这种情况下,消息将永远消失
我们正在使用 Service Stack 的 RedisClient 的 BlockingDequeue 来保存一些数据,直到它可以被处理。调用代码看起来像 using (var client =
我有一个 Redis 服务器和多个 Redis 客户端。每个 Redis 客户端都是一个 WebSocket+HTTP 服务器,其中包括管理 WebSocket 连接。这些 WebSocket+HTT
我有多个 Redis 实例。我使用不同的端口创建了一个集群。现在我想将数据从预先存在的 redis 实例传输到集群。我知道如何将数据从一个实例传输到集群,但是当实例多于一个时,我无法做到这一点。 最佳
配置:三个redis集群分区,跨三组一主一从。当 Master 宕机时,Lettuce 会立即检测到中断并开始重试。但是,Lettuce 没有检测到关联的 slave 已经将自己提升为 master
我想根据从指定集合中检索这些键来删除 Redis 键(及其数据集),例如: HMSET id:1 password 123 category milk HMSET id:2 password 456
我正在编写一个机器人(其中包含要禁用的命令列表),用于监视 Redis。它通过执行禁用命令,例如 (rename-command ZADD "")当我重新启动我的机器人时,如果要禁用的命令列表发生变化
我的任务是为大量听众使用发布/订阅。这是来自 docs 的订阅的简化示例: r = redis.StrictRedis(...) p = r.pubsub() p.subscribe('my-firs
我一直在阅读有关使用 Redis 哨兵进行故障转移的内容。我打算有1个master+1个slave,如果master宕机超过1分钟,就把slave变成master。我知道这在 Sentinel 中是
与仅使用常规 Redis 和创建分片相比,使用 Redis 集群有哪些优势? 在我看来,Redis Cluster 更注重数据安全(让主从架构解决故障)。 最佳答案 我认为当您需要在不丢失任何数据的情
由于 Redis 以被动和主动方式使 key 过期, 有没有办法得到一个 key ,即使它的过期时间已过 (但 在 Redis 中仍然存在 )? 最佳答案 DEBUG OBJECT myKey 将返回
我想用redis lua来实现monitor命令,而不是redis-cli monitor。但我不知道怎么办。 redis.call('monitor') 不起作用。 最佳答案 您不能从 Redis
我读过 https://github.com/redisson/redisson 我发现有几个 Redis 复制设置(包括对 AWS ElastiCache 和 Azure Redis 缓存的支持)
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
1. 认识 Redis Redis(Remote Dictionary Server)远程词典服务器,是一个基于内存的键值对型 NoSQL 数据库。 特征: 键值(key-value)型,value
1. Redis 数据结构介绍 Redis 是一个 key-value 的数据库,key 一般是 String 类型,但 value 类型多种多样,下面就举了几个例子: value 类型 示例 Str
1. 什么是缓存 缓存(Cache) 就是数据交换的缓冲区,是存贮数据的临时地方,一般读写性能较高。 缓存的作用: 降低后端负载 提高读写效率,降低响应时间 缓存的成本: 数据一致性成本 代码维护成本
我有一份记录 list 。对于我的每条记录,我都需要进行一些繁重的计算,因为我要在Redis中创建反向索引。为了达到到达记录,需要在管道中执行多个redis命令(sadd为100 s + set为1
我有一个三节点Redis和3节点哨兵,一切正常,所有主服务器和从属服务器都经过验证,并且哨兵配置文件已与所有Redis和哨兵节点一起更新,但是问题是当Redis主服务器关闭并且哨兵希望选举失败者时再次
我正在尝试计算Redis中存储的消息之间的响应时间。但是我不知道该怎么做。 首先,我必须像这样存储chat_messages的时间流 ZADD conversation:CONVERSATION_ID
我是一名优秀的程序员,十分优秀!