1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.utils import timezone
from talos.libs.datetime_utils import get_timestamp_or_none
from talos.cache.base import tractate_reply_cache
class ReplyTool(object):
def __init__(self, redis_c, user_id):
self.user_id = user_id
self.redis_c = redis_c
self.user_tractate = '{user_id}_{tractate_id}'
self._k = '{user_id}_tractate'.format(user_id=user_id)
self.doctor_article = '{user_id}_d_{tractate_id}'
self.doctor_k = '{user_id}_article'.format(user_id=user_id)
def update_tractate_time(self, tractate_id):
now = timezone.now()
score = get_timestamp_or_none(now)
self.redis_c.zadd(self._k, score, tractate_id)
def update_tractate_reply(self, tractate_id, reply_id):
temp_str = self.user_tractate.format(user_id=self.user_id, tractate_id=tractate_id)
self.redis_c.set(temp_str, reply_id)
def get_tractate_id(self, start_num=0, count=10):
result = self.redis_c.zrevrange(self._k, start_num, start_num + count)
if not result:
return []
result = [int(key) for key in result]
return result
def get_reply_ids(self, traceate_ids):
reply_ids, dic_reply = [], {}
for traceate_id in traceate_ids:
temp_key = self.user_tractate.format(user_id=self.user_id, tractate_id=traceate_id)
reply_ids.append(self.redis_c.get(temp_key))
dic_reply[traceate_id] = int(self.redis_c.get(temp_key))
return reply_ids, dic_reply
def reply_update_cache(user_id, tractate_id, reply_id):
reply_pool = ReplyTool(redis_c=tractate_reply_cache, user_id=user_id)
reply_pool.update_tractate_time(tractate_id=tractate_id)
reply_pool.update_tractate_reply(tractate_id=tractate_id, reply_id=reply_id)
def get_reply_ids(user_id, offset=0, count=10):
reply_pool = ReplyTool(redis_c=tractate_reply_cache, user_id=user_id)
tractate_ids = reply_pool.get_tractate_id(start_num=offset, count=count)
reply_ids, dic_reply = reply_pool.get_reply_ids(traceate_ids=tractate_ids)
return {
"tractate_ids": tractate_ids,
"reply_ids": reply_ids,
"dic_reply": dic_reply,
}