我一直在阅读一些Redis文档,并在http://try.redis-db.com/上尝试了该教程。到目前为止,我看不到Redis和诸如Velocity或Enterprise Library Caching
Framework之类的缓存技术之间的任何区别。
您实际上只是在使用唯一键将对象添加到内存数据存储中。似乎没有任何关系语义…
我想念什么?
不,Redis不仅仅是缓存。
像缓存一样,Redis存储键=值对。但是与缓存不同,Redis可让您对值进行操作。Redis中有5种数据类型-
字符串,集合,哈希,列表和排序集合。每种数据类型都公开各种操作。
理解Redis的最好方法是对应用程序建模,而不用考虑如何将其存储在数据库中。
每个对象都可以建模为地图。例如,问题是具有字段{id,title,date_asked,votes,asked_by,status}的地图。类似地,答案是具有字段{id,question_id,answer_text,answer_by,票数,状态}的地图。同样,我们可以为用户对象建模。
这些对象中的每一个都可以作为哈希直接存储在Redis中。要生成唯一的ID,可以使用atomic递增命令。像这样-
$ 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
接下来,我们要存储最新问题以显示在主页上。如果您正在编写.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"
现在您有了ID,使用流水线从Redis检索项目并将其显示给用户。
接下来,我们要检索每个标签的问题。但是SO允许您在每个标签下查看投票最多的问题,新问题或未回答的问题。
为了对此建模,我们使用Redis的Sorted Set功能。排序集可让您将分数与每个元素相关联。然后,您可以根据元素的分数来检索它们。
让我们继续为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"
我们在这里做了什么?我们将问题添加到排序的集合中,并为每个问题分配分数(投票数)。每次提出问题时,我们都会增加其分数。然后,当用户单击“按标记排序的问题,标记为Redis的问题”时,我们只需执行一次zrevrange
,即可获得最热门的问题。
最后,还有奖金功能。如果您打开问题页面,SO将在添加新问题时通知您。Redis如何在这里提供帮助?
Redis具有发布订阅模型。您可以创建频道,例如“
channel_questions_tagged_redis”。然后subscribe
,您将用户转到特定频道。添加新问题时,您会publish
向该频道发送消息。然后,所有用户都将收到该消息。您必须使用网络套接字或彗星之类的网络技术才能将消息实际传递到浏览器,但是Redis可以帮助您解决服务器端的所有问题。
与缓存不同,Redis将数据持久保存在硬盘上。您可以使用主从设置来提供更好的可靠性。要了解更多信息,请遍历此处的持久性和复制主题-http:
//redis.io/documentation
实际上,您只是使用唯一键将对象添加到内存中的数据存储中。似乎没有任何关系语义... 我错过了什么?
我对缓存这件事很陌生,并为我的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