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)
验证是否发版成功:
- 在任一机器上,远程连接redis服务,sudo权限下,执行命令:
redis-cli -h redis地址 -p 6379 -a "密码"
- 输入:
hgetall ifs_1_5_0:12_cli
- 接下来一一验证即可。
模糊删除包含某一字段的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