use - meetbill/redis-orm GitHub Wiki
使用手册
1 设置 redis
redisorm.setup_redis("default","127.0.0.1",6379)
print redisorm.SYSTEMS
2 创建表类
import redisorm
class User(redisorm.Model):pass
3 操作表中数据
3.1 创建数据
print "########################## create"
print User.objects.create(name='wangbin', age=26)
print User.objects.create(name='meetbill', age=26)
print User.objects.create(name='meetbill_expire', age=26,expire=3)
print User.objects.create(name='meetbill', age=25)
3.2 查找数据
print "########################## find"
print User.objects.find(age=26)
print User.objects.find(age=26).list()
print User.objects.find(age=26).list()[0].tags
3.3 查询数据
3.3.1 根据条件获取数据
print "########################## [get data]"
for info in User.objects.find(age=26).list():
print "attrs:[%s] expire:[%s]"%(info.attrs,User.ttl(info))
print "-------------------------- [get data] test expire"
time.sleep(4)
for info in User.objects.find(age=26).list():
print info.attrs
instance demo
{
'unique_tag': u 'name:wise-miplimit',
'_saved_tags': [u 'slot:0', u 'handshake:0', u 'slice:4', u 'name:wise-miplimit', u 'id:vQKjQMqGqj56z2Gc', u 'expire:None', u 'time:2020-02-07 19:30:01', u 'fail:0', u 'controller_check:1'],
'tags': [u 'handshake:0', u 'slice:4', u 'time:2020-02-07 19:30:01', u 'name:wise-miplimit', u 'controller_check:1', u 'slot:0', u 'fail:0'],
'expire': None,
'attrs': {
'slot': 0,
'handshake': 0,
'slice': 4,
'name': 'wise-miplimit',
'time': '2020-02-07 19:30:01',
'fail': 0,
'controller_check': 1
},
'id': 'vQKjQMqGqj56z2Gc'
}
3.3.2 获取所有数据
print "########################## all"
for info in User.objects.all().list():
print info.attrs
---------------------------------------output
{'age': 26, 'name': 'meetbill'}
{'age': 25, 'name': 'meetbill'}
{'age': 26, 'name': 'wangbin'}
3.4 删除数据
print "########################## delete_instance"
for info in User.objects.all().list():
print "[id]%s [tags]%s \n"%(info.id,info.tags)
print User.objects.delete_instance(info)
3.5 清理过期数据
User.objects.expire()
备注:进行 get 数据时,有 1% 的机会会触发清理过期数据操作,代码如下:
if random_true(0.01):
self.expire()
4 其他操作
4.1 设置 unique
设置表中的 unique 字段,如果发现已存在,则会删除已有的数据,使用最新的数据
使用方法
class User(redisorm.Model):
unique_field = "name"
pass
4.2 设置忽略字段
有些字段内容过多时,生成 tag 就会比较占用空间,这个时候可以进行将某些字段进行忽略
使用方法
class User(redisorm.Model):
unique_field = "name"
# 可以通过设置 exclude_attrs 来进行设置忽略字段
exclude_attrs = ["desc"]
pass
4.3 动态设置 key 前缀,即表名
4.3.1 场景
下发执行任务,比如更改某个 service 的所有配置文件,启动一个线程(此线程启动个子进程进行执行对应操作)
但需要查询任务的执行状态
4.3.2 分析
每次发起任务,可以动态生成一个表名(如使用 reqid)
work 进程
主线程生成任务时(还未放到队列),将所有实例都设置状态为 "PENDING"
执行线程取到任务时,将实例设置状态为 "RUNNING"
任务执行成功时,将实例设置状态为 "SUCCESS"
任务执行失败时,将实例设置状态为 "FAILURE"
查询任务时,通过此表名查询下面所有实例的执行状态
4.3.3 操作
def get_model(_model_name):
class ServiceModel(redisorm.Model):
# 主键
unique_field = "name"
# 设置不加索引字段, 设置了索引的话,会增加 Redis 存储 (异常输出信息/时间)
exclude_attrs = ["output", "time"]
# 设置表名
model_name = _model_name
return ServiceModel
service_model = get_model("test1234555")
# 实例执行状态
+-------------------------------------------------
| WAITING --> PENDING --> RUNNING --> SUCCESS
| |
| V
| FAILURE
+-------------------------------------------------
from datetime import datetime
service_model.objects.create(name='test_unit1',
status='SUCCESS',
time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
output="OK")
service_model.objects.create(name='test_unit2',
status='FAILURE',
time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
output="err info")