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


 


分享到: 微信 更多