前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高质量编码-使用redis存储查询实时数据

高质量编码-使用redis存储查询实时数据

原创
作者头像
MiaoGIS
修改2019-05-24 09:51:03
1.6K0
修改2019-05-24 09:51:03
举报
文章被收录于专栏:Python in AI-IOT

Redis是现在大多数互联网公司都要使用的技术,作为非关系型内存数据库,它在各种复杂并发实时场景中都广泛使用。

今天我们使用redis中的sorted_set来实现实时数据的存储和查询。

sorted_set是排序集合,ZADD后元素位置是根据ZADD时指定的score排序得来的,而不像list那样可以指定元素在最左端LPUSH还是最右端RPUSH。通常情况下,每一条数据的创建时间是不同的,我们可以将数据创建时间的时间戳当做score将数据存储在sorted_set中,这样sorted_set中的数据就是按照时间排序好的,然后使用ZRANGE key start stop [withscores]来获取某一切片范围内的数据,或者ZRANGEBYSCORE key min max[withscores] 来获取某一时间范围内的数据。

对应我们上文介绍的实时营收数据,可以取得某一数量的最新数据或者最近多少分钟的最新数据,代码如下,

代码语言:python
代码运行次数:0
复制

class getRecentPayHandler(cross_originAllowed_Handler):
    def get(self):
        number=self.get_argument('number',None)
        minute=self.get_argument('minute',None)
        if number:
            pays=r.zrange('payZ',-int(number),-1)
            self.write({'result':pays})
            return
        elif minute:
            now=datetime.now()
            endTimestamp=int(to_datetime(now).timestamp()-3600*8)*1000
            startTimestamp=int(endTimestamp-int(minute)*60*1000)
            print startTimestamp
            print endTimestamp
            pays=r.zrangebyscore('payZ',startTimestamp,endTimestamp)
            self.write({'result':pays})
            return

        self.write({'result':[]})


另外,为了模拟缴费事件,代码如下:

代码语言:python
代码运行次数:0
复制
# -*- coding:utf-8 -*-
import redis
import json
import time
import random
from datetime import datetime
import itertools
import pandas as pd
regions=[0,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,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163,164,165]
f=open('wechatTest.json')
wechats=json.load(f)
f.close()
wechatRegions=zip(wechats,regions)
map(lambda x:x[0].update({'region':x[1]}),wechatRegions)
r=redis.Redis()

for i in itertools.cycle(wechats):
    now=datetime.now()
    timestamp=1000*(int(pd.to_datetime(now).timestamp())-3600*8)
    i.update({'createTime':now.strftime('%Y-%m-%d %H:%M:%S')})
    fee=random.sample(range(100,1000,10),1)
    i.update({'fee':fee[0]})
    i=json.dumps(i)
    print i
    print timestamp
    r.zadd('payZ',{i:timestamp})
    time.sleep(10)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档