Пример #1
0
def tag_id_name_count_list_by_tag_admin(limit, offset):
    id_count = redis.zrevrange(REDIS_TAG_ADMIN, offset, offset+limit-1, True, int)
    zsite_list = Zsite.mc_get_list(map(itemgetter(0), id_count))
    r = []
    for i,count in zip(zsite_list, map(itemgetter(1),id_count)):
        r.append((i.id, i.name, count)) 

    return r, redis.zcard(REDIS_TAG_ADMIN)
Пример #2
0
def id_score_list_by_hot():
    result = redis.get(REDIS_REC_TAG_ID_SCORE)
    if result is None:
        result = redis.zrevrange(REDIS_REC_TAG, 0, REDIS_REC_USER_TAG_LIMIT-1, True)
        result = [map(int, i) for i in result]
        redis.setex(REDIS_REC_TAG_ID_SCORE, dumps_id_score(result), ONE_DAY)
    else:
        result = loads_id_score(result)
    return result
Пример #3
0
def id_by_tag_admin(tag_id,  offset):
    r = redis.zrevrange(
        REDIS_TAG_ADMIN_TAG_ID%tag_id,
        offset,offset
    )
    if r:
        id = r[0]
    else:
        id = 0

    return id
Пример #4
0
def id_score_list_by_user_id(user_id):
    key = REDIS_REC_USER_TAG_CAN_REC%user_id

    result = redis.get(key)

    if result is None:
        key_tag = REDIS_REC_USER_TAG%user_id
        if redis.exists(key_tag): #第一次初始化
            result = redis.zrevrange(key_tag, 0, REDIS_REC_USER_TAG_LIMIT-1, True)
            id_score_list_new(user_id, result)
        else:
            result = None
    else:
        result = loads_id_score(result)

    return result
Пример #5
0
    def id_list_by_str(self, query, limit=7):
        name_list = query.replace('`', "'").split()
        if not name_list:
            return []

        name_list.sort()

        name_key = '`'.join(name_list)
        id_list = self._get_cache(name_key)

        id_list = None #TODO REMOVE
        ZSET_CID = self.ZSET_CID

        if id_list is None:
            mkey = ZSET_CID%name_key

            if len(name_list)>1 and not redis.exists(mkey):
                p = redis.pipeline()
                p.zinterstore(mkey, map(ZSET_CID.__mod__, name_list), 'MAX')
                p.expire(mkey, EXPIRE)
                p.execute()


            id_list = redis.zrevrange(mkey, 0, 10)

            id_list = list(map(int, id_list))

            #id = self.id_by_name(query)
            #if id:
            #    id = int(id)
            #    if len(id_list) > 5:
            #        id_list.insert(4, id)
            #    else:
            #        id_list.append(id)
 
            #id_list = unique(id_list)
            
            self._set_cache(name_key, id_list)
            
            #print redis.zrevrange(mkey, 0, 10,True)
            #print id_list

        return id_list[:limit]
Пример #6
0
def rec_read_user_topic_score_incr(user_id, tag_id, score=1, tag_score=None):
    key = REDIS_REC_USER_TAG%user_id

    if score == inf:
        score_list = redis.zrevrange(key, 0, 0, True, int)
        if score_list:
            score = max(1, score_list[0][1])
        else:
            score = 1
        redis.zadd(key, tag_id, score)
    elif score == ninf:
        redis.zrem(key, tag_id)
    else:
        redis.zincrby(key, tag_id, score)

    if tag_score is None:
        tag_score = score
    redis.zincrby(REDIS_REC_TAG, tag_id, tag_score)

    # zrank <  REDIS_REC_USER_TAG_LIMIT的时候 
    # 并且不在读完的redis时候 , 进入候选的推荐主题
    if redis.zrevrank(key, tag_id) < REDIS_REC_USER_TAG_LIMIT :
        if not redis.sismember(REDIS_REC_TAG_USER_IS_EMPTY%tag_id, user_id):
            _rec_topic_new_by_user_id_topic_id_score(user_id, tag_id)
