def user_sub_obj_ids(cls, uid, page, pagesize, maxs): skey = UserSubShow.SUB_SHOW_IDS % {'uid': uid} gkey = UserSubGame.SUB_GAME_IDS % {'uid': uid} key = cls.USER_SUB_IDS % {'uid': uid} if not Redis.exists(skey): UserSubShow._load_sub_show_ids(uid) if not Redis.exists(gkey): UserSubGame._load_sub_game_ids(uid) # 始终合并以保证实时性 Redis.delete(key) all_keys = list() for k in [skey, gkey]: try: count = Redis.zcard(k) except exceptions.ResponseError: count = 0 count and all_keys.append(k) all_keys and Redis.zunionstore(key, all_keys) try: if maxs: ids = Redis.zrevrangebyscore(key, '(%.6f' % (maxs), '-inf', start=0, num=pagesize, withscores=True) else: start = (page - 1) * pagesize stop = start + pagesize - 1 ids = Redis.zrevrange(key, start, stop, withscores=True) except exceptions.ResponseError: ids = [] return list(ids)
def test_cached_zset(self): self._cached_zset() self.assertEqual(Redis.get(self.ZSET_KEY), 'empty') with self.assertRaises(exceptions.ResponseError): Redis.zadd(self.ZSET_KEY, 1, 'dog', 2, 'pig') Redis.delete(self.ZSET_KEY) self._cached_zset((1, 'dog', 2, 'pig')) self.assertListEqual(Redis.zrevrange(self.ZSET_KEY, 0, -1), ['pig', 'dog'])
def pop_game_ids(cls, uid, page=None, pagesize=None, maxs=None): key = cls.POP_GAME_IDS % ({'uid': uid}) if not Redis.exists(key): cls._load_pop_game_ids(uid) try: # 不进行分页 if page is None and pagesize is None and maxs is None: return Redis.zrevrange(key, 0, -1) if maxs: ids = Redis.zrevrangebyscore(key, '(%.6f' % (maxs), '-inf', start=0, num=pagesize) else: start = (page - 1) * pagesize stop = start + pagesize - 1 ids = Redis.zrevrange(key, start, stop) except exceptions.ResponseError: ids = [] return list(ids)
def get_top_sender_ids(cls, user_id, page=None, pagesize=None): key = TOP_SENDER_KEY % (user_id) if not Redis.exists(key): cls._load_top_sender_ids(user_id) start = (page - 1) * pagesize if page else 0 stop = (start + pagesize - 1) if pagesize else -1 try: uids = Redis.zrevrange(key, start, stop, withscores=True) except exceptions.ResponseError: uids = [] return list(uids)
def latest_uids(cls, aid, end_at, page=None, pagesize=None, maxs=None): key = cls.NEW_MASTERS % ({'aid': aid}) if not Redis.exists(key): cls._load_latest_uids(aid, end_at) try: if maxs: ids = Redis.zrevrangebyscore(key, '(%.6f' % (maxs), '-inf', start=0, num=pagesize) else: start = (page - 1) * pagesize stop = start + pagesize - 1 ids = Redis.zrevrange(key, start, stop) except exceptions.ResponseError: ids = [] return ids
def user_game_video_ids(cls, uid, gid, page=None, pagesize=None, maxs=None): key = cls.USER_GAME_VIDEO_IDS % ({'uid': uid, 'gid': gid}) if not Redis.exists(key): cls._load_user_game_video_ids(uid, gid) try: if maxs: ids = Redis.zrevrangebyscore(key, '(%.6f' % (maxs), '-inf', start=0, num=pagesize) else: start = (page - 1) * pagesize stop = start + pagesize - 1 ids = Redis.zrevrange(key, start, stop) except exceptions.ResponseError: ids = [] return list(ids)
def activity_comment_ids(cls, activity_id, page=None, pagesize=None, maxs=None): """获取活动相关评论的id """ key = cls.ACTIVITY_COMMENT_IDS % ({'aid': activity_id}) if not Redis.exists(key): cls._load_activity_comment_ids(activity_id) try: if maxs: ids = Redis.zrevrangebyscore(key, '(%.6f' % (maxs), '-inf', start=0, num=pagesize) else: start = (page - 1) * pagesize stop = start + pagesize - 1 ids = Redis.zrevrange(key, start, stop) except exceptions.ResponseError: # 列表为空时key对应的value是一个string ids = [] return list(ids)
def get_video_gifts(cls, video_id, maxs=None, pagesize=None): key = VIDEO_GIFT_KEY % (video_id) if not Redis.exists(key): cls._load_video_gifts(video_id) try: # 不进行分页 if pagesize is None and maxs is None: return Redis.zrevrange(key, 0, -1) gifts = Redis.zrevrangebyscore(key, '(%.6f' % (maxs), '-inf', start=0, num=pagesize) except exceptions.ResponseError: gifts = [] return [cjson.loads(gf) for gf in gifts]