数据查询_缓存层的构建

缓存层的构建

可以将一些经常需要在数据库中提取的数据缓存到redis中
数据缓存层的原理

数据缓存层实际上就是对一个巨大的存在于内存中的DataSet进行管理,其原理如下:

(1)数据缓存层维护一个大DataSet,这个DataSet以static存在于应用程序中,这是缓存数据集。

(2)客户端发起请求,数据查询请求发送到数据缓存层。

(3)数据缓存层查询缓存起来的数据查询条件,查找该查询条件是否被使用过。

(4)如果该查询条件以前使用过,则不从数据库查询数据,只从缓存数据集中查询。

(5)如果该查询条件以前没有用过 ,则调用数据访问层从数据库中查询数据,并将查询数据合并到缓存数据集中,同时缓存该查询条件。

(6)更新数据时,将要更新的数据更新到数据库中,同时更新缓存数据集中的数据。

(7)在查询或更新数据时,都在缓存数据集相应数据表的扩展属性中记录当前访问时间。

(8)每隔一段时间对缓存数据集进行清理,当其中某条数据行超过一定时间(可以在配置文件中进行配置)没有访问,则将该表释放。

定义

**相关代码分析: **

def get_user_by_identity():
    """根据jwt token获取用户身份信息"""
    from application.apps.users.models import User
    identity = get_jwt_identity()
    user_id = identity["id"]
    # 缓存层, 先到redis中查找是否有登录用户的信息,找不到再去mysql,然后mysql返回的数据先保存到redis
    user_info = redis.get("user_%s" % user_id)
    if user_info:
        data = json.loads(user_info)
        return User.init_user_info(data)
    else:
        user = User.query.filter(User.id==user_id).first()
        # 缓存到redis中
        data = json.dumps(user.get_user_data())
        redis.set("user_%s" % user_id, data)
        return user

本例中首先根据flask_jwt验证后,获取到用户的身份信息(用户id值), 然后首先根据用户的id去redis中查找用户相关的信息,如果找到了就返回(这样就不需要再去mysql中进行查找了), 如果找不到,就去mysql中获取用户的信息,然后保存到redis中,下次的时候就会在redis中获取了

posted @ 2021-03-15 22:21  死里学  阅读(100)  评论(0)    收藏  举报