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

后端 - 网站中各种数据查询如何在redis中缓存,用什么类型?

范志勇
2024-02-24

网页中的前n条数据,例如文章某类前n条等数据,如何在redis中缓存,用什么类型?
查询频繁过关联多的表,是用string类型,缓存成json形式吗?
还有哪些常用经验求大佬一并指教!!!

共有2个答案

西门振
2024-02-24

看你具体场景设计,可以最直接粗暴的办法,string类型,好比是直接把前n条数据按文章ID为key存到内存里(数据的json字符串形式保存到redis里),设定一个有效期,对于经常访问的文章的前n条数据进行刷新(重新设置缓存有效期,保持这个文章的数据是热数据一直在内存中)。
如果对顺序,排序比较看重也可以用list,都行其实。用hash也可以,看你自己觉得那种方式写代码更方便选哪种。

堵才哲
2024-02-24

缓存数据在Redis中有多种数据类型可以使用,具体选择哪种类型取决于数据的特性和使用场景。

  1. String类型:这是最基础的数据类型,可以用来缓存任何数据,包括数字、字符串、列表、集合等。对于需要缓存复杂数据结构的情况,可以将数据序列化为JSON或其它格式,然后以String类型存储。
  2. List类型:List类型可以用来缓存有序的字符串列表,特别适合用来缓存分页查询的结果。例如,你可以将每个页面的数据以List形式存储,然后将页码作为键,这样就很容易通过页码来获取对应的数据。
  3. Set类型:Set类型可以用来缓存不重复的字符串集合。如果你需要缓存某个分类下的所有文章标题,就可以使用Set类型。
  4. Hash类型:Hash类型可以用来缓存复杂的数据结构,如对象。你可以将文章对象作为Hash的键,文章ID作为Hash的字段,文章内容作为Hash的值。这样可以通过文章ID快速获取文章内容,非常适合缓存需要频繁查询的数据。
  5. Sorted Set类型:Sorted Set类型可以用来缓存带排序的字符串集合。你可以将文章的点赞数作为Sorted Set的分数,文章标题作为Sorted Set的成员,这样可以通过分数来获取热度最高的文章。

对于查询频繁、关联表多的问题,如果你的数据量不大,可以考虑将关联表的数据合并后以JSON格式存储在String类型中。这样可以减少查询的复杂度。但如果数据量很大,建议使用Redis的Hash或Sorted Set类型来缓存数据,这样可以更高效地获取和查询数据。

此外,使用Redis缓存时还需要注意以下几点:

  • 缓存策略:合理设置缓存过期时间,避免出现数据不一致的问题。对于更新频繁的数据,可以使用较短的时间戳;对于不经常变动的数据,可以适当延长缓存时间。
  • 数据一致性:当数据库中的数据发生改变时,需要同步更新Redis中的数据。可以使用消息队列等技术实现异步更新。
  • 数据安全性:Redis的数据是明文存储的,需要注意数据的安全性。可以使用密码保护、数据加密等措施来保护数据的安全。
 类似资料:
  • 我已经用angular 5.0和创建了渐进式Web应用程序(PWA)。net核心2.0。它在脱机模式下工作正常。但脱机模式下仅缓存静态数据。我需要将以前请求的网络数据存储在service worker缓存中,以便在脱机模式下通过service worker缓存获取这些数据。

  • 我尝试在项目中使用jooq,但出于性能原因,我希望缓存查询。在性能考虑部分的用户手册中,提到了查询缓存,但没有关于如何实现的示例。因此,我尝试按如下方式缓存查询(例如SimpleSelectConditionStep): 我的软件是一个多线程的web应用程序,但可以保证两个不同的线程不能同时使用相同的查询(池在再次放入池之前不会返回相同的查询)。 我知道比工厂不是一个线程安全的对象,但我想知道在代

  • 问题内容: Python noob,因为这是我的第一个项目,所以请原谅我。 在我单击应用程序上的“注销”之前,该网站运行良好。在那之后,网站会给我这个错误:/ login /的SiteNotExist不存在网站匹配查询。 我到处搜索,获得的唯一解决方案与设置站点框架,SITE_ID等有关。我认为计算机上的这些项目都不错,但是找不到帮助你进行检查的演练/指南。 谁能告诉我问题出在哪里以及如何解决?在

  • Python新手,因为这是我的第一个项目,所以原谅我的不熟悉。 在我点击应用程序上的“注销”之前,该网站一直运行良好。之后,网站会给我这个错误:DoesNotExist at/login/Site匹配查询不存在。 我到处搜索,得到的唯一解决方案是建立站点框架、SITE_ID等。我认为我电脑上的这些项目都很好,但是我找不到一个演练/指南来帮助我检查它们。 有人能告诉我问题是什么以及如何解决它吗?提前

  • 本文向大家介绍MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更?相关面试题,主要包含被问及MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更?时的应答技巧和注意事项,需要的朋友参考一下 查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被清空. 因此对于频繁更新的表来说, 查询缓存不一定能起到正面效

  • 问题内容: 在我的Django应用程序中,我反复在数据库上运行相同的查询(例如,每10秒运行一次)。然后,我在收到的查询集上创建一个MD5和,并将其与上一次运行中创建的MD5和进行比较。如果两者相等,则数据没有更改,并且不需要更新网页。 在执行此操作时,数据库中的数据可能会更改。 但是,显然由于查询缓存,该查询返回相同的查询集。 如何禁用查询缓存并在数据库上显式执行查询? 问题答案: 我遇到了我认