0

我在 python memcach 中存储了一些记录。对象结构如下图所示。我如何像查询数据库一样访问或获取记录。

class CartDetails(models.Model):
    id              = models.AutoField(primary_key=True)
    item_name       = models.CharField(max_length = 100)
    location        = models.CharField(max_length = 250)
    item_type       = models.ForeignKey(ItemType)
    comments        = models.TextField(max_length = 250,blank=True)
    item_code       = models.CharField(max_length = 100)
    main_cat_id     = models.ForeignKey(MainCategory)

我知道我可以像这样访问内存缓存

cache.get(<some key>)

我想要一些东西,就像我们在 Django 中查询一样

<some model>.objects.filter(<conditions>)

我的意思是有什么方法可以让我指定一些条件并从内存缓存中获取记录。cache.get() #condition like item_name = "some item", item_type = 1 etc

什么是最佳实践。任何帮助将不胜感激。

谢谢

4

3 回答 3

2

你错过了缓存的重点。这是一个简单的键值存储,你不能对它进行查询:这就是数据库的用途。Django 中的 LINQ 等价物是您已经在使用的 ORM。但是在 .NET 中就像在 Django 中一样,您不能在缓存层上运行任意查询。

于 2015-03-17T07:43:02.123 回答
0

我开始知道 pydblite 可用于将数据保存在内存中,这将帮助我像这样查询内存中的数据库

for rec in (db("age") > 30) & (db("country") == "France"):
    print rec["name"] 

至于python缓存和redis,我只能使用一个键来访问内存。

http://pydblite.readthedocs.org/en/latest/index.html

谢谢

于 2015-03-18T03:39:59.277 回答
0
  1. 对于缓存,如 memcache 或 redis,速度是第一也是最重要的事情,所以像你说的那样涉及简单的键值对:

    cache.get(<some key>)

    或者

    redis.hget(<some id>)

  2. 我认为您<some model>.objects.filter(<conditions>)在深层后端的业务模型查询中更频繁和有用的缓存查询的意图,而不是缓存层。像关系数据库如 mysql 或 postgresql。

综上所述,对于缓存来说,更关心的是让它更简单、更快。而对于业务工作,比如订单查询,可以使用复杂查询,比如filter表达式。

于 2015-03-17T05:39:50.093 回答