当前位置: 首页 > 知识库问答 >
问题:

Redis只是一个缓存吗?

连时铭
2023-03-14

实际上,您只是使用唯一键将对象添加到内存中的数据存储中。似乎没有任何关系语义...

我错过了什么?

共有1个答案

袁谭三
2023-03-14

不Redis不仅仅是一个缓存。

像缓存一样,Redis存储key=value对。但与缓存不同的是,Redis允许您对值进行操作。Redis中有5种数据类型--字符串、集、散列、列表和排序集。每个数据类型都公开各种操作。

理解Redis的最好方法是对应用程序建模,而不考虑如何将其存储在数据库中。

每个对象都可以被建模为一个地图。例如,一个问题是一个包含字段{id,title,date_asked,votes,asked_by,status}的映射。类似地,答案是具有字段{id,question_id,answer_text,answered_by,votes,status}的映射。类似地,我们可以对一个用户对象进行建模。

这些对象中的每一个都可以作为哈希直接存储在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

现在,每次有人支持一个问题或一个答案,你只需要这样做

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

现在您有了ID,使用流水线从Redis检索项目并将其显示给用户。

接下来,我们要检索每个标记的问题。但SO允许您在每个标签下查看最热门的投票问题、新问题或未回答的问题。

为了对此建模,我们使用Redis的Sorted Set特性。排序集允许您将分数与每个元素关联起来。然后可以根据元素的得分检索元素。

$ 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"
 类似资料:
  • 问题内容: 我一直在阅读一些Redis文档,并在http://try.redis-db.com/上尝试了该教程。到目前为止,我看不到Redis和诸如Velocity或Enterprise Library Caching Framework之类的缓存技术之间的任何区别。 您实际上只是在使用唯一键将对象添加到内存数据存储中。似乎没有任何关系语义… 我想念什么? 问题答案: 不,Redis不仅仅是缓存。

  • 我对缓存这件事很陌生,并为我的spring boot应用程序学习了一些不同的解决方案。我在看Spring缓存,它是一种比我看到的redis缓存更简单的缓存机制。还有很多像“spring redis cache”这样的资源。当我看一下简单用法时,我看不出有什么不同。即使注释是相同的(Cacheable、CacheEvict、CachePut等),除了额外的redis配置和redis docker容器

  • 我一直在研究Redis(完全没有经验,只是研究了理论),在做了一些研究之后,发现它也被用作缓存。例如StackOverfolow it self。 有什么好处吗? 我试图直接浏览这个答案redis-cache-vs-using-memory-,但我想我没有得到答案中的关键行: “基本上,如果您需要您的应用程序在共享相同数据的几个节点上进行扩展,那么将需要类似Redis(或任何其他远程键/值存储)的

  • 主要内容:缓存穿透,缓存击穿,缓存雪崩在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库 MySQL 配合使用。 Redis 会把 MySQL 中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候,就不需要到 MySQL 中去查询了,而是直接获取 Redis 中的缓存数据,从而降低了后端数据库的读取压力。如果说用户查询的数据 Redis 没有,此时用户的查询请求就会转到

  • 问题内容: 我是Laravel的新手。我已经对该主题进行了研究,但似乎找不到找到可以解决问题的答案。 我知道Laravel的默认缓存驱动程序设置为 file ,可以更改。它还有一些手工缓存命令,例如: 1) 即使Laravel具有一些自动处理某些缓存的内置命令和功能(无法确切了解哪些部分),我仍然必须在查询结果上手动使用Cache Facade,对吗? 它不会自动执行操作,仅在我想更改某些内容时才

  • 我必须使用StackExhange.redis C#在redis缓存中频繁添加N个(独立的)项,每个项都有不同的过期时间,以便在客户端有最小的时间,在服务器端有最小的阻塞和成本。Redis服务器每秒将收到数百个get请求,所以我不想打乱get时间。 我已经阅读了这里的文档并在这里回答。我找不到一个执行此操作的方法。考虑到不同的选择: null