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')