Пример #7
0
def po_id_list_by_tag_id_cid(tag_id, cid, limit, offset):
    id_list = redis.zrevrange(REDIS_TAG_CID % (tag_id, cid), offset,
                              limit + offset - 1)
    return id_list
Пример #8
0
def rec_read_log_by_user_id(user_id, limit, offset):
    key = REDIS_REC_USER_LOG%user_id
    return redis.zrevrange(key, offset, offset+limit-1)
Пример #9
0
def rec_read_by_user_id_tag_id(user_id, tag_id):
    po_id = 0
    from_new = False
    now = time_new_offset()
    ut_id = (user_id, tag_id)
    key_to_rec = REDIS_REC_USER_PO_TO_REC%ut_id
    key_readed = REDIS_REC_USER_TAG_READED%ut_id
    exists_key_to_rec = redis.exists(key_to_rec)
    cache_key_to_rec = False

    for i in xrange(7):
        #如果有可以推荐的缓存 , 读取缓存
        if exists_key_to_rec:
            po_id_list = redis.zrevrange(key_to_rec, 0, 0)
            if po_id_list:
                po_id = po_id_list[0]
                redis.zrem(key_to_rec, po_id)
            else:
                break
        else:
            key_tag_new = REDIS_REC_TAG_NEW%tag_id
            po_id = redis.srandmember(key_tag_new)
            #print 'srandmember' , po_id
            if po_id:
                from_new = True
                last = redis.zrevrange(key_readed, 0 , 0 , True)
                if last and (last[0][1] - now) < ONE_HOUR:
                    cache_key_to_rec = True
            else:
                cache_key_to_rec = True


        if cache_key_to_rec:
            #生成缓存 有效期1天 推荐文章
            p = redis.pipeline()
            #p = redis
            p.zunionstore(key_to_rec, {key_readed:-1, REDIS_REC_TAG_OLD%tag_id:1})
            p.zremrangebyscore(key_to_rec, '-inf', 0)
            p.expire(key_to_rec, ONE_DAY)
            p.execute()
            exists_key_to_rec = True #方便没有的时候跳出循环

        #print 'redis.zcard(key_readed)', redis.zcard(key_to_rec)

        if po_id:
            redis.zadd(key_readed, po_id, now)
            if redis.zrank(REDIS_REC_USER_LOG%user_id, po_id) is not None:
                po_id = 0

        if po_id:
            break

    if po_id:
        redis.hincrby(REDIS_REC_PO_TIMES, po_id, 1)

        if from_new:
            if redis.hget(REDIS_REC_PO_TIMES, po_id) >= REDIS_REC_PO_SHOW_TIMES:
                redis.srem(key_tag_new, po_id)
                _user_tag_old_rank(po_id, tag_id)
        #else:
                #redis.zincrby(key, po_id, 1)
        else:
            k = random()
            if k < 0.01:
                _user_tag_old_rank(po_id, tag_id)

    return po_id
Пример #10
0
def po_id_list_by_tag_id_cid(tag_id, cid, limit, offset):
    id_list = redis.zrevrange( REDIS_TAG_CID%(tag_id, cid), offset, limit+offset-1 )
    return id_list
Пример #11
0
def user_list_count_by_feed_import_user():
    id_count_list = redis.zrevrange(REDIS_FEED_IMPORT_USER, 0, -1, True, int)
    zsite_list = Zsite.mc_get_list(map(itemgetter(0), id_count_list))
    for i, count in zip(zsite_list, map(itemgetter(1), id_count_list)):
        i.feed_import_count = count 
    return zsite_list
Пример #12
0
def user_list_count_by_feed_import_user():
    id_count_list = redis.zrevrange(REDIS_FEED_IMPORT_USER, 0, -1, True, int)
    zsite_list = Zsite.mc_get_list(map(itemgetter(0), id_count_list))
    for i, count in zip(zsite_list, map(itemgetter(1), id_count_list)):
        i.feed_import_count = count
    return zsite_list