当前位置:Gxlcms > 数据库问题 > 一个数据库读写模型的设想

一个数据库读写模型的设想

时间:2021-07-01 10:21:17 帮助过:2人阅读

TABLE `standard_item` ( `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT sn, `id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 物品id, `name` varchar(50) NOT NULL DEFAULT 11 COMMENT 道具名, `type` tinyint(4) NOT NULL DEFAULT 0 COMMENT 类型, `sub_type` smallint(5) unsigned NOT NULL DEFAULT 0, `quality` tinyint(4) NOT NULL DEFAULT 0 COMMENT 品质, `stacked_num` smallint(6) NOT NULL DEFAULT 0 COMMENT 堆叠数量, `use_num` smallint(6) NOT NULL DEFAULT 0 COMMENT 使用数量, `is_use` tinyint(4) NOT NULL DEFAULT 0, `price` smallint(6) NOT NULL DEFAULT 0, `effect` varchar(50) DEFAULT NULL, `version` int(10) NOT NULL DEFAULT 0 COMMENT 球员碎片对应的版本, PRIMARY KEY (`sn`), KEY `IX_Type` (`type`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2478 DEFAULT CHARSET=utf8 COMMENT=标准物品表;

这个表在redis中存储一般会是以standard_item:id为key的哈希表,但是策划如果有需求根据type和quality查询所有道具的话,我就应该在初始化的阶段将standard_item多转存出几个standard_item:type:quality为主键的set来,以启动时候预处理的时间来换取运行阶段大量查询的时间,或者避免用户查询的时候击穿redis到mysql数据库。
    启动完成以后,读运算:
    用户请求服务器===》 服务器查询redis是否有用户缓存
                                                ===》如果有返回数据并进行对应运算
                                                ===》如果没有,击穿缓存层,访问mysql数据库读取数据===》返回数据并保存至redis,标记3天后过期
    启动完成后,写运算:
    服务器有写请求===》将写请求置入写的队列,解除数据的过期时间
    写数据的线程===》如果队列中有需要写的数据,就取出一条进行mysql写操作===》写入成功,标记redis数据3天后过期
                                                                                                                            ===》写入失败,重写至次数尝试超过限定次数,写日志
                         ===》如果队列中没有需要写的数据,休眠一小会 

明天按照这个思路试着做套数据库读写机制试下。 

一个数据库读写模型的设想

标签:

人气教程排行