douban-orz icon indicating copy to clipboard operation
douban-orz copied to clipboard

关于count_by的问题

Open tmacjx opened this issue 4 years ago • 0 comments

你好,感谢豆瓣开源,学到很多,这里有个疑问,想请教下。 关于count_by和gets_by的缓存设计有点疑问 他们的都是根据 查询条件,然后生成了缓存的key

ck = config.to_string(conditions)

如果是count_by 缓存存的应该是mysql执行count(1)查询后的总数,比如123 如果是gets_by 缓存存的应该是mysql查询结构对应的主键的id列表,比如[1, 2, 3]

但是在代码里面cache_mgr.py里面CachedOrmManager的count_by和gets_by代码实际没有看到区分。 如果两种的缓存key是一样的话,会存在不一致的问题

    def test_count_by(self):
        for i in range(10):
            Dummy.create(subject_id=10, ep_num=i, content='hheheheh')

        self.assertEqual(Dummy.count_by(subject_id=10), 10)
        m = Dummy.gets_by(subject_id=10)[0]
        m.subject_id = 2
        m.save()
        self.assertEqual(Dummy.count_by(subject_id=10), 9)

比如这块测试代码是否会有问题

tmacjx avatar Jul 20 '20 07:07 tmacjx