Redis和数据完整性

viv*_*v1d 9 integrity redis

我对REDIS DB有一些问题:

  • 如何确保数据完整性?
  • 有方法确保完整性吗?
  • Redis是主键吗?或替代品
  • 外键?
  • 参照完整性?
  • 如何实施ACID属性?

永远感谢您提供反馈意见

最好的问候 - SB -

Did*_*zia 18

Redis是类固醇的关键/价值商店,而不是关系数据库.

如何确保数据完整性?有方法确保完整性吗?

Redis支持从"非安全但非常高效"到"安全但不是非常高效"的不同持久性选项.查看更多信息:

Redis还支持主从复制机制,以在完全节点发生故障时保护数据.

单个Redis实例始终提供数据一致性(在CAP定理的意义上,不是在ACID的意义上).

Redis是主键吗?或替代品

Redis是一家钥匙/超值商店.所有物品都有钥匙.没有主键或辅助键的概念.

外键?参照完整性?

这些是关系概念.Redis不是关系数据库.外键没有任何意义(Redis没有表格概念).Redis不维护参照完整性,必须由客户端应用程序强制执行.

如何实施ACID属性?

由于Redis不是事务性数据库,因此不应该实现它们.Redis没有回滚机制.但是,就ACID属性而言:

  • 使用服务器端Lua脚本的一组命令可以保证原子性和一致性
  • 始终在命令级别保证隔离,并且还可以使用MULTI/EXEC块或Lua脚本保证一组命令的隔离
  • 激活AOF时可以保证耐用性(使用系统fsync)

  • `当 AOF 被激活(使用系统的 fsync)时可以保证耐用性` <-- 是你的 antirez 链接的来源(顺便说一句,感谢你的伟大链接)你知道这对性能有什么样的影响吗?即它是否将 redis 带回了与 SQL/Mongo 相同的联盟? (2认同)
  • 对性能的影响是灾难性的。在这种配置中,任何带有预写日志的 RDBMS 或 NoSQL 引擎的性能都比 Redis 好得多。这是因为 Redis 是单线程的。在此配置中,fsync 直接在事件循环中完成。因此,任何 fsync 都会系统地阻止所有连接。 (2认同)
  • `这是因为Redis是单线程的。在这个配置中,fsync 是直接在事件循环中完成的` 你确定吗?Redis Persistence 链接说“AOF 也需要 fork() 但你可以调整你想要重写日志的频率,而不会在持久性上做任何权衡。” (2认同)
  • 您混淆了后台线程以重写 AOF 文件(以压缩它),而前台线程必须执行同步操作。保证持久性的唯一方法是在事件循环中同步,让它变慢。 (2认同)