一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于Protobuf协议构建Redis数据模型与访问方法与流程

2022-03-23 08:42:33 来源:中国专利 TAG:

基于protobuf协议构建redis数据模型与访问方法
技术领域
1.本发明涉及数据库开发技术领域,尤其涉及基于protobuf协议构建redis数据模型与访问方法。


背景技术:

2.redis是一个使用c编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。当前项目中,游戏服务器数据存储主要使用redis数据库。它将游戏数据全部存储于内存之中,没有对磁盘的读写,显著减低了游戏服务器访问数据的时间。简洁的服务设计同时也减低的运维工作难度。
3.但是目前现有的redis作为内存数据库,大量的内存占用,提高了服务器成本,且redis数据访问api比较简单导致访问的代码可读性比较差的问题,因此,我们提出基于protobuf协议构建redis数据模型与访问方法用于解决上述问题。


技术实现要素:

4.本发明的目的是为了解决目前现有的redis作为内存数据库,大量的内存占用,提高了服务器成本,且redis数据访问api比较简单导致访问的代码可读性比较差等问题,而提出的基于protobuf协议构建redis数据模型与访问方法。
5.为了实现上述目的,本发明采用了如下技术方案:
6.基于protobuf协议构建redis数据模型与访问方法,包括以下步骤:
7.s1:定义模型:使用protobuf message定义游戏内对象的数据模型;
8.s2:设置标签标识:通过protobuf注释形式为message设置自定义标签与主键标识;
9.s3:人工检验:由人工对设置的自定义标签和主键标识进行复查,判断是否定义准确;
10.s4:生成接口:基于message类型、自定义标签与主键标识,生成数据库访问的api接口;
11.s5:接口读取:从redis中使用hget读取主键值对应的写入数据,并通过数据对比判断是否完成读取;
12.优选的,所述s1中,使用protobuf message定义游戏内对象的数据模型,并将不同的对象定义为不同的message,其中message内字段表示对象的属性,装备对象对应的message命名为equipment,字段id,name代表装备的id与名字;
13.优选的,所述s2中,通过protobuf注释形式为message设置自定义标签与主键标识,其中标签包含该message在redis中存储类型(当前支持redis hash类型,后续可以扩展)和名称,message equipment的标签为“//$《rop redis|map|e》”,代表equipment对象在redis中命名为e,存储类型为哈希,主键标识用来区分相同哈希中保存的不同message实例,message equipment中给id字段增加主键标识“//$《rop unique》”,且所有的装备都存
储在同一个hash中,id值将作为区分不同装备的主键值;
14.优选的,所述s3中,由人工对设置的自定义标签和主键标识进行复查,判断是否定义准确,并将定义不准确的message进行重新定义;
15.优选的,所述s4中,基于message类型、自定义标签与主键标识,生成数据库访问的api接口,其中api接口中写入方法为已知message类型与构成message的全部数据(包含主键值等),生成对应的message实例,对实例进行protobuf格式编码生成字节流,字节流长度超过阈值时采用snappy算法对其进行压缩,否则返回之前字节流,在处理后的字节流头部添加元信息,并表示是否为压缩数据,同时将主键值与带有元信息的字节流作为参数使用hset写入redis,其中对实例进行protobuf格式编码时,程序自动检查编码后的字节流长度是否超过阈值,超过则使用snappy算法压缩;
16.优选的,所述s5中,从api接口中读取的方法为通过已知message类型与主键值,从redis中使用hget读取主键值对应的写入数据,并根据数据元信息,判断是否需要解压缩,需要解压时使用snappy算法解压,同时将处理后的数据使用protobuf解码方法生成message类型对应的实例,并使用api接口,通过网络读取redis字节流,基于redis通信协议进行数据的解码;解码后的数据,提取元信息,判断是否需要解压缩;基于元信息,通过protobuf协议进行相应数据解码,生成所需要的游戏内对象数据。
17.与现有技术相比,本发明的有益效果是:
18.1、通过使用protobuf协议定义数据库模型,提升开发人员在使用redis作为数据库时对数据模型全貌的理解。
19.2、在内部实现中增加对数据的编解码以及压缩过程,减少redis内存占用,减低服务器成本。
20.本发明的目的是通过使用protobuf协议定义数据库模型,提升开发人员在使用redis作为数据库时对数据模型全貌的理解,同时在内部实现中增加对数据的编解码以及压缩过程,减少redis内存占用,减低服务器成本。
附图说明
21.图1为本发明提出的基于protobuf协议构建redis数据模型与访问方法的流程图。
具体实施方式
22.下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
23.实施例一
24.参照图1,基于protobuf协议构建redis数据模型与访问方法,包括以下步骤:
25.s1:定义模型:使用protobuf message定义游戏内对象的数据模型,并将不同的对象定义为不同的message,其中message内字段表示对象的属性,装备对象对应的message命名为equipment,字段id,name代表装备的id与名字;
26.s2:设置标签标识:通过protobuf注释形式为message设置自定义标签与主键标识,其中标签包含该message在redis中存储类型(当前支持redis hash类型,后续可以扩展)和名称,message equipment的标签为“//$《rop redis|map|e》”,代表equipment对象在
redis中命名为e,存储类型为哈希,主键标识用来区分相同哈希中保存的不同message实例,message equipment中给id字段增加主键标识“//$《rop unique》”,且所有的装备都存储在同一个hash中,id值将作为区分不同装备的主键值;
27.s3:人工检验:由人工对设置的自定义标签和主键标识进行复查,判断是否定义准确,并将定义不准确的message进行重新定义;
28.s4:生成接口:基于message类型、自定义标签与主键标识,生成数据库访问的api接口,其中api接口中写入方法为已知message类型与构成message的全部数据(包含主键值等),生成对应的message实例,对实例进行protobuf格式编码生成字节流,字节流长度超过阈值时采用snappy算法对其进行压缩,否则返回之前字节流,在处理后的字节流头部添加元信息,并表示是否为压缩数据,同时将主键值与带有元信息的字节流作为参数使用hset写入redis,其中对实例进行protobuf格式编码时,程序自动检查编码后的字节流长度是否超过阈值,超过则使用snappy算法压缩;
29.s5:接口读取:从api接口中读取的方法为通过已知message类型与主键值,从redis中使用hget读取主键值对应的写入数据,并根据数据元信息,判断是否需要解压缩,需要解压时使用snappy算法解压,同时将处理后的数据使用protobuf解码方法生成message类型对应的实例,并使用api接口,通过网络读取redis字节流,基于redis通信协议进行数据的解码;解码后的数据,提取元信息,判断是否需要解压缩;基于元信息,通过protobuf协议进行相应数据解码,生成所需要的游戏内对象数据。
30.实施例二
31.参照图1,基于protobuf协议构建redis数据模型与访问方法,包括以下步骤:
32.s1:定义模型:使用protobuf message定义游戏内对象的数据模型,并将不同的对象定义为不同的message,其中message内字段表示对象的属性,装备对象对应的message命名为equipment,字段id,name代表装备的id与名字;
33.s2:设置标签标识:通过protobuf注释形式为message设置自定义标签与主键标识,其中标签包含该message在redis中存储类型(当前支持redis hash类型,后续可以扩展)和名称,message equipment的标签为“//$《rop redis|map|e》”,代表equipment对象在redis中命名为e,存储类型为哈希,主键标识用来区分相同哈希中保存的不同message实例,message equipment中给id字段增加主键标识“//$《rop unique》”,且所有的装备都存储在同一个hash中,id值将作为区分不同装备的主键值;
34.s3:生成接口:基于message类型、自定义标签与主键标识,生成数据库访问的api接口,其中api接口中写入方法为已知message类型与构成message的全部数据(包含主键值等),生成对应的message实例,对实例进行protobuf格式编码生成字节流,字节流长度超过阈值时采用snappy算法对其进行压缩,否则返回之前字节流,在处理后的字节流头部添加元信息,并表示是否为压缩数据,同时将主键值与带有元信息的字节流作为参数使用hset写入redis,其中对实例进行protobuf格式编码时,程序自动检查编码后的字节流长度是否超过阈值,超过则使用snappy算法压缩;
35.s4:接口读取:从api接口中读取的方法为通过已知message类型与主键值,从redis中使用hget读取主键值对应的写入数据,并根据数据元信息,判断是否需要解压缩,需要解压时使用snappy算法解压,同时将处理后的数据使用protobuf解码方法生成
message类型对应的实例,并使用api接口,通过网络读取redis字节流,基于redis通信协议进行数据的解码;解码后的数据,提取元信息,判断是否需要解压缩;基于元信息,通过protobuf协议进行相应数据解码,生成所需要的游戏内对象数据。
36.实施例三
37.参照图1,基于protobuf协议构建redis数据模型与访问方法,包括以下步骤:
38.s1:定义模型:使用protobuf message定义游戏内对象的数据模型,并将不同的对象定义为不同的message,其中message内字段表示对象的属性,装备对象对应的message命名为equipment,字段id,name代表装备的id与名字;
39.s2:设置标签标识:通过protobuf注释形式为message设置自定义标签与主键标识,其中标签包含该message在redis中存储类型(当前支持redis hash类型,后续可以扩展)和名称;
40.s3:人工检验:由人工对设置的自定义标签和主键标识进行复查,判断是否定义准确,并将定义不准确的message进行重新定义;
41.s4:生成接口:基于message类型、自定义标签与主键标识,生成数据库访问的api接口,其中api接口中写入方法为已知message类型与构成message的全部数据(包含主键值等),生成对应的message实例,对实例进行protobuf格式编码生成字节流,字节流长度超过阈值时采用snappy算法对其进行压缩,否则返回之前字节流,在处理后的字节流头部添加元信息,并表示是否为压缩数据,同时将主键值与带有元信息的字节流作为参数使用hset写入redis,其中对实例进行protobuf格式编码时,程序自动检查编码后的字节流长度是否超过阈值,超过则使用snappy算法压缩;
42.s5:接口读取:从api接口中读取的方法为通过已知message类型与主键值,从redis中使用hget读取主键值对应的写入数据,并根据数据元信息,判断是否需要解压缩,需要解压时使用snappy算法解压,同时将处理后的数据使用protobuf解码方法生成message类型对应的实例,并使用api接口,通过网络读取redis字节流,基于redis通信协议进行数据的解码;解码后的数据,提取元信息,判断是否需要解压缩;基于元信息,通过protobuf协议进行相应数据解码,生成所需要的游戏内对象数据。
43.实施例四
44.参照图1,基于protobuf协议构建redis数据模型与访问方法,包括以下步骤:
45.s1:定义模型:使用protobuf message定义游戏内对象的数据模型,并将不同的对象定义为不同的message,其中message内字段表示对象的属性,装备对象对应的message命名为equipment,字段id,name代表装备的id与名字;
46.s2:设置标签标识:通过protobuf注释形式为message设置自定义标签与主键标识,其中标签包含该message在redis中存储类型(当前支持redis hash类型,后续可以扩展)和名称,message equipment的标签为“//$《rop redis|map|e》”,代表equipment对象在redis中命名为e,存储类型为哈希,主键标识用来区分相同哈希中保存的不同message实例,message equipment中给id字段增加主键标识“//$《rop unique》”,且所有的装备都存储在同一个hash中,id值将作为区分不同装备的主键值;
47.s3:人工检验:由人工对设置的自定义标签和主键标识进行复查,判断是否定义准确,并将定义不准确的message进行重新定义;
48.s4:生成接口:基于message类型、自定义标签与主键标识,生成数据库访问的api接口,其中api接口中写入方法为已知message类型与构成message的全部数据(包含主键值等),生成对应的message实例,对实例进行protobuf格式编码生成字节流,字节流长度超过阈值时采用snappy算法对其进行压缩,否则返回之前字节流;
49.s5:接口读取:从api接口中读取的方法为通过已知message类型与主键值,从redis中使用hget读取主键值对应的写入数据,并根据数据元信息,判断是否需要解压缩,需要解压时使用snappy算法解压,同时将处理后的数据使用protobuf解码方法生成message类型对应的实例,并使用api接口,通过网络读取redis字节流,基于redis通信协议进行数据的解码;解码后的数据,提取元信息,判断是否需要解压缩;基于元信息,通过protobuf协议进行相应数据解码,生成所需要的游戏内对象数据。
50.实施例五
51.参照图1,基于protobuf协议构建redis数据模型与访问方法,包括以下步骤:
52.s1:定义模型:使用protobuf message定义游戏内对象的数据模型,并将不同的对象定义为不同的message,其中message内字段表示对象的属性,装备对象对应的message命名为equipment,字段id,name代表装备的id与名字;
53.s2:设置标签标识:通过protobuf注释形式为message设置自定义标签与主键标识,其中标签包含该message在redis中存储类型(当前支持redis hash类型,后续可以扩展)和名称,message equipment的标签为“//$《rop redis|map|e》”,代表equipment对象在redis中命名为e,存储类型为哈希,主键标识用来区分相同哈希中保存的不同message实例,message equipment中给id字段增加主键标识“//$《rop unique》”,且所有的装备都存储在同一个hash中,id值将作为区分不同装备的主键值;
54.s3:人工检验:由人工对设置的自定义标签和主键标识进行复查,判断是否定义准确,并将定义不准确的message进行重新定义;
55.s4:生成接口:基于message类型、自定义标签与主键标识,生成数据库访问的api接口,其中api接口中写入方法为已知message类型与构成message的全部数据(包含主键值等),生成对应的message实例,对实例进行protobuf格式编码生成字节流,字节流长度超过阈值时采用snappy算法对其进行压缩,否则返回之前字节流,在处理后的字节流头部添加元信息,并表示是否为压缩数据,同时将主键值与带有元信息的字节流作为参数使用hset写入redis,其中对实例进行protobuf格式编码时,程序自动检查编码后的字节流长度是否超过阈值,超过则使用snappy算法压缩;
56.s5:接口读取:从api接口中读取的方法为通过已知message类型与主键值,从redis中使用hget读取主键值对应的写入数据,并根据数据元信息,判断是否需要解压缩,需要解压时使用snappy算法解压,同时将处理后的数据使用protobuf解码方法生成message类型对应的实例。
57.将实施例一、实施例二、实施例三、实施例四和实施例五中基于protobuf协议构建redis数据模型与访问方法进行试验,得出结果如下:
[0058][0059][0060]
实施例一、实施例二、实施例三、实施例四和实施例五制得基于protobuf协议构建redis数据模型与访问方法对比现有方法服务器成本有了显著下降,且实施例一为最佳实施例。
[0061]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献