redis orm 工具 rom easy_install rom 支持pypy,非常好用---技巧
redis orm 工具 rom easy_install rom 支持pypy,非常好用---技巧,有些类型不知道,可以用r.type(key)知道类型
可以跟踪redis进行命令查看
1.打开rediserver
2.监控
C:\Users\Administrator\Desktop\redis-2.8.12.win64>redis-cli.exe -h 127.0.0.1 -p
9999 -n 1
127.0.0.1:9999[1]> monitor
3. 和django的结合
>>> from django.core.cache import cache
>>> r = cache.raw_client
>>> from rom import util
>>> util.CONNECTION = r
>>> ur = util.get_connection()
>>> ur.keys()
>>> class My(rom.Model):
... rid = rom.Integer(required=True, unique=True)
... bag = rom.Json()
...
>>> my = My(rid=1, bag={})
>>> my.save()
3
>>> my.bag = {'a':1}
>>> my.save()
1
>>> My.get(1)
>>>
4.应用代码
#coding=utf-8
#https://github.com/josiahcarlson/rom/issues/23 一对多
import time,uuid
from rom import util
util.set_connection_settings(host='127.0.0.1', port=9999, db=1)
# All models to be handled by rom must derived from rom.Model
import rom
class MyModel(rom.Model):
@classmethod
def getFieldRe(cls, key, v=''):
"""
@des:自定义的获取结构的方法,可以省很多性能,因为我只需要主键
"""
r = util.get_connection()
classname = cls.__name__
field = cls.__dict__[key]
fname = field.__class__.__name__
result = None
endx,typex = "",""
if fname=="String" and field._unique==True:
endx,typex = "uidx","hash"
realkey = "%s:%s:%s"%(classname, key, endx)
result = r.hgetall(realkey)
elif fname=="String" and field._index==True:
endx,typex = 'idx',"set"
realkey = "%s:%s:%s:%s"%(classname, key, v, endx)
result = list(r.smembers(realkey))
elif fname=="Integer" and field._unique==True:
endx,typex = 'uidx',"hash"
realkey = "%s:%s:%s"%(classname, key, endx)
result = r.hgetall(realkey)
elif fname=="Integer" and field._index==True:
endx,typex = 'idx',"zset"
realkey = "%s:%s:%s"%(classname, key, endx)
result = list(r.zrange(realkey,0,-1))
elif fname=='PrimaryKey' and field._index==True:
endx,typex = 'idx',"zset"
realkey = "%s:%s:%s"%(classname, key, "idx")
result = list(r.zrange(realkey,0,-1))
else:
result = None
return result
@classmethod
def getAll(cls):
"""
@des:获取所有对象
"""
ids = cls.getFieldRe('id')
#ids = cls.getFieldRe('sessionno').values()
objs = cls.get(ids)
return objs
class Player(MyModel):
"""
@des:保存基础信息
"""
id = rom.PrimaryKey(index=True) #如果不加这句,系统会自己建一命为ID的主键,Index为True,才能获取所有
rid = rom.Integer(required=True, unique=True,index=True) #角色ID
sessionno = rom.String(required=True,unique=True) #所属网关ID,keygen=rom.FULL_TEXT,也可以根据一个唯一的字段获取所有的id
pwq = rom.String(index=True,keygen=rom.FULL_TEXT) #是否在泡温泉,可以根据这个值进行分组
created_at = rom.Float(default=time.time)
class Bag(MyModel):
rid = rom.Integer(required=True, unique=True) #角色ID
bag = rom.Json() #背包信息
class Equipment(MyModel):
rid = rom.Integer(required=True, unique=True) #角色ID
equipment = rom.Json() #装备信息
class Rcount(MyModel):#次数记录
rid = rom.Integer(required=True, unique=True) #角色ID
rcount = rom.Json() #次数记录
def createPlayer(i):
user = Player(sessionno=uuid.uuid4().hex,rid=i)
user.pwq = str(i%2)
user.save()
bag = Bag(rid=i,bag={})
bag.save()
equipment = Equipment(rid=i, equipment={})
equipment.save()
rcount = Rcount(rid=i, rcount={})
rcount.save()
def deletePlayer(player):
rcount = Rcount.get_by(rid=player.rid)
rcount.delete()
equipment = Equipment.get_by(rid=player.rid)
equipment.delete()
bag = Bag.get_by(rid=player.rid)
bag.delete()
player.delete()
if __name__=='__main__':
r = util.get_connection()
s = time.time()
# for i in range(1):
# createPlayer(i)
obj = Player.get(1)
print obj.pwq
obj.pwq = 0
obj.save()
e = time.time()
print e-s
#print user.pwq,user.rcount,user.bag.bag,user.equipment.equipment
#
#print User.get_by(pwq='1')