首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis与数据库数据一致性

    可能谈到保持Redis与Mysql双库的数据一致性,可能很多人最先想到的方案就是读请求和写请求串行化,串到一个内存队列里去。但是这个方案有着一个致命的缺点:读请求和写请求串行化会导致系统的吞吐量大幅度降低,需要使用比正常情况下多几倍的机器去支撑线上的一个请求。Redis与Mysql双库的数据一致性问题为何会出现呢?其实我们可以考虑这么一个业务场景:我们需要更新部分数据,我们首先更新数据库数据,然后清除Redis缓存中的数据。但是数据库更新操作成功了,然而Redis清除缓存出现异常了,这样会导致出现这么一种情况:数据库中的数据已经更新为最新数据,但是Redis缓存中的数据依旧还是老数据,这时候就会出现Redis与Mysql双库的数据一致性问题。

    04

    基于Flowportal.Net写自己的应用时使用SqlDataReader遇到的一个问题

    在使用Flowportal.Net BPM的时候,因为一个特殊的步骤需要自动根据ERP中的订单状态自动审批,在设计流程的时候,把这个步骤设定为2个处理人的共享任务。其中一个是专门设定的一个系统账号。然后,我创建了一个Winform的程序,自动执行以下的代码:先从BPM数据库中读取出来未处理的当前流程、当前步骤的清单,接着循环判断而去使用单独创建的用户登录到BPM取得共享任务并审批通过,当然了如果判断ERP系统未处理的话,就把只把当前任务取下来作为系统账号的个人任务。 程序的逻辑很清楚了,但是忽略了一个问题,在从BPM数据库读取数据的时候,偷懒是用了SqlDataReader,造成在循环内的BPM更新一直超时。后改为Dataset之后,问题解决。原因是SqlDataReader是读取完毕所有的查询结果后才断开数据库连接,所以在循环内部就会出现已经存在一个数据库连接,造成新建连接冲突。改为Dataset之后,就可以把结果放入Dataset(服务器的内存里),然后关闭对数据库的连接了,这时候那个逐行的循环更新就不会有问题了。

    03
    领券