为了账号安全,请及时绑定邮箱和手机立即绑定

redis 缓存方案--有没有可用的?

redis 缓存方案--有没有可用的?

千万里不及你 2019-03-21 15:13:17
现在的方案是,sql 作为key 查询结果序列化后 存入value 。表如果有数据修改添加删除,flushDB()。但是整个项目只要有数据变更缓存就没了。谁还有其他方案?想知道的就是数据增删改对redis都有操作后再对数据库操作,redis里查询的永远是最新的,当某些原因redis里查不到时查数据库然后保存到reids里。这种方案有谁实现了吗?
查看完整描述

6 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

为啥要用sql作为key....还每次flushdb,你可以换个思路,假如有个表是商品,主键是id,你可以建一个key是detail:商品id的缓存,把这行记录作为value,数据类型hash或string都行。有些时候你的业务要根据主键查某条商品信息的时候,先去redis看看有没有detail:主键的缓存,有的时候就直接取缓存,没有命中缓存然后查数据库,并把查询结果存入缓存。还有就是当有该条记录变更的时候,可以直接删掉缓存,也可以update缓存。
这只是一个很简单的例子,redis数据类型很丰富的,合理使用可以用得很爽。还有,上面例子,可以设置每个缓存后给这条缓存设置一个有效期,好比一周,看你业务了。一般来说老的东西用户看得比较少,那么到期后没人浏览就不重建了,保证你redis一直是热数据。不至于一堆陈年数据,手机打字好累,有用请给赞


查看完整回答
反对 回复 2019-04-19
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

缓存的意义就是存储热门的数据,比如说在redis中存储数据库经常要用到的数据,这样就不必每次查询数据库了。

楼主遇到的问题是缓存里的数据如何跟数据库的数据保持一致的问题。
像上面说到的表如果有数据修改添加删除,flushDB(),是不可取的。

对缓存数据的操作实际上简化下来就是

当你的应用查询redis时,如果发现查不到,这个时候就要去查数据库,并把查出来的数据存到redis中。
当数据库的数据有改动时,上面说到的数据增删改对redis都有操作后再对数据库操作,其实也是不可取的,应用应先修改数据库,成功了之后再对redis更新。如果先对redis更新,但对数据库的更新失败了怎么办?redis不就存储有脏数据了吗。

另外,缓存中的数据是可以设置失效时间的(expire timeout),过了失效时间,就再查一次数据库,更新一下数据(即使数据根本没变过),在失效时间之前,至少减少了数据库的负载。

看楼主题目的意思,有一种想把redis当做数据库数据的备份一样,那样就不是用redis缓存的意义了(也许应该考虑数据库主从备份)。

至于你说的方案,看题目的描述,这并不是需要一个方案(我觉得高可用配置,考虑数据的一致性强弱等等方面才称之为方案)。
实际上是代码的逻辑,看代码怎么写。


查看完整回答
反对 回复 2019-04-19
?
繁花如伊

TA贡献2012条经验 获得超12个赞

spring 有redis插件,小项目用ehcache,spring插件比较方便。


查看完整回答
反对 回复 2019-04-19
?
守着一只汪

TA贡献1872条经验 获得超3个赞

实现过@Cacheable,使用在servicedao层的方法上,用来进行拦截,直接去redis取数据。


查看完整回答
反对 回复 2019-04-19
  • 6 回答
  • 0 关注
  • 621 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信