java缓存和redis,用redis和java缓存数据库

数据库中的信息越多,随着时间的推移,它就会变得越慢。 即使是精心设计的支持许多并发请求的数据库管理系统最终也会达到极限。

数据库缓存是处理这些性能问题的最常见策略之一。 缓存包括将数据库查询的结果保存在一个更快、更容易访问的位置。 如果操作正确,缓存将大幅缩短查询响应时间,减少数据库负载,并降低成本。

但是,缓存也需要小心处理,因为它们本质上是在一个单独的位置复制您的信息。 保持数据库和缓存同步并保持最新可能比您预期的更棘手。 在下一节中,我们将讨论一些最常见的数据库缓存策略。

48cb7d2c5bd6c826907a0f79c8318447.png

手动缓存(也称为缓存备用策略)涉及数据库和缓存的直接管理。 您的应用程序在启动数据库查询之前检查缓存,并在数据库发生任何更改后更新缓存。

如果实现正确,手动缓存虽然有效,但是非常繁琐,尤其是当您需要查询多个数据库时。 出于这些原因,开发人员发明了许多替代的缓存策略。

在读缓存中,应用程序首先查询缓存,看它需要的信息是否在里面。 如果没有,它将从数据库中检索信息,并使用它来更新缓存。 缓存提供程序或缓存库负责查询和更新缓存的详细逻辑。

当应用程序重复请求相同的数据时,通读策略最适合读取量大的工作负载:例如,一个新闻网站反复加载相同的文章。

通读策略的一个缺点是,对缓存的第一次查询总是会导致未命中,因为所请求的信息保证不在缓存中。 为了解决这个问题,开发人员通常会提前用用户可能请求的信息“温暖”数据库同步软件 缓存。

在直写缓存中,首先更新缓存,然后更新数据库。 从应用程序到缓存以及从缓存到数据库都有一条直接的线路。 当与直读缓存结合时,直写策略保证了数据的一致性,消除了手动缓存失效的需要。

在后写缓存(也称为回写缓存)中,应用程序首先将数据写入缓存。 经过一段时间的延迟后,缓存也会将此信息写入数据库。 后写缓存最适合写负载繁重的工作负载,即使出现一些故障和停机,也能表现良好。

Redis是NoSQL数据库最受欢迎的选项之一,它使用键值系统来存储数据。 Redisson是一个Java编程语言的Redis客户端库,它使得使用所有熟悉的Java集合访问Redis功能变得很容易。

Redisson允许您将地图中的数据放在外部存储中。 您可以使用此功能为数据库、web服务或任何其他数据源实现缓存。

下面是一个如何在Redisson中使用读缓存的Java例子。

如果请求的条目在缓存中不存在,它将由MapLoader对象加载:

配置示例:

下面是一个如何在Redis中使用直写缓存的Java例子。

在MapWriter对象更新缓存和数据库之前,缓存更新方法不会返回:

配置示例:

MapWriter接口还用于异步提交对地图对象(缓存)和外部存储(数据库)的更新。 所有地图更新都是成批累积的,并以定义的延迟异步写入。

writeBehindDelay —成批写入或删除操作的延迟。 默认值为1000毫秒。

writeBehindBatchSize —批量大小。 每个批次都包含映射条目写入或删除命令。 默认值为50。

下面,我们看到一个基于Redisson的写后缓存实现配置的Java示例:

所有讨论的策略都适用于Redisson中的RMap、RMapCache、RLocalCachedMap和RLocalCachedMapCache对象。 使用后两个对象可以使Redis中的读取操作速度提高45倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值