我一直在阅读一些Redis文档并在http://try.redis-db.com/尝试教程 . 到目前为止,我看不出Redis与Velocity或企业库缓存框架等缓存技术之间存在任何差异
您实际上只是使用唯一键将对象添加到内存数据存储中 . 似乎没有任何关系语义......
我错过了什么?
我一直在阅读一些Redis文档并在http://try.redis-db.com/尝试教程 . 到目前为止,我看不出Redis与Velocity或企业库缓存框架等缓存技术之间存在任何差异
您实际上只是使用唯一键将对象添加到内存数据存储中 . 似乎没有任何关系语义......
我错过了什么?
5 回答
不,Redis不仅仅是一个缓存 .
像Cache一样,Redis存储key = value对 . 但与缓存不同,Redis允许您对值进行操作 . Redis中有5种数据类型 - 字符串,集合,哈希,列表和排序集 . 每种数据类型都公开了各种操作 .
理解Redis的最佳方法是对应用程序进行建模,而不考虑如何将其存储在数据库中 .
让我们说我们想要构建StackOverflow.com . 为了简单起见,我们需要问题,答案,标签和用户 .
建模问题,用户和答案
每个对象都可以建模为Map . 例如,问题是包含字段{id,title,date_asked,votes,ask_by,status}的 Map . 同样,答案是带有字段{id,question_id,answer_text,answers_by,votes,status}的 Map . 同样,我们可以为用户对象建模 .
这些对象中的每一个都可以作为哈希直接存储在Redis中 . 要生成唯一ID,可以使用atomic increment命令 . 像这样的东西 -
处理投票
现在,每当有人提出问题或答案时,你只需要这样做
主页问题列表
接下来,我们要存储最新的问题以显示在主页上 . 如果您正在编写.NET或Java程序,则可以将问题存储在List中 . 事实证明,这也是在Redis中存储它的最佳方式 .
每当有人提出问题时,我们都会将其ID添加到列表中 .
现在,当您想要渲染主页时,您可以向Redis询问最近的25个问题 .
现在您已拥有ID,使用流水线技术从Redis检索项目并将其显示给用户 .
标签问题,按投票排序
接下来,我们想要检索每个标签的问题 . 但是SO允许您在每个标签下查看最高投票问题,新问题或未回答的问题 .
为了对此进行建模,我们使用Redis的排序集功能 . 分类集允许您将分数与每个元素相关联 . 然后,您可以根据其分数检索元素 .
让我们继续为Redis标签执行此操作
我们在这做了什么?我们在排序集中添加了问题,并将每个问题的得分(投票数)相关联 . 每次提出问题时,我们都会增加分数 . 当用户点击"Questions tagged Redis, sorted by votes"时,我们只需执行
zrevrange
并返回最重要的问题 .没有刷新页面的
实时问题
最后,奖金功能 . 如果您打开问题页面,SO会在添加新问题时通知您 . Redis如何在这里提供帮助?
Redis有一个pub-sub模型 . 您可以创建 Channels ,例如"channel_questions_tagged_redis" . 然后你
subscribe
用户到一个特定的 Channels . 添加新问题后,您将收到该 Channels 的消息.1150537_然后所有用户都会收到消息 . 您将不得不使用Web套接字或彗星等Web技术将消息实际传递到浏览器,但Redis可以帮助您完成服务器端的所有管道 .持久性,可靠性等
与Cache不同,Redis会将数据保留在硬盘上 . 您可以使用主从设置来提供更好的可靠性 . 要了解更多信息,请在此处查看持久性和复制主题 - http://redis.io/documentation
Redis具有独特的能力,如超快速的lua脚本 . 它的执行时间等于C命令的执行 . 这也为工作许多高级对象(如Locks和Semaphores)所需的复杂Redis数据操作带来了原子性 .
内存数据网格中有一个名为Redisson的Redis,可以轻松构建 distributed application on Java . 感谢分发
Lock
,Semaphore
,ReadWriteLock
,CountDownLatch
,ConcurrentMap
对象和许多其他对象 .完美适用于 Cloud 并支持AWS Elasticache,AWS Elasticache Cluster和Azure Redis Cache支持
不只是缓存 .
在内存键值存储中
支持多种数据类型(字符串,散列,列表,集合,有序集,位图和超级日志)
它提供了将缓存数据存储到物理存储(如果需要)的功能 .
支持pub-sub模型
Redis缓存提供高可用性复制(主/从)
实际上,相对数据表示(或任何类型的数据表示)与数据库角色(缓存,永久持久性等)之间没有依赖关系 .
Redis很适合缓存它是真的,但它只是一个缓存 . 它是高速完全内存数据库 . 它确实在磁盘上保留数据 . 它不是关系型的,而是键值存储 .
我们在 生产环境 中使用它 . Redis帮助我们构建软件,每秒处理数千个请求,并在整个自然生命周期中保留客户业务数据 .
Redis是一种最适合分布式环境/微服务架构的缓存 .
它快速,可靠,提供原子性和一致性,并具有一系列数据类型,如集合,哈希,列表等 .
我在过去的一年里使用它,当你需要非常快速地提供 生产环境 就绪解决方案以及任何与性能相关的问题时,它确实是一个救星,因为你可以随时使用它来缓存数据 .