Redis缓存策略

(1)读不动缓存,写动缓存(读的时候不动缓存,那什么时候动缓存呢,那就是写的时候,对吧)。那我们怎么知道什么时候应该把数据写进去,什么数据应该写进去呢。那就是全量写。就相当于把redis当数据库来用了,要保证写的数据同步到redis中去,这种全量写,一般是不会读数据库的,数据库的压力就会很小,只扛写的压力。

读远大于写的系统,用这种策略能够很好得保护数据库。

这个模式会先去读缓存,没读到,一般也不会去读数据库了,没读到就返回没有。

缺点:

(1)redis内存空间占用大,内存的价格要比硬盘贵。

(2)数据同步要求高,redis中的数据要和mysql中的数据同步。


(2)写不动缓存,读动缓存。数据不一致情况比较严重,一般不使用。


(3)读写均更新

  • Cache-Aside Pattern:旁路缓存模式

读:先去缓存中看看有没有数据,有数据就返回,没有数据的话,就去查数据库,然后把数据放到缓存中。

写:先去更新数据库,然后将缓存中的数据删了,为什么不更新缓存中的数据呢?---》因为更新可能会造成数据库和redis中的数据不一致。但是当数据并发量高的时候,可以使用更新。更新可以有效地利用缓存,删除,再下一次读取的时候,还需要将数据库中的数据读到缓存中。

  • Read Through Cache Pattern:读穿透模式

和Cache-Aside差不多,也是先从缓存中获取数据,没有就查数据库,然后放入缓存,区别是,Cache-Aside在于应用服务不再和缓存直接交互,而是先访问数据服务,数据服务自己来根据情况查询缓存或数据库。

  • Write Through Cache Pattern:写穿透模式

先查询要写入的数据在缓存中是否存在

存在,就先更新缓存再更新数据库。

不存在,(1)一种策略:先将数据写入缓存,然后由组件同步更新到数据库

(2)另一种策略,直接写入数据库,等读的时候再加载进行。

一般使用Write Through,都搭配Read Through使用。Write Through潜在使用场景是银行系统。

Write Through适用情况有:

(1)需要频繁读取相同数据,

(2)不能忍受数据丢失和数据不一致。

在使用Write Through时要特别注意的是缓存的有效性管理,否则会导致大量的缓存占用内存资源。甚至有效缓存数据会被无效的缓存数据给清除掉。

  • Write Behind Pattern: 又叫Write Back,异步缓存写入模式

Write Behind也是先写缓存,再写数据库。只不过是异步的。Write-Through是马上写数据库。

Write-Behind和Write-Through在"程序只和缓存交互且只能通过缓存写数据"这方面很相似。不同点在于Write-Through会把数据立即写入数据库中,而Write-Behind会在一段时间之后(或是被其他方式触发)把数据一起写入数据库,这个异步写操作是Write-Behind的最大特点。

数据库写操作可以用不同的方式完成,其中一个方式就是收集所有的写操作并在某一时间点(比如数据库负载低的时候)批量写入。另一种方式就是合并几个写操作成为一个小批次操作,接着缓存收集写操作一起批量写入。

异步写操作极大地降低了请求延迟并减轻了数据库的负担。同时也放大了数据不一致的。比如有人此时直接从数据库中查询数据,但是更新的数据还未被写入数据库,此时查询到的数据就不是最新的数据。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值