将模型文件及schema推至redis

redis

存储结构:hash、string

set VS hset VS hmset
set就是普通的key-value的方式存储,type为string。直观显示如下图:string格式的存储格式图例
Code

r = redis.Redis(host=host, port=6379, password='密码')
schema = {"a1":1,"b1":2,"c1":3,"d1":4}
date = datetime.datetime.now().strftime('%Y-%m-%d')
r.set(str(date)+str(2020),schema)

hset
描述:将哈希表key中的域field的值设为value。如果key不存在,一个新的哈希表被创建并进行HSET操作。如果域field已经存在于哈希表中,旧值将被覆盖。
参数:key field value。
图例:多次单个field-value对的hash格式的存储格式图例
Code:

r = redis.Redis(host='redis地址', password='redis密码', port=6379)
model = getTextFile(model_path)
schema = getTextFile(schema_path)
k = 'ifs_1_5_0:'
if (test):
	k = k + 'test:'
	k = k + app + '_' + model_type
	r.hset(k, 'model', model)
	r.hset(k, 'schema', schema)
	r.hset(k, 'checksum', getMD5(model + schema))
	r.hset(k, 'calibration', calibration)

hmset
描述:同时将多个field - value(域-值)对设置到哈希表key中。此命令会覆盖哈希表中已存在的域。如果key不存在,一个空哈希表被创建并执行HMSET操作。
参数:key field value [field value …]
图例:批量多个field-value对的hash格式的存储格式图例
Code:

r = redis.Redis(host=host, port=port, password='密码')
schema = {"a1":1,"b1":2,"c1":3,"d1":4}
date = datetime.datetime.now().strftime('%Y-%m-%d')
r.hmset(str(date)+str(2020),schema)

获取hash类型的值,hget、hgetall

hget:获取存储在哈希表中指定filed的value
格式:HGET key field
hgetall:获取在哈希表中指定 key 的所有field和value
格式:HGETALL key

print(r.hget('2020-07-082020','a1'))
print(r.hgetall('ifs_1_5_0:12_cli'))
print(r.hgetall('2020-07-082020'))
# 上述分别返回:
# b'1'
# {'model':模型文件,'schema',schema的string值,'checksum':0,'calibration',它的string值}
# {b'a1': b'1', b'b1': b'2', b'c1': b'3', b'd1': b'4'}

将模型文件及schema推至redis发版:

# -*- coding: utf-8 -*-
import pandas as pd
import os
from datetime import datetime
import redis
import hashlib
import sys

def getTextFile(path):
    data = ''
    with open(path) as f:
        data = f.read()
    f.closed
    return data
def getMD5(s):
    hl = hashlib.md5()
    hl.update(s.encode(encoding='utf-8'))
    return hl.hexdigest()

def submitModel(app, model_type, model_path, schema_path, calibration, test):
    r = redis.Redis(host='redis地址', password='redis密码', port=6379)
    model = getTextFile(model_path)
    schema = getTextFile(schema_path)
    k = 'ifs_1_5_0:'
    if (test):
        k = k + 'test:'
    k = k + app + '_' + model_type
    r.hset(k, 'model', model)
    r.hset(k, 'schema', schema)
    r.hset(k, 'checksum', getMD5(model + schema))
    r.hset(k, 'calibration', calibration)

date = datetime.now().strftime("%Y-%m-%d")
print(date)

submitModel('12', 'cli', '/data/marq/fengff/12/click_fm/{}/model/clkoutput.txt1'.format(date),
                '/data/marq/fengff/12/click_fm/{}/model/click_schema.json'.format(date), '0', False)

验证是否发版成功:

  1. 在任一机器上,远程连接redis服务,sudo权限下,执行命令:
redis-cli -h redis地址 -p 6379 -a "密码"
  1. 输入:
hgetall ifs_1_5_0:12_cli
  1. 接下来一一验证即可。

模糊删除包含某一字段的key

keys "ifs_1_5_5:uuid_*"    表示模糊查找
模糊删除包含"ifs_1_5_5:uuid_*"字段的Key值
redis-cli -h host -p 6379 -a 密码 KEYS "ifs_1_5_5:uuid_*" | xargs redis-cli -h 10.66.24.95 -p 6379 -a "dmd3#fjmh2sJ999gmnjka678i" DEL
导出redis中的特定 key值中的结果 并输出到文件(导出该redis中,key为response_test的value值,并保存为schema.json)
redis-cli -h host -p 101 -a 密码 --scan --pattern "response_test" >> schema.json
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值