缓存及过期问题

.Net技术 码拜 7年前 (2016-02-22) 919次浏览
现在有两个系统,A,B
A系统负责维护基础数据
B系统有个列表需要读取B系统里的数据
现在B从A读数据的时候把数据存到了缓存,现在A系统及时加了条数据进去,B系统原因是缓存没过去,导致新加的数据没显示出来。
这种情况一般怎么样处理呢?
1,缓存必须要有 2,缓存依赖数据库的某张表方法可行不可行?会不会把数据库拖垮。
谢谢各位!
解决方案

10

改成分布式缓存,A和B都能连接,A中修改数据后同时更新缓存

10

早晚会走上redis之路,不如现在就开练

10

原因是是两个系统,所以你需要有“通知”,就像现在的高考,那也是多个独立系统,所以他得有个“通知”给你
收到通知后就可以,主动更新缓存。
至于怎么样通知可以用滴东西就太多了。
当然加个中间件,公用一个缓存也成。不过这样你的系统改造就大了

60

引用 LZ jmlovews 的回复:

现在B从A读数据的时候把数据存到了缓存,现在A系统及时加了条数据进去,B系统原因是缓存没过去,导致新加的数据没显示出来。
这种情况一般怎么样处理呢?

正如楼上所说,缓存的 CacheDependency 中最低级的就是 Duration,但是你现在需要更高级的缓存依赖技术。
会不会设计缓存系统,不是像有些人扯什么“把数据放到内存里”这么简单的东西,更不是单独弄一个服务器上安装什么内存数据库然后就叫做缓存(内存数据库机制都是伪缓存,你付出了网络通讯的性能代价来访问一个内存数据库的数据而已),重点就在于了解设计“缓存依赖项”的技术。记住,缓存就是本机的甚至是当前进程的高速机制,而不是弄一台单机安装一个内存数据库。
.net 的 CacheDependency机制,默认的方式除了 SqlDependency,还可以根据磁盘文件、磁盘目录的改变而自动响应,还可以根据其它缓存单元的改变而级联触发,还可以你自定义一个CacheDepenency(只要你从CacheDendency类继承即可)。按说,只有了解最后一种自定义缓存依赖项的人,才真正叫做了解了缓存技术。不过我们可以仅仅用倒数第二种来看看。
假设你有一个缓存单元

cache.Insert("13998号订单最后更新时间", item);

那么你就可以将其他一些缓存数据与之关联,例如

cache.Insert(key, data, new CacheDependency(null, new string[]{"13998号订单最后更新时间"}));

这样,当第一个缓存单元的数据改变的一刹那,第二个缓存单元(以及同样依赖“13998号订单”的其它几十个缓存单元)就自动清除了!你可以想象到,这种依赖是可以级联的。
那么现在就是你的A数据要广播消息的问题。不是说数据库只要一有改变就广播,数据库的改动只有万分之一、十万分之一的消息才需要广播。例如假设全部的订单改变都需要广播一下,那么就单独将这个信息广播一下。
最后回到前边关键的一个关键点,所谓“内存数据库”算是缓存吗?当你单独弄一个服务器然后安装一个内存数据库,你全部的数据都要写到这个内存数据库上,然后再每一此查询数据时先去通过网络查询一次这个内存数据库,假如查不到的话再去查询数据库系统,这算是缓存吗?这时候你根本没有缓存,许多人把这个叫做缓存,那是许多人(主要是使用 java 的 没有 .net cache技术的低级工具的人)在众口一词地在歪曲概念呢。
那根本不是缓存技术,就是普通的内存数据库,而已。

10

本人觉得你就不该从A读取数据
而是换成由A传送数据给B的缓存
这样才合理

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明缓存及过期问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)