我需要在云上实现原子计数器,以便从并发连接中生成一个串行整数。背后的业务是跟踪服务器。
CREATE SEQUENCE serial CACHE 100; SELECT nextval(sequence)
- 140 $ / m MultiAZ AWS RDS db.m3.medium并不像redis那么快,但我认为<平均7毫秒。 "缓存"是一个强大的功能,可以提高性能。redis有INCRBY,而postgres只有"缓存"序列的特征,需要往返DB。
有什么输入?关于这两种选择还是其他?
答案 0 :(得分:7)
我认为你高估了redis失败的风险,导致无法刷新到磁盘并低估了任何RDBMS做同样事情的风险。通过将写入同步到磁盘,可以降低风险。
在redis中,这意味着切换到AOF(仅附加文件)模式,如您已链接到的持久性链接中所述。
没有必要做任何过期的关键技巧。 incr
和incrby
的原子行为足以确保唯一性和持久性,特别是与AOF持久性结合使用时。
Redis对于这个用例来说非常完美。它足够快且可扩展。 Redis现在已经有一段时间了。没有合法的持久性问题也不会引起PostgreSQL或MySQL的关注。
如@Solarflare所述,应用程序一次抓取ID块更具成本效益和可扩展性。这可以使用incrby
以redis方式完成。