我正在做一个游戏服务器匹配,我有一个房间对象,它的范围有两个字段和其他额外的字段:
min_score = IntegerField (help = 'minimum score that user should have to join this room.')
max_score = IntegerField (help = 'maximum score that a user can have to join this room.')
我将缓存此对象,然后如果用户请求加入具有用户可以加入的范围的房间。 有没有办法我可以对 redis 缓存执行以下查询之类的操作?
Room.objects.filter(min_score__lte=user.score, max_score__gte=user.score)
我已经有一些应该做.get('key')
n
次的算法。 但我想知道是否有更好的解决方案。
您可以将其拆分为两个过滤器,例如:
Room.objects.filter(min_score__lte=user.score, max_score__gte=user.score)
因此,我们指定min_score
小于或等于user.score
,max_score
大于或等于user.score
。
这里我们使用__lte
[Django-doc] 和__gte
查找 [Django-doc]。你可以使用__lt
[Django-doc] 和__gt
[Django-doc] 如果你想让范围是独占的。
通过使用db_index
,您可能可以进一步提高查找:
from django.db import models
class Room(models.Model):
min_score = models.IntegerField(db_index=True)
max_score = models.IntegerField(db_index=True)