# 优化model cache

This commit is contained in:
xianfuxing 2020-09-11 11:36:27 +08:00
parent a05b4b9cb1
commit d9621d61c3
1 changed files with 30 additions and 19 deletions

View File

@ -26,23 +26,34 @@ def get_vol(device_id, cur_vol):
def get_latest(device_id): def get_latest(device_id):
latest_key = 'device_latest_{}'.format(device_id) latest_key = 'device_latest_{}'.format(device_id)
latest = cache.get(latest_key) latest = cache.get(latest_key)
if not latest: if latest:
latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0]
cache.set(latest_key, latest, 60 * 10)
return latest return latest
latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0]
s = DeviceCountBaseSerializer(latest)
data = s.data
cache.set(latest_key, data, 60 * 10)
return data
def get_device(device_id): def get_device(device_id):
device_key = 'device_lon_{}'.format(device_id) device_key = 'device_lon_{}'.format(device_id)
device = cache.get(device_key) device = cache.get(device_key)
if not device: if device:
qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time')
if qs.count() > 0:
device = qs.first()
cache.set(device_key, device, 60 * 10)
else:
return None
return device return device
qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time')
if qs.count() == 0:
return None
device = qs.first()
s = DeviceCountBaseSerializer(device)
data = s.data
cache.set(device_key, data, 60 * 10)
return data
class DeviceCountBaseSerializer(serializers.ModelSerializer):
class Meta:
model = DeviceCount
fields = '__all__'
class DeviceCountSerializer(serializers.ModelSerializer): class DeviceCountSerializer(serializers.ModelSerializer):
@ -160,19 +171,19 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
except IndexError: except IndexError:
self.latest = None self.latest = None
if self.latest: if self.latest:
return self.latest.count return self.latest['count']
return 0 return 0
def get_signal(self, obj): def get_signal(self, obj):
if self.latest: if self.latest:
return self.latest.csq return self.latest['csq']
return 0 return 0
def get_energy(self, obj): def get_energy(self, obj):
if self.latest: if self.latest:
if float(self.latest.vol) <= 100: if float(self.latest['vol']) <= 100:
return '{}{}'.format(round(float(self.latest.vol), 1), '%') return '{}{}'.format(round(float(self.latest['vol']), 1), '%')
return get_vol(obj.device_id, self.latest.vol) return get_vol(obj.device_id, self.latest['vol'])
return 0 return 0
def get_coordinate(self, obj): def get_coordinate(self, obj):
@ -184,12 +195,12 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
# query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time') # query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
device = get_device(obj.device_id) device = get_device(obj.device_id)
if device: if device:
return [device.longitude, device.latitude] return [device['longitude'], device['latitude']]
return None return None
def get_time(self, obj): def get_time(self, obj):
if self.latest: if self.latest:
return self.latest.data_time.strftime('%Y-%m-%d %H:%M:%S') return self.latest['data_time'].replace('T', ' ').replace('Z', '')
return None return None