是Redis的只是一个缓存?(Is Redis just a cache?)

2019-06-23 14:44发布

我一直在阅读一些Redis的文档,并在试图教程http://try.redis-db.com/ 。 到目前为止,我看不到的Redis和缓存技术,如速度或企业库缓存框架之间有什么区别

你只是有效地使用一个唯一的密钥将对象添加到内存中的数据存储。 目前似乎没有是任何关系的语义...

我在想什么?

Answer 1:

不,Redis的比缓存等等。

像缓存,Redis的存储key = value对。 但不同的是高速缓存,Redis的让你的值进行操作。 有在5种Redis的数据类型 - 字符串,集合,哈希,列表和有序集合。 每个数据类型公开的各种操作。

了解Redis的最好的办法是不考虑你将如何将其存储在数据库中的应用程序模型。

比方说,我们要建设StackOverflow.com。 为了简单,我们需要的问题,回答,标签和用户。

造型问题,用户和解答

每个对象都可以被模拟为一个地图。 例如,一个问题是地图领域{ID,标题,date_asked,票,asked_by,状态}。 同样,答案是场{ID,question_id,ANSWER_TEXT,answered_by,票,状态}地图。 同样,我们可以模拟用户对象。

每个这样的对象可以被直接存储在Redis的作为哈希。 要生成唯一的ID,你可以使用原子增量命令。 事情是这样的 -

$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK

$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK

搬运桌布

现在,每次有人upvotes一个问题或答案,你只需要做到这一点

$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2

为首页问题列表

接下来,我们要存储最近的问题显示在主页上。 如果你正在写一个.NET或Java程序,你将存储在列表中的问题。 事实证明,那就是这些信息存储在Redis的和最好的方式。

每当有人问一个问题,我们增加其ID添加到列表中。

$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1

现在,当你想使你的主页,你问Redis的为最近25个问题。

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

现在,你有IDS,检索使用流水线从Redis的项目,并将其展示给用户。

通过标签问题,通过投票排序

接下来,我们要检索每个标签的问题。 但如此可以让你看到顶级投每个标签下的问题,新的问题或悬而未决的问题。

为了模拟这种情况,我们使用Redis的有序集合功能。 排序的设置可以让你与每个元素的得分相关联。 然后,您可以检索根据他们的分数元素。

让我们继续前进,为Redis的标签做到这一点

$ zadd questions_by_votes_tagged:redis 2 question:1 
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2 
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613 
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5 
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5 
1) "question:2"
2) "question:613"
3) "question:1"

我们做了什么在这里? 我们增加了问题的有序集合,以及相关联的分值(投票数)每一个问题。 每一个问题得到upvoted时间,我们将增加它的分数。 当用户点击“标记问题的Redis,通过分类表决”,我们只是做了zrevrange并取回提出的热门问题。

实时问题无需刷新页面

最后,奖金特点。 如果你把这些问题页面打开,所以会通知您,当添加了一个新的问题是。 如何Redis的帮助在这里?

Redis的有一个发布 - 订阅模式。 您可以创建渠道,例如“channel_questions_tagged_redis”。 然后,您subscribe用户在特定的频道。 当添加了一个新的问题是,你会publish一条消息,该通道。 那么所有的用户将获得该消息。 你将不得不使用网络技术,如网络插座或彗星实际邮件传递到浏览器,但Redis的帮助你在服务器端所有的管道。

持久性,可靠性等。

不同于缓存,Redis的仍然存在硬盘上的数据。 你可以有一个主从设置,以提供更好的可靠性。 要了解更多信息,经过持久性和复制主题在这里- http://redis.io/documentation



Answer 2:

Redis的有像超快速LUA的脚本独特的能力。 它的执行时间等于C命令执行。 这也带来了像锁和信号灯的工作很多先进的对象需要复杂的Redis的数据操纵原子。

有基于称为内存数据网格一个Redis的Redisson它可以轻松地建立在Java的分布式应用程序 。 由于分布式LockSemaphoreReadWriteLockCountDownLatchConcurrentMap对象和其他许多人。

完美的作品在云和支持AWS Elasticache , AWS Elasticache集群和Azure的Redis的缓存支持



Answer 3:

不只是一个缓存。

  • 在存储器键 - 值存储
  • 支持多种数据类型(字符串,散列,列表,集合,排序集合,位图和hyperloglogs)
  • 它提供到高速缓存数据存储到物理存储(如果需要)的能力。
  • 支持发布 - 订阅模式
  • Redis的缓存提供复制为高可用性(主/从)


Answer 4:

其实,有相关数据表示(或任何类型的数据表示的)和数据库角色(高速缓存,永久持久性等)之间不存在相关性。

Redis的是良好的缓存这是真的,但它绝不仅仅只是一个缓存。 它完全是高速内存数据库。 它坚持在磁盘上的数据。 这不是关系型的,它的键 - 值存储。

我们将其用于生产。 Redis的帮助我们建立一个全天然的生命周期中处理每秒数千次,并保持客户的业务数据请求的软件。



Answer 5:

Redis的是最适合于分布式环境/微服务架构的缓存。

它是快速的,可靠的,提供了原子性和一致性,并且具有数据类型,如套范围,散列列出等

我使用它从过去的一年,这确实是作为一个救世主的时候,你需要提供生产就绪的解决方案非常快,对于任何性能相关的问题,你可以随时用它来缓存数据。



Answer 6:

除了作为一个缓存服务器,Redis的具体的数据结构的服务器。 作为一个数据结构服务器的形式的缓存意味着很多,因为数据结构的程序或应用程序的基本面。 考虑你使用SQL数据库作为存储技术,需要构建一个列表,哈希表,排名一套或类似的东西,它是一种在颈部疼痛。 Redis的可以直接为您提供这些功能在一个非常简单的方法,因此非常简化开发。

在另一方面,数据结构服务器不必处于高速缓存的形式。 有与Redis的兼容项目,但有持续性存储引擎。



文章来源: Is Redis just a cache?
标签: caching redis