目前的freyja在维护缓存的时候是将表分为多个字段,每个字段负责维护与字段有关的缓存。
当字段update的时候去检测是否需要缓存失效。
经过我对这些数据的分析,引入分组概念能加快维护缓存的效率。
例如,大部分数据都是围绕用户产生的,User、Hero、Building 他们都是一对多关系,在这些表当中,大部分查询都是限于当前用户的数据查询。那么按userId分组将大大的减少检索的内容,从而提高维护缓存的效率。
当然其他的表也可以根据自己的情况分组/不分组。
另外也许还会采用single注解减少update操作,被single注解的表明当前字段不会出现在联表查询范围内。那么这个字段的update操作就不需要序列化到数据库,在系统关闭/缓存过期的时候update一次就足够了
[Freyja] [SQL] update t_hero set STATUS = ?,holdNumber = ? where ID = ? [args] 1 100 6769
[Freyja]
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS h WHERE h.user_id = ? AND STATUS >= 0#@7272
14:14:26,718 - 扫描cache: SELECT * FROM t_hero WHERE user_id = ? AND CITY_ID = 0 AND STATUS IN (0, 1)#@7273
14:14:26,718 - 移除 cache:from Hero where userId = ? and cityId = 0 and status in (0,1)#null#null#0#@7273
14:14:26,718 - 移除 cache:SELECT * FROM t_hero WHERE user_id = ? AND CITY_ID = 0 AND STATUS IN (0, 1)#@7273
14:14:26,718 - 扫描cache: SELECT * FROM t_hero WHERE user_id = ? AND CITY_ID = 0 AND STATUS IN (0, 1)#@7272
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS t WHERE t.user_id = 7273 AND STATUS >= 0#
14:14:26,718 - 移除 cache:select t.id as id,t.name as name,t.level as level,t.legendFlag as legendFlag,t.status as status,t.cityId as cityId,t.holdNumber as holdNumber,t.battleAtTime as battleAtTime from Hero t where t.userId = 7273 and status >=0#null#null#1#
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS t WHERE t.user_id = 7272 AND STATUS >= 0#
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS h WHERE h.user_id = ? AND STATUS >= 0#@7273
14:14:26,718 - 移除 cache:select h.id as id,h.name as name,h.status as status from Hero h where h.userId = ? and status >= 0#null#null#1#@7273
14:14:26,718 - 扫描cache: SELECT * FROM t_hero WHERE user_id = ? AND CITY_ID = 0 AND STATUS IN (0, 1)#@7272
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS h WHERE h.user_id = ? AND STATUS >= 0#@7272
14:14:26,718 - 扫描cache: SELECT * FROM t_hero WHERE user_id = ? AND CITY_ID = 0 AND STATUS IN (0, 1)#@7272
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS t WHERE t.user_id = 7273 AND STATUS >= 0#
14:14:26,718 - 移除 cache:select t.id as id,t.name as name,t.level as level,t.legendFlag as legendFlag,t.status as status,t.cityId as cityId,t.holdNumber as holdNumber,t.battleAtTime as battleAtTime from Hero t where t.userId = 7273 and status >=0#null#null#1#
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS t WHERE t.user_id = 7272 AND STATUS >= 0#
14:14:26,718 - 扫描cache: SELECT * FROM t_hero AS h WHERE h.user_id = ? AND STATUS >= 0#@7273
14:14:26,718 - 移除 cache:select h.id as id,h.name as name,h.status as status from Hero h where h.userId = ? and status >= 0#null#null#1#@7273
一个用户的hero更新,按照现在的需要扫描所有用户的hero,通过分组可以将扫描内容减少到之前的 1/n n为用户数。
7272 和7273 为2个用户的ID
分享到:
相关推荐
标题 "freyja 将引入另外一项功能大幅提高服务器性能" 提到的是一个名为 "freyja" 的工具或项目,它即将推出的新特性旨在显著提升服务器的运行效率。根据描述中的 "博文链接",我们可以推断这是一篇在 iteye.com ...
这篇博客将深入解析Freyja如何通过缓存机制来优化数据库操作,帮助开发者提高应用性能。 首先,我们要理解查询缓存的基本概念。查询缓存是数据库系统中一个组件,用于存储已经执行过的SQL查询及其结果。当相同的...
"Freyja v2版本发布"标志着这一开源工具的重大更新,其主要关注于源码管理和工具优化。...对于那些使用Freyja v1的用户来说,升级到v2无疑是值得的,因为它将带来更好的开发体验和更高的工作效率。
总结起来,"Freyja更新"涉及到的知识点包括开源文化、软件工具的更新与维护、源代码管理和版本控制、软件开发流程、以及如何适应和利用新版本的特性和改进。如果想深入了解,可以阅读提供的博文链接,获取更详尽的...
如果Freyja是围绕某一特定领域(如数据分析、自动化测试、项目管理等)构建的,那么还将涉及到相应的专业技能和知识。然而,由于信息有限,以上推测只能作为对Freyja项目可能涉及的IT知识点的一个基本框架。对于更...
3. 源码阅读与分析:通过阅读源码学习编程技巧、设计模式,例如MVC结构、依赖注入等,以及Freyja如何实现这些概念。 4. 测试实践:理解测试代码的设计,如使用哪种测试框架(如JUnit、Mockito等),以及如何编写单元...
"Freyja"是一个工具,它的主要功能已经完成。根据提供的信息,我们可以推断Freyja可能是一个开源项目,因为“源码”这个标签通常与开放源代码软件相关。此外,“工具”标签暗示它是一个用于特定任务或目的的应用程序...
"freyja2多数据源版本"是一个专注于数据库管理和集成的工具,主要针对开发人员和数据库管理员。这个项目可能提供了一种高效的方式,使得应用程序能够同时连接和操作多个不同的数据源,比如MySQL、Oracle、SQL Server...
您提供一个接受组件props和应用程序theme的函数,并返回样式图( (theme, props, helpers) => ({key1: style, key2: style}) ), useStyles将返回类名的地图(像{key1: className, key2: className} )。...
弗雷雅 用于Freyja字幕OCR提取器的Node.js +电子用户界面。 仍处于测试阶段。 所有功能都可用,但您在使用该应用程序时可能会遇到错误/崩溃。 请在 github 问题上报告您在log.log文件中遇到的任何错误。系统要求需要...
FREYJA freyja是一个轻量级的blog系统,使用vue-ssr,首屏在服务端渲染,之后的所有请求都由浏览器自行路由。 文章页只有文章内容在服务端渲染,评论是浏览器ajax加载的。 配合http2多路复用,首屏渲染完成时间可以...
matlab有些代码不运行Freyja仿真器 在MATLAB / Simulink(TM)和SimScape(TM)框架内构建的,适用于多直升机系统的高保真物理模拟器。 Freyja的库元素允许对连接多轴直升机和各种其他对象(例如电缆)的运动树进行...
这个“超级精简普通版”可能是对标准JRE的定制优化,去除了不必要的部分,以减少体积和提高运行效率,适合那些内存有限或者对系统资源要求严格的设备。 描述中提到的“博文链接:...
NULL 博文链接:https://freyja.iteye.com/blog/1167392
这款插件的名称可能源于一种幽默或网络文化元素,"Freislenbator"可能是创造者为插件赋予的虚构名称,与“Freyja”(北欧神话中的爱与美的女神)或者“free image”(免费图片)有关,但具体含义可能需要进一步研究...
魔幻现实Magic Reality Mod Pack (Minecraft) 的官方 Github 页面#Mods 模组作者版本苹果核Squeek502 1.1.0 水产养殖Shadowclaimer, Lclc98, Freyja, Rebelkeithy 1.2.5.8 护甲状态HUD 业务员1.28 背包埃达莫斯2.0.1...