页游手游服务器(五)sql缓存层
sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存:
cache
tablename--player
statement--select * from player where vip>1
key1
key2
...
lastkey=查询结果
statement2--select * from player where name='acdf'
key1=查询结果
当下次有同样的查询来时,不用执行sql语句,直接把查询结果返回即可,如果在逻辑缓存没有发现,就直接从数据库中读取结果,再缓存起来,但是麻烦的部分在于如果执行了类似:
update player set vip=2 where name = 'abc'
这个时候要怎么上面查询结果可能是错的,因为abc之前是1,现在是2,他应该出现在上面查询结果中,这就设计到sql的查询结果剪枝
剪枝的思路是如果不能排除sql是否会影响缓存结果,就认为会影响,处理办法很简单,就是把缓存的结果扔掉。解析sql语句比较麻烦,所以实现的时候是同时指定在缓存中查询key,和真正执行的sql语句
如下:
sql:cache('player', 'name','abc'):run('select * from player where name =?', 'abc'),
虽然写起来感觉有点冗余,但是实现比较简单,命中效果也不错。
对于一个表如果有多个查询方式,会导致相同内容有多份缓存,这样会占用对于内存,不过除了这块也没有太多的内存占用,所以还好,一般缓存的内存占用,推荐在300M左右,就可以达到很好的命中了。
缓存的难点在于剪枝,其余部分包括,缓存的内容过大了怎么办,最近最后使用方式丢弃多余部分,缓存命中统计,缓存验证,等等。因为缓存这部分是不能出错的,一旦出错,上篇处理机制就完全作废了。
在通用缓存之外,不要或者谨慎使用内存对象
这部分只有实现思路,没有具体实现,等哪天有空了,再实现吧
页游手游服务器(五)sql缓存层的更多相关文章
- 页游手游服务器(二)c支持mysql
上一篇说的是liua的net拓展,这一篇说lua的sql拓展,准确说是mysql拓展,这里推荐下postgre,比mysql好用,支持数组,各种好,不过腾讯平台不支持,所以你的公司要和腾讯合作,掂量下 ...
- 页游手游服务器(一)c实现拓展lua网络
把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结.整个实现的主体是lua脚本,lua实现主要缺少的两大块:1网络部分2数据库部分这两部分必须通过c/c++做扩展先来做net,主要是服务器 ...
- 页游手游服务器(三)lua网络层
在(一)中,介绍了c对lua层的拓展,这边主要写lua层的网络部分,目标是实现RPC调用,实现主要是三部分: 1通信协议(消息的序列化和反序列化) rpc调用主要信息包括方法名,方法参数,设计的通信协 ...
- Unity3D手游开发实践
<腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...
- (转)Unity3D手游开发实践
作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). (转)& ...
- SLG手游Java服务器的设计与开发——架构分析
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- SLG手游Java服务器的设计与开发——数据管理
文章版权归腾讯GAD所有,禁止匿名转载:禁止商业使用:禁止个人使用. 一.前言 上文介绍了我们的SLG手游的服务器架构设计以及网络通信部分,本文介绍数据管理部分,在数据存储方面,我选择了Mysql.M ...
- distri.lua重写开源手游服务器框架Survive
Survive之前采用的是C+lua的设计方式,其中网关服务器全部由C编写,其余服务全部是C框架运行lua回调函数的方式编写游戏逻辑. 鉴于一般的手游对服务器端的压力不会太大,便将Survive用di ...
- 手游包压缩技术引领手游行业实现app页游化
近些年,掌上游戏时代已经成为全民风尚,但身为游戏开发商考虑过手游安装包大小与用户转化率之间的关系吗? 随着手机游戏市场发展愈发壮大,行业发展愈加成熟,手游厂商愈来愈多,手游产业也进入了优胜劣汰的环节, ...
随机推荐
- Elasticsearch教程(三),IK分词器安装 (极速版)
如果只想快速安装IK,本教程管用.下面看经过. 简介: 下面讲有我已经打包并且编辑过的zip包,你可以在下面下载即可. 当前讲解的IK分词器 包的 version 为1.8. 一.下载zip包. 下面 ...
- Linux——使用国内镜像通过pip安装python的一些包
学习flask,安装virtualenv环境,这些带都ok,但是一安装包总是出错无法安装, http://e.pypi.python.org/这个就是官网了,清华大学提供的 建议非清华大学校内的使用这 ...
- 如何在Django1.6结合Python3.3版本中使用MySql
用起了Python3.4跟Django1.6,数据库依然是互联网企业常见的MySql. 悲催的是在Python2.7时代连接MySql的MySQLdb还不支持Python3.4,还好,苦苦追问G哥终于 ...
- Odoo 后端数据库postgreSQL事务级别
Table of Contents 事务的特性 并行事务的问题 事务隔离级别 Odoo事务隔离级别 odoo事务控制 事务的特性 事务4个特性,简写未ACID 原子性(Atomicit ...
- Java种八种常用排序算法
1 直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...
- int byte转换
//命令码0x8001转为int为32769,发送时反序 ] { 0x01, 0x80 }; ); //int to byte[] ; byte[] b = BitConverter.GetBytes ...
- MapReduce小文件处理之CombineFileInputFormat实现
在MapReduce使用过程中.一般会遇到输入文件特别小(几百KB.几十MB).而Hadoop默认会为每一个文件向yarn申请一个container启动map,container的启动关闭是很耗时的. ...
- An error occurred while searching for implementations of method
1:在我安装完scala的插件后,在打开方法的实现类(open implementactions)的时候,抛出这个异常,后来发现这个异常是因为我的scala的插件跟我eclipse版本不兼容导致的. ...
- 事件驱动模型实例详解(Java篇)
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类 ...
- java 原生定时执行程序(ScheduledExecutorService)
package ThreadPoolTest; import java.util.Date; import java.util.concurrent.*; public class Main { pu ...