【问题标题】:Switching from SQL to Redis as standalone独立从 SQL 切换到 Redis
【发布时间】:2015-08-24 23:55:27
【问题描述】:

提问前的背景信息

我经常使用状态会话来存储我的复杂对象,我也最多使用 8 个表。在这 8 个表上,我使用大约 25 个 SP 来根据用户 ID 和用户选择的一些键值加入用户。所有这些都是在 SQL Server 数据库上完成的。

  1. 邮政编码空间值
  2. 男性或女性
  3. 有图片
  4. 已批准的个人资料
  5. 注册账号(支付服务费)

我将图像存储在我的应用程序服务器上的文件系统中。我将路径存储在我的数据库表上。

用例

约会网站,大部分时间都是独特的有效负载,例如根据特定标准进行搜索,更新和获取带有照片的个人资料。我正在使用 asp.net MVC,这只是一个网站。 (用于其他设备的响应式设计的单独网页)

问题

我可以只使用 Redis 作为我的主要数据存储,而不是根据我的用例使用 SQL Server 数据库吗?

要点

我不打算在未来拥有超过 10 到 12 张桌子。数据输入主要是字符串。当我想保留一个复杂的对象(如配置文件信息和图像路径)时,我使用会话状态。我喜欢我读到的关于 Redis 速度的内容,我认为如果我将它们叠加到 Redis 和数据库中,那么复制更新会适得其反。

【问题讨论】:

    标签: asp.net sql-server session caching redis


    【解决方案1】:

    我认为你不能轻易地用 Redis 替换你的数据库,因为你缺少诸如 FK、索引、约束之类的东西(Redis 是一个 NoSQL,所以你没有任何关系属性)。所以你最终会自己构建这些,尤其是你的 25 个存储过程的索引,这可能会变得非常复杂。此外,您的 8 个表有 25 个存储过程这一事实告诉我,您在这里有相当多的逻辑,这将更难移动到 Redis 或您的应用程序层。

    当然,将 Redis 添加到您的堆栈并不容易,它会使您的应用程序更加复杂,因此您必须权衡利弊。 Redis 因为它把所有的东西都保存在内存中,所以它最适合缓存层。

    【讨论】:

    • 感谢您的输入,我之所以响应这么快,是因为我实际上正在尝试将 Redis 与我的数据库堆叠在一起。使用 Service Stack Redis 处理它。让我们看看情况如何。
    • 是的,我知道我想要它作为我的缓存层,很多研究都把我带到了那里。我没有在我的会话中存储对象,而是研究了使用 Service Stack 提供的一些 api 将其作为缓存存储在 Redis 中的不同方式。仍然很困惑,但是,我比我问这个问题时更聪明了哈哈
    • 你到底想优化什么,你的主要问题是什么?假设您的 Session 在 proc 中,在 Session 中存储对象比从 Redis 存储和检索更快。除非您的网络服务器内存有问题或考虑自动缩放之类的东西。
    • 我计划在未来实现signalr websockets/long polling。如果我将来必须扩展,在 proc 会话中将移动到会话状态,这是我不想要的。绝对不是数据库。我不想在 cookie 中公开共享会话 ID。感觉就像是不好的做法。我也不想在会话中序列化和反序列化复杂对象。我宁愿将它们缓存在redis中。所以到目前为止我没有任何问题,但我感觉在路上我目前的方法根本无法很好地扩展。服务堆栈提供了很多开箱即用的功能,这是我喜欢的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多