假设我有一组具有属性的对象:
Object Quantity Color Shape Kind ---------------------------------------- APPLE 12 RED ROUND FRUIT APPLE 3 GREEN ROUND FRUIT ORANGE 6 ORANGE ROUND FRUIT CARROT 0 RED CONICAL VEGETABLE RADISH 24 RED ROUND VEGETABLE
对象和除数量以外的所有属性都表示为字符串。数量是一个数字。
我必须根据用户的查询撰写一个随机的对象列表。
查询包含所有字符串属性的值(即除数量以外的所有属性)。
查询中的值可以是精确属性值,也可以是通配符(表示“此属性可以执行的任何值”),或者是否定 - “不是这个确切的属性值”。
查询结果是一个对象,由具有匹配属性的所有对象的加权随机选取。随机选择的权重是数量。
例如:
Query -> Probabilities -> Example random result ----------------------------------------------------------------------------- * ROUND FRUIT -> APPLE 12 / APPLE 3 = APPLE 15 -> APPLE !GREEN ROUND FRUIT -> APPLE 12 / ORANGE 6 -> ORANGE RED * * -> CARROT 0 / APPLE 12 / RADISH 24 = APPLE 12 / RADISH 24 -> RADISH RED CONICAL VEGETABLE -> CARROT 0 = (none) -> (none)
出于自我教育的目的,我想使用Redis构建此系统进行数据存储。
问题是 - 如何优雅地使用最少量的应用程序逻辑(与in-Redis操作相反)?权重和否定有点破坏图片。否则它将是nicely doable with sets。
欢迎任何提示。
答案 0 :(得分:0)
由于redis只能查询键而不能查询值,因此一个好的选择是将每个对象的各个值存储在单独的redis列表中。
例如,当您添加对象时......
APPLE 12 RED ROUND FRUIT
你会把它存储为
hmset obj:1名苹果数量12种颜色红色圆形果实
然后......
伤心的名字:apple obj:1,
sadd color:red obj:1
sadd shape:round obj:1
通过这种方式,您可以直接查询集合,并能够使用随机数来选择对象,例如,返回的集合中的项目总数。
希望有所帮助。如果你需要更多解释,请打我。