CN110427576B - 一种基于分享内容的区块链资源值的控制方法及系统 - Google Patents
一种基于分享内容的区块链资源值的控制方法及系统 Download PDFInfo
- Publication number
- CN110427576B CN110427576B CN201910527488.6A CN201910527488A CN110427576B CN 110427576 B CN110427576 B CN 110427576B CN 201910527488 A CN201910527488 A CN 201910527488A CN 110427576 B CN110427576 B CN 110427576B
- Authority
- CN
- China
- Prior art keywords
- value
- user
- resource
- content
- key value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9558—Details of hyperlinks; Management of linked annotations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
- G06F16/986—Document structures and storage, e.g. HTML extensions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种基于分享内容的区块链资源值的控制方法及系统。所述方法包括:获取分享内容的链接被点击的事件消息;根据分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值;判断所述用户ID的当日资源累计键值是否超过阈值;如果未超过阈值,则查询hash存储结构中所述分享内容对应的临时内容点击键值;基于所述临时内容点击键值,控制所述用户ID的当日资源积累键值中有效区块链资源值的增加。根据本发明的方案,能够有效提高资源值增加的准确性,读写性能高、执行时间减少而有效提升系统处理效率,从而整体提高系统控制处理性能。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种基于分享内容的区块链资源值的控制方法及系统
背景技术
在现代网络应用技术中提高新增用户量和拉升用户活跃度时,比如用户分享的文章,在同一时间同一篇文章可能会有很大点击量,只要当天分享的文章当天被点击了,就给分享者增加资源值,但同一篇文章重复点击,不能二次增加资源值,并且用户能增加资源值的文章,每天是不能超过一定的篇数,比如不能超过10次等。因而需要防止重复增加且增加的次数不能超过指定次数。
现有的方式是当用户分享文章后,在数据库中加一条数据,文章被点击时,在这条数据的计数字段上加1,然后再查询计数加1后的结果值,如果是大于1,则已经加过资源值,不需要继续加,否则就处理总次数的计数字段,增加的总次数字段加1,然后查询计数字段的值是否大于次数阈值。如果没大于阈值,则加、否则不加。其存在的缺陷如:1)计数字段加1后,再查询,是执行2次sql。为了保证不读取到脏数据,需要加事务,会降低性能,执行效率不高,而且是有2个计数字段,一篇文章被点击,会开启2次事务。2)由于存储加矿总次数的数据存储在一张表上,如果用户量很大,对表的频繁update和查询,肯定会降低更新的性能。3)一篇文章在分享时,插入一条分享数据,用来计数,还要用delete语句删除数据,插入删除操作频繁,delete还不能减少表空间。因而,利用数据库进行的用户资源分享的计数查询增删等控制处理,导致系统的控制处理性能差(低效率、低准确性)。
发明内容
提出了本说明书以便提供一种克服上述问题或者至少部分地解决上述问题的基于分享内容的区块链资源值的控制方法及系统。
第一方面,本发明提供一种基于分享内容的区块链资源值的控制方法,包括:获取分享内容的链接被点击的事件消息;根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值;判断所述用户ID的所述当日资源累计键值是否未超过阈值;如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值;基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的所述当日资源积累键值中有效区块链资源值的增加。
第二方面,本发明提供一种基于分享内容的区块链资源值的控制系统,包括:消息获取单元,用于获取分享内容的链接被点击的事件消息;用户累计键值查找单元,用于根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值;阈值判断单元,用于判断所述用户ID的所述当日资源累计键值是否未超过阈值;临时键值查询单元,用于如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值;资源值控制单元,用于基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的所述当日资源积累键值中有效区块链资源值的增加。
第三方面,本发明提供一种服务器,包括处理器和存储器:所述存储器用于存储执行上述方法的程序;所述处理器被配置为用于执行所述存储器中存储的程序。
第四方面,本发明提供一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求上述方法的步骤。
根据本发明的上述方案,利用缓存服务器redis中的hash存储结构中键值的设计及键值中对有效值增加的控制处理,能够有效提高资源值增加的准确性和处理效率、从而提升系统控制处理的性能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了根据本发明一实施例的基于分享内容的区块链资源值的控制方法的流程图。
图2示出了根据本发明一实施例的基于分享内容的区块链资源值的控制的结构示意图。
图3示出了根据本发明一实施例在加矿应用中的流程图。
具体实施方式
下面通过附图以及具体实施例对本说明书技术方案做详细的说明,应当理解本说明书实施例以及实施例中的具体特征是对本说明书技术方案的详细的说明,而不是对本说明书技术方案的限定,在不冲突的情况下,本说明书实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
实施例
请参考图1,本发明基于分享内容的区块链资源值的控制方法的一个实施例,包括:
步骤S110,获取分享内容的链接被点击的事件消息。
其中,用户可以通过查询其待分享的内容列表进而将内容分享出去。例如,文章列表,表中有10篇文章,用户可以查询并分享文章。
在一个实施方式中,可以先为用户的待分享的内容列表增加一个汇总信息的hash存储结构的键值key,如view_sum_count_date_userId,作为对应用户ID的当日资源累计键值Ksum。
所述hash存储结构利用缓存服务器Redis进行处理。
其中,Ksum即view_sum_count_date_userId中,其名称包括当日日期、用户ID,还包括两个字段Fileds。
进一步,第一字段为累计资源值sumcount,用来计数该用户ID当日的被点击次数,用于原子性操作,加锁用,其可以用来判断是否已经超过一个预设的阈值,阈值例如可以为用户当日累计区块链资源最高限值。第二字段为有效区块链资源值viewcount,可以用来记录有效增加的区块链资源值(如有效增加的次数),该值也不会超过一个最大值,例如与sumcount类似的当日累计区块链资源最高限值。对应用户ID的当日资源累计键值Ksum还设置有效期,比如设置过期时间为第二天0点也就是有效期是1天,过期后由系统回收,比如清空该键值(包括viewcount、sumcount、日期、ID等)。
在一个实施例中,在某个用户的任意一个内容被分享后发生点击事件时,也就是此时,发生了分享内容的链接被点击的事件,获取该事件消息,可以得到该事件消息中对应的分享内容、所述分享内容所属的用户ID以及所述分享内容分享和被点击的日期等。并可以响应所述分享内容的被点击的事件消息,触发生成一个hash存储结构的键值key,如
view_count_date_userId,作为对应所述分享内容的点击的键值Kcount,在当日临时记录分享内容的点击次数,将其命名为临时内容点击键值Kcount。
所述hash存储结构利用缓存服务器Redis进行处理。
其中,Kcount即view_count_date_userId中,其名称包括当日日期及用户ID,字段包括所述分享内容的内容ID,值为被点击次数。具体例如对文章等内容分享后点击这些内容而生成对应的Kcount,其userId是用户的id,Date是当天日期,字段Field是articleId,articleId是内容例如文章的唯一标识即文章id,值value是被点击的次数。所述临时内容点击键值Kcount还可以设置有效期,比如设置过期时间为第二天0点也就是有效期是1天,过期后由系统回收,比如清空该键值(点击值value的次数、日期、文章id、用户id等)。
在一个实施方式中,当用户通过网络将要分享的内容分享出去后,分享内容的链接被点击,作为对该点击的响应,获取点击该链接的事件消息,该事件消息中包含将内容分享出去的该分享内容的用户的ID、日期、分享内容的标识id(articleId)等,从而能以根据该分享的点击操作事件,进行区块链资源值的增加的控制。
步骤S120,根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值。
其中,根据该分享内容属于哪个用户,即用户ID,查找对应该用户ID的hash存储结构中的当日资源累计键值Ksum。
在一个实施方式中,如果查到对应所述用户ID的当日资源累计键值Ksum,则进入步骤S130进行判断;否则结束。
其中,通过获取的事件消息中的分享内容所属的用户ID和日期date,查找到对应的Ksum,可以查询所述用户ID的当日资源累计键值Ksum中的累计资源值sumcount和区块链资源值viewcount,获得当日的字段区块链资源值viewcount中的有效次数,也可以获得累计资源值sumcount中的点击次数(如当日属于该用户ID的分享的内容的链接被点击所累计的次数)。
步骤S130,判断所述用户ID的当日资源累计键值是否未超过阈值。
其中,用户ID对应的当日资源累计键值Ksum中区块链资源值viewcount中的值,即有效点击次数,与该预设的阈值做比较,阈值例如可以为用户当日累计区块链资源最高限值,判断该点击次数是否大于或等于该预定的阈值。
比如:当日的Ksum中的字段viewcount为8,阈值设为10,表示属于该用户ID的当天的分享内容被点击后能为该用户ID有效增值的次数不超过10次,由于8小于10,未超过该阈值,可以对当前点击继续操作,即判断如果未超过阈值则进入步骤S140;否则即是超过,结束处理。比如viewcount为10=阈值10表示当天该用户的已经加完了可以结束流程。
步骤S140,如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值。
其中,判断结果是viewcount小于阈值即未超过阈值,开始查询对应内容分享的分享事件所生成的临时内容点击键值Kcount。
在一个实施方式中,通过用户ID及其分享内容的日期进行查找,找到所述用户ID的临时内容点击键值。在临时内容点击键值中找到对应获取的所述事件消息中的所述分享内容的临时内容点击键值的值。用户ID对应的临时内容点击键值通过响应其所有分享内容中的任意一个被点击而产生,对应的字段计数器(articleId)计入了被点击的分享内容的标识id。如果当前获取的事件消息中被点击的分享内容并无对应的临时内容点击键值,则响应点击为其生成临时内容点击键值,如将该分享内容的标识id计入Kcount中,获得对应该内容的Kcount。
具体地,当用户分享了内容,内容链接被点击产生事件消息,获得的事件消息中至少包括该用户的ID、被点击的链接指示的分享内容的标识id、日期等。一旦某个用户的任意一个分享内容被点击就会为其生成一个Kcount并将点击的事件消息中的分享内容的标识id计入字段articleId以便后续对点击计数使用。比如,首次点击时,生成对应该分享内容的articleId的Kcount,生成时的值value为0,并在下一步进入点击次数的计数和控制处理。同样,对其他分享的内容点击也会这些分享内容产生对应的Kcount,并将这些内容的标识id计入字段articleId,而首次刚生成时值value为0。进而,若是已经被点击过的,则该内容articleId本身存在,找到该articleId,其值value为上一次点击后的实际值,比如首次点击后生成该articleId的Kcount的value为0,执行计数后(+1)为1,则这次是第二次点击,那么查到的该value为1,后续控制则会对该articleId的值value继续计数(例如加1变为2)。
在一个实施方式中,可以根据事件消息中的分享内容的用户id,查询到用户id的临时内容点击键值Kcount。分享内容被点击的时候会生成对应该分享内容的临时内容点击键值Kcount,其字段articleId有该分享内容的标识id及值value。找到该用户id对应的Kcount可以找到对应的被点击的分享内容标识id字段articleId,若没有该分享内容标识id对应的Kcount就为其生成一个。进一步还可以按照日期结合用户id一起查找当天的Kcount。
步骤S150,基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的当日资源积累键值中有效区块链资源值的增加。
在一个实施方式中,对查找到的对用户分享内容的链接的点击操作所对应的该分享内容的临时内容点击键值Kcount,对其中被点击的分享内容articleId对应的值value例如点击次数,进行源自性自增操作,例如Redis的incr操作(incr+1)。例如,获得的事件消息中,用户A的分享内容a被首次点击,找该A的Kcount,若没有字段articleId为a的Kcount就为该a生成一个对应的,并将a计入到Kcount的articleId中计数,其值value初始为0,由于此次点击则incr+1,value变为1。若有articleId为a的Kcount则直接为该a的值value做incr+1。
进一步,判断在所述原子性自增操作后的临时内容点击键值的值value是否等于1。
如果是等于1,则对所述用户ID的当日资源累计键值Ksum中的累计资源值sumcount增加一个单位,例如incr+1得到sumcount新的值。否则若不等于1就结束。
接着继续判断增加一个单位后的所述累计资源值sumcount是否超过预设的阈值,例如比较加1后的sumcount是否小于或等于预设的阈值,小于或等于则未超过,大于则超过。
如果超过了则结束。而如果未超过,则控制所述用户ID的当日资源积累键值Ksum中有效区块链资源值viewcount增加一个单位,并结束该控制流程。
比如:原来viewcount为8小于阈值10,因而在用户的一篇文章b分享第一次被点击时找到该文章对应的Kcount对其value加1后判断等于1,那么就可以对用户的Ksum中的sumcount加1,此时如果sumcount为8,加1则为9,小于等于阈值10,则对viewcount增加一个单位(例如为9)。
而同时该用户的另外一篇文章c分享也第一次被点击,由于viewcount当时为8小于阈值10因而同样对其value加1后判断等于1,那么就可以对用户的Ksum中的sumcount加1,此时sumcount为9了,则加1后sumcount为10,等于阈值10,没有超过,则又对viewcount增加一个单位(例如为10)。
又比如:原来viewcount为9小于阈值10,因而在用户分享的文章b第一次被点击时找到b的Kcount对其value加1,若判断等于1那么对用户Ksum的sumcount加1即9+1=10,则没有超过阈值、不大于阈值,就可以为viewcount加1为10;而同时有该用户分享的文章c被第一次点击,其同样在同一时间判断viewcount为9小于阈值10,则找到c的Kcount对其value加1且判断等于1,为sumcount加1,此时由于在b的时候已经sumcount加1为10了,此时加1则为11了,sumcount超过了阈值10,则不对viewcount做修改而结束流程。
其中,有效区块链资源值viewcount的累计值可以提供给分享内容的用户。
这样,利用缓存服务器redis中(hash存储结构)的键值设计及其incr的计数操作尤其是原子性计数操作,能保证数据准确,而且redis基于内存读写,读写性能高,减少了执行的时间。具体地,本发明通过Redis的原子性自增操作(如incr计数操作)、结合对应分享内容的点击和对应用户的所有分享内容生成的hash存储结构的键值Kcount和Ksum,利用incr做双重锁,根据点击对sumcount判断是否超过阈值、确定Kcount中incr+1等于1再为sumcount进行incr+1并判断是否超过阈值,最终确定是否要实际为viewcount加1,即再累积一个有效区块链资源值。这样,不会在同一天、对同一个分享内容比如同一篇文章重复累积资源值,并且也不会超过最高限值,保证了数据的准确性,再加上Redis是基于内存读写,读写性能高,减少了系统执行时间。
请参考图2,本发明基于分享内容的区块链资源值的控制系统的一个实施例,包括:
消息获取单元210,用于获取分享内容的链接被点击的事件消息。
其中,用户可以通过查询其待分享的内容列表进而将内容分享出去。例如,文章列表,表中有10篇文章,用户可以查询并分享文章。
在一个实施方式中,可以先为用户的待分享的内容列表增加一个汇总信息的hash存储结构的键值key,如view_sum_count_date_userId,作为对应用户ID的当日资源累计键值Ksum。
所述hash存储结构利用缓存服务器Redis进行处理。
其中,Ksum即view_sum_count_date_userId中,其名称包括当日日期、用户ID,还包括两个字段Fileds。
进一步,第一字段为累计资源值sumcount,用来计数该用户ID当日的被点击次数,用于原子性操作,加锁用,其可以用来判断是否已经超过一个预设的阈值,阈值例如可以为用户当日累计区块链资源最高限值。第二字段为有效区块链资源值viewcount,可以用来记录有效增加的区块链资源值(如有效增加的次数),该值也不会超过一个最大值,例如与sumcount类似的当日累计区块链资源最高限值。对应用户ID的当日资源累计键值Ksum还设置有效期,比如设置过期时间为第二天0点也就是有效期是1天,过期后由系统回收,比如清空该键值(包括viewcount、sumcount、日期、ID等)。
在一个实施例中,在某个用户的任意一个内容被分享后发生点击事件时,也就是此时,发生了分享内容的链接被点击的事件,获取该事件消息,可以得到该事件消息中对应的分享内容、所述分享内容所属的用户ID以及所述分享内容分享和被点击的日期等。并可以响应所述分享内容的被点击的事件消息,触发生成一个hash存储结构的键值key,如view_count_date_userId,作为对应所述分享内容的点击的键值Kcount,在当日临时记录分享内容的点击次数,将其命名为临时内容点击键值Kcount。
所述hash存储结构利用缓存服务器Redis进行处理。
其中,Kcount即view_count_date_userId中,其名称包括当日日期及用户ID,字段包括所述分享内容的内容ID,值为被点击次数。具体例如对文章等内容分享后点击这些内容而生成对应的Kcount,其userId是用户的id,Date是当天日期,字段Field是articleId,articleId是内容例如文章的唯一标识即文章id,值value是被点击的次数。所述临时内容点击键值Kcount还可以设置有效期,比如设置过期时间为第二天0点也就是有效期是1天,过期后由系统回收,比如清空该键值(点击值value的次数、日期、文章id、用户id等)。
在一个实施方式中,当用户通过网络将要分享的内容分享出去后,分享内容的链接被点击,作为对该点击的响应,获取点击该链接的事件消息,该事件消息中包含将内容分享出去的该分享内容的用户的ID、日期、分享内容的标识id(articleId)等,从而能以根据该分享的点击操作事件,进行区块链资源值的增加的控制。
用户累计键值查找单元220,用于根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值。
其中,根据该分享内容属于哪个用户,即用户ID,查找对应该用户ID的hash存储结构中的当日资源累计键值Ksum。
在一个实施方式中,如果查到对应所述用户ID的当日资源累计键值Ksum,则进入阈值判断单元230进行判断;否则结束。
其中,通过获取的事件消息中的分享内容所属的用户ID和日期date,查找到对应的Ksum,可以查询所述用户ID的当日资源累计键值Ksum中的累计资源值sumcount和区块链资源值viewcount,获得当日的字段区块链资源值viewcount中的有效次数,也可以获得累计资源值sumcount中的点击次数(如当日属于该用户ID的分享的内容的链接被点击所累计的次数)。
阈值判断单元230,用于判断所述用户ID的当日资源累计键值是否未超过阈值。
其中,用户ID对应的当日资源累计键值Ksum中区块链资源值viewcount中的值,即有效点击次数,与该预设的阈值做比较,阈值例如可以为用户当日累计区块链资源最高限值,判断该点击次数是否大于或等于该预定的阈值。
比如:当日的Ksum中的字段viewcount为8,阈值设为10,表示属于该用户ID的当天的分享内容被点击后能为该用户ID有效增值的次数不超过10次,由于8小于10,未超过该阈值,可以对当前点击继续操作,即判断如果未超过阈值则进入临时键值查询单元240;否则即是超过,结束处理。比如viewcount为10=阈值10表示当天该用户的已经加完了可以结束流程。
临时键值查询单元240,用于如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值。
其中,判断结果是viewcount小于阈值即未超过阈值,开始查询对应内容分享的分享事件所生成的临时内容点击键值Kcount。
在一个实施方式中,通过用户ID及其分享内容的日期进行查找,找到所述用户ID的临时内容点击键值。在临时内容点击键值中找到对应获取的所述事件消息中的所述分享内容的临时内容点击键值的值。用户ID对应的临时内容点击键值通过响应其所有分享内容中的任意一个被点击而产生,对应的字段计数器(articleId)计入了被点击的分享内容的标识id。如果当前获取的事件消息中被点击的分享内容并无对应的临时内容点击键值,则响应点击为其生成临时内容点击键值,如将该分享内容的标识id计入Kcount中,获得对应该内容的Kcount。
具体地,当用户分享了内容,内容链接被点击产生事件消息,获得的事件消息中至少包括该用户的ID、被点击的链接指示的分享内容的标识id、日期等。一旦某个用户的任意一个分享内容被点击就会为其生成一个Kcount并将点击的事件消息中的分享内容的标识id计入字段articleId以便后续对点击计数使用。比如,首次点击时,生成对应该分享内容的articleId的Kcount,生成时的值value为0,并在下一步进入点击次数的计数和控制处理。同样,对其他分享的内容点击也会这些分享内容产生对应的Kcount,并将这些内容的标识id计入字段articleId,而首次刚生成时值value为0。进而,若是已经被点击过的,则该内容articleId本身存在,找到该articleId,其值value为上一次点击后的实际值,比如首次点击后生成该articleId的Kcount的value为0,执行计数后(+1)为1,则这次是第二次点击,那么查到的该value为1,后续控制则会对该articleId的值value继续计数(例如加1变为2)。
在一个实施方式中,可以根据事件消息中的分享内容的用户id,查询到用户id的临时内容点击键值Kcount。分享内容被点击的时候会生成对应该分享内容的临时内容点击键值Kcount,其字段articleId有该分享内容的标识id及值value。找到该用户id对应的Kcount可以找到对应的被点击的分享内容标识id字段articleId,若没有该分享内容标识id对应的Kcount就为其生成一个。进一步还可以按照日期结合用户id一起查找当天的Kcount。
资源值控制单元250,用于基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的当日资源积累键值中有效区块链资源值的增加。
在一个实施方式中,对查找到的对用户分享内容的链接的点击操作所对应的该分享内容的临时内容点击键值Kcount,对其中被点击的分享内容articleId对应的值value例如点击次数,进行源自性自增操作,例如Redis的incr操作(incr+1)。例如,获得的事件消息中,用户A的分享内容a被首次点击,找该A的Kcount,若没有字段articleId为a的Kcount就为该a生成一个对应的,并将a计入到Kcount的articleId中计数,其值value初始为0,由于此次点击则incr+1,value变为1。若有articleId为a的Kcount则直接为该a的值value做incr+1。
进一步,判断在所述原子性自增操作后的临时内容点击键值的值value是否等于1。
如果是等于1,则对所述用户ID的当日资源累计键值Ksum中的累计资源值sumcount增加一个单位,例如incr+1得到sumcount新的值。否则若不等于1就结束。
接着继续判断增加一个单位后的所述累计资源值sumcount是否超过预设的阈值,例如比较加1后的sumcount是否小于或等于预设的阈值,小于或等于则未超过,大于则超过。
如果超过了则结束。而如果未超过,则控制所述用户ID的当日资源积累键值Ksum中有效区块链资源值viewcount增加一个单位,并结束该控制流程。
比如:原来viewcount为8小于阈值10,因而在用户的一篇文章b分享第一次被点击时找到该文章对应的Kcount对其value加1后判断等于1,那么就可以对用户的Ksum中的sumcount加1,此时如果sumcount为8,加1则为9,小于等于阈值10,则对viewcount增加一个单位(例如为9)。
而同时该用户的另外一篇文章c分享也第一次被点击,由于viewcount当时为8小于阈值10因而同样对其value加1后判断等于1,那么就可以对用户的Ksum中的sumcount加1,此时sumcount为9了,则加1后sumcount为10,等于阈值10,没有超过,则又对viewcount增加一个单位(例如为10)。
又比如:原来viewcount为9小于阈值10,因而在用户分享的文章b第一次被点击时找到b的Kcount对其value加1,若判断等于1那么对用户Ksum的sumcount加1即9+1=10,则没有超过阈值、不大于阈值,就可以为viewcount加1为10;而同时有该用户分享的文章c被第一次点击,其同样在同一时间判断viewcount为9小于阈值10,则找到c的Kcount对其value加1且判断等于1,为sumcount加1,此时由于在b的时候已经sumcount加1为10了,此时加1则为11了,sumcount超过了阈值10,则不对viewcount做修改而结束流程。
其中,有效区块链资源值viewcount的累计值可以提供给分享内容的用户。
这样,利用缓存服务器redis中(hash存储结构)的键值设计及其incr的计数操作尤其是原子性计数操作,能保证数据准确性,而且redis基于内存读写,读写性能高,减少了执行的时间。具体地,本发明通过Redis的原子性自增操作(如incr计数操作)、结合对应分享内容的点击和对应用户的所有分享内容生成的hash存储结构的键值Kcount和Ksum,利用incr做双重锁,根据点击对sumcount判断是否超过阈值、确定Kcount中incr+1等于1再为sumcount进行incr+1并判断是否超过阈值,最终确定是否要实际为viewcount加1,即再累积一个有效区块链资源值。这样,不会在同一天、对同一个分享内容比如同一篇文章重复累积资源值,并且也不会超过最高限值,保证了数据的准确性,再加上Redis是基于内存读写,读写性能高,减少了系统执行时间。
请参考图3,根据本发明一实施例在加矿应用中的流程图。
在区块链神奇矿APP中,提高新增用户量和拉升用户活跃度的一个运营活动,通过用户分享的文章。用户查询当日要分享的内容,比如要分享的文章列表。为要分享的文章列表,增加一个hash存储结构的对应该用户的用户ID的当日资源累计键值Ksum。具体如:
view_sum_count_date_userId。Ksum中的userId是用户ID、date是当日日期,还包括两个字段Field。一个字段sumcount(累计资源值)计数被分享的文章被点击的次数,用于原子性操作,加锁用,后面来判断是否已经加矿超过了设置的阈值,另一个viewcount(有效区块链资源值),用来记录有效加矿次数,该值不会超过最大加矿次数。该Ksum过期时间为第二天0点,当天才有效。
并且,对用户分享任一篇文章的分享点击事件做出响应,对该文章被分享后点击,就会生成一个该用户的hash存储结构的临时内容点击键值Kcount。具体如:view_count_date_userId。Kcount中的userId是用户ID、date是当天日期,字段Field包括articleId,是文章的唯一标识,即文章id,其值value是该篇文章被点击的次数。该Kcount的过期时间为第二天0点,即只是当天有效。
当天,用户A分享了12篇文章a1、a2、a3……a12。
这12篇文章中的一个分享链接被点击,比如a1被点击访问了,则获得该点击产生的事件消息中的用户id即A,然后去找userId为A的日期date为当日的Ksum,判断是否找到。
如果没找到结束加矿流程。如果找到了,就从该Ksum的viewcount中查询当天实际已经加矿的次数。
将该viewcount中当天加矿次数与一个预设的阈值做比较,判断是不是大于或等于(即是否超过了)该阈值。比如当天用户A的viewcount为10等于一天内真实有效的加矿最高限值10这个阈值,则结束流程;没超过,比如当天用户A的分享才加矿过8次,则按照当天被点击的了分享文章的该用户的id即用户A(也可以结合日期date),去找被点击了分享文章a1的所属用户A的Kcount。如果用户A的Kcount没有对应该a1的(如没有找到计数器字段articleId为a1的),即被点击的是a1是新的即第一次,则立刻为用户A生成一个对应该a1的、即a1计入了字段articleId的Kcount,且其初始值value为0。而若存在对应a1的Kcount,其值value为上一次点击后的结果值,例如当前点击事件是第二次那么查找到的用户A当天对应该a1的Kcount中value为1。
对Kcount中articleId为a1的值value执行incr+1操作。然后判断加1后的值value是否等于1。
如果之前a1没被点击过,则value为0,那么incr+1后等于1,则进入下一步;否则a1被点击过,则value为1、2、或其他数值,incr+1后就不为1,则结束流程。这样,可以避免对同一篇文章的重复点击而出现重复加矿的情形,即仅针对当天分享的一篇文章a1的一次点击而加一次矿,当天对其多次点击也仅加1次矿。
在value等于1的判断结果下,对该用户A对应的Ksum中的sumcount执行incr+1操作,得到结果值,比如8+1=9次。
然后判断加1后的sumcount的值(如9次),是否超过阈值(大于了10次)。如果小于或等于即未超过阈值,比如9小于10,那么表明可以进行有效加矿,从而对Ksum中的viewcount加1,该viewcount能被用户A看到。
如果超过即大于阈值,比如:之前viewcount是9次小于阈值10,第10次点击时,先判断该viewcount没有超过阈值10,然后找到a1的Kcount,对value做incr+1,并且当value加1后判断为等于1,该sumcount加1为10次不大于10则可以对viewcount加1完成加矿。而同时文章a2也被点击,判断viewcount是9次小于阈值10,就会去找到a2的Kcount,对其value做incr+1,并且其value加1后等于1,分享内容列表的用户A的sumcount再做incr+1在排队等候处理的过程中由于处理点击a1时的加矿流程之后已经为10了即10+1=11,那么sumcount加1后大于了阈值10,则不对viewcount加1、不做修改,即不再加矿(达到当日该用户加矿上限了),结束流程。
这样,当天,A分享的12篇文章实际上都可能同时被点击,而对应A的当天的汇总信息的Ksum中对viewcount和sumcount的阈值限定为10篇或者说只有10次,一旦超过了阈值10的限定,仍然会根据viewcount和sumcount的阈值限定来防止超量分享的文章带来加矿次数超过指定次数。并且,两次对用户的viewcount和sumcount与阈值比较做判断,同时还用value的incr和sumcount的incr判断做双重锁,有效防止了重复加矿且加矿次数不超过指定次数,保证数据准确;并且基于内存读写,读写性能高,减少执行的时间。并且用户加矿的文章,不能超过一定的篇数,比如不能超过10次。本项目主要在于如何防止重复加矿且加矿次数不能超过指定次数。
基于这样的理解,与本发明实现上述方法的一实施例相关的服务器,其包括处理器和存储器,存储器配置为存储了上述方法的一实施例的各步骤的处理程序,处理器则配置用来执行该存储器中存储的程序。
基于这样的理解,本发明实现上述方法的一实施例的方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
总的来说,本发明的实施例,克服了采用数据库进行的用户资源分享控制处理时数据的准确性差、读写性能低、执行时间长这类缺陷,提升了系统控制处理的准确性、提升了系统控制处理的效率。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本说明书范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (20)
1.一种基于分享内容的区块链资源值的控制方法,其特征在于,包括:
获取分享内容的链接被点击的事件消息;
根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值;所述当日资源累计键值,具体为其名称包括当日日期及用户ID,第一字段为累计资源值,第二字段为有效区块链资源值;累计资源值,用来计数该用户ID当日的被点击次数;有效区块链资源值,用来记录有效增加的区块链资源值;
判断所述用户ID的所述当日资源累计键值是否未超过阈值;
如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值;所述临时内容点击键值,具体为其名称包括当日日期及用户ID,字段包括所述分享内容的内容ID,值为被点击次数;
基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的所述当日资源积累键值中有效区块链资源值的增加。
2.如权利要求1所述的方法,其特征在于,所述根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值,包括:
通过所述用户ID及所述用户ID分享内容的日期,对hash存储结构中的键值进行查找,以查到对应所述用户ID的当日资源累计键值。
3.如权利要求1所述的方法,其特征在于,所述判断所述用户ID的所述当日资源累计键值是否未超过阈值,包括:
查询所述用户ID的所述当日资源累计键值中的有效区块链资源值,判断所述有效区块链资源值是否大于所述阈值,不大于所述阈值则表示未超过阈值。
4.如权利要求1所述的方法,其特征在于,所述如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值,包括:
通过所述用户ID及所述用户ID分享内容的日期,对hash存储结构中的键值进行查找,以找到所述用户ID的临时内容点击键值;
在找到的所述用户ID的临时内容点击键值中查询与获取的所述事件消息中的所述分享内容对应的临时内容点击键值的值。
5.如权利要求1所述的方法,其特征在于,所述基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的所述当日资源积累键值中有效区块链资源值的增加,包括:
对与获取的所述事件消息中的所述分享内容对应的所述临时内容点击键值的值进行原子性自增操作;
判断在所述原子性自增操作后的与所述分享内容对应的所述临时内容点击键值的值是否等于1;
如果是,则对所述用户ID的所述当日资源累计键值中的累计资源值增加一个单位;
判断增加后的所述累计资源值是否超过所述阈值;
如果未超过,则控制所述用户ID的所述当日资源积累键值中有效区块链资源值增加一个单位。
6.如权利要求5所述的方法,其特征在于,所述原子性自增操作,包括:对与所述分享内容对应的所述临时内容点击键值的值进行incr操作。
7.如权利要求1所述的方法,其特征在于,还包括:所述当日资源累计键值和所述临时内容点击键值均设置有效期,过期后由系统回收。
8.如权利要求1所述的方法,还包括:所述阈值为用户当日累计区块链资源最高限值。
9.如权利要求1所述的方法,其特征在于,还包括:所述hash存储结构利用缓存服务器Redis进行处理。
10.一种基于分享内容的区块链资源值的控制系统,其特征在于,包括:
消息获取单元,用于获取分享内容的链接被点击的事件消息;
用户累计键值查找单元,用于根据所述事件消息中分享内容所属的用户ID,查找hash存储结构中对应所述用户ID的当日资源累计键值;所述当日资源累计键值,具体为其名称包括当日日期及用户ID,第一字段为累计资源值,第二字段为有效区块链资源值;累计资源值,用来计数该用户ID当日的被点击次数;有效区块链资源值,用来记录有效增加的区块链资源值;
阈值判断单元,用于判断所述用户ID的所述当日资源累计键值是否未超过阈值;
临时键值查询单元,用于如果未超过阈值,则查询hash存储结构中与所述分享内容对应的临时内容点击键值;所述临时内容点击键值,具体为其名称包括当日日期及用户ID,字段包括所述分享内容的内容ID,值为被点击次数;
资源值控制单元,用于基于与所述分享内容对应的所述临时内容点击键值,控制所述用户ID的所述当日资源积累键值中有效区块链资源值的增加。
11.如权利要求10所述的系统,其特征在于,用户累计键值查找单元,具体包括:
通过所述用户ID及所述用户ID分享内容的日期,对hash存储结构中的键值进行查找,以查到对应所述用户ID的当日资源累计键值。
12.如权利要求10所述的系统,其特征在于,阈值判断单元,具体包括:
查询所述用户ID的所述当日资源累计键值中的有效区块链资源值,判断所述有效区块链资源值是否大于所述阈值,不大于所述阈值则表示未超过阈值。
13.如权利要求10所述的系统,其特征在于,临时键值查询单元,具体包括:
通过所述用户ID及所述用户ID分享内容的日期,对hash存储结构中的键值进行查找,以找到所述用户ID的临时内容点击键值;
在找到的所述用户ID的临时内容点击键值中查询与获取的所述事件消息中的所述分享内容对应的临时内容点击键值的值。
14.如权利要求10所述的系统,其特征在于,资源值控制单元,具体包括:
对与获取的所述事件消息中的所述分享内容的所述临时内容点击键值的值进行的原子性自增操作;
判断在所述原子性自增操作后的与所述分享内容对应的所述临时内容点击键值的值是否等于1;
如果是,则对所述用户ID的所述当日资源累计键值中的累计资源值增加一个单位;
判断增加后的所述累计资源值是否超过所述阈值;
如果未超过,则控制所述用户ID的所述当日资源积累键值中有效区块链资源值增加一个单位。
15.如权利要求14所述系统,其特征在于,所述原子性自增操作,包括:对与所述分享内容对应的所述临时内容点击键值的值进行incr操作。
16.如权利要求10所述的系统,其特征在于,还包括:所述当日资源累计键值和所述临时内容点击键值均设置有效期,过期后由系统回收。
17.如权利要求10所述的系统,其特征在于,还包括:所述阈值为用户当日累计区块链资源最高限值。
18.如权利要求10所述的系统,其特征在于,还包括:所述hash存储结构利用缓存服务器Redis进行处理。
19.一种服务器,包括处理器和存储器,其特征在于:
所述存储器用于存储执行权利要求1至9中任一项所述方法的程序;
所述处理器被配置为用于执行所述存储器中存储的程序。
20.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至9中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910527488.6A CN110427576B (zh) | 2019-06-18 | 2019-06-18 | 一种基于分享内容的区块链资源值的控制方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910527488.6A CN110427576B (zh) | 2019-06-18 | 2019-06-18 | 一种基于分享内容的区块链资源值的控制方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110427576A CN110427576A (zh) | 2019-11-08 |
CN110427576B true CN110427576B (zh) | 2022-04-12 |
Family
ID=68408682
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910527488.6A Active CN110427576B (zh) | 2019-06-18 | 2019-06-18 | 一种基于分享内容的区块链资源值的控制方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110427576B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104780185A (zh) * | 2014-01-10 | 2015-07-15 | 腾讯科技(深圳)有限公司 | 信息分享控制方法及装置 |
CN107508917A (zh) * | 2017-09-29 | 2017-12-22 | 济南浚达信息技术有限公司 | 一种基于bitmap的web网站用户活跃度统计方法及系统 |
CN109241474A (zh) * | 2017-07-11 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 页面信息的提供、展示、发布方法、服务器及客户端 |
CN109756528A (zh) * | 2017-11-01 | 2019-05-14 | 广州腾讯科技有限公司 | 频率控制方法及装置、设备、存储介质、服务器 |
CN109766365A (zh) * | 2018-12-13 | 2019-05-17 | 北京字节跳动网络技术有限公司 | 基于redis的运行事件控制方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110258040A1 (en) * | 2010-04-16 | 2011-10-20 | Xerox Corporation | System and method for providing feedback for targeted communications |
-
2019
- 2019-06-18 CN CN201910527488.6A patent/CN110427576B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104780185A (zh) * | 2014-01-10 | 2015-07-15 | 腾讯科技(深圳)有限公司 | 信息分享控制方法及装置 |
CN109241474A (zh) * | 2017-07-11 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 页面信息的提供、展示、发布方法、服务器及客户端 |
CN107508917A (zh) * | 2017-09-29 | 2017-12-22 | 济南浚达信息技术有限公司 | 一种基于bitmap的web网站用户活跃度统计方法及系统 |
CN109756528A (zh) * | 2017-11-01 | 2019-05-14 | 广州腾讯科技有限公司 | 频率控制方法及装置、设备、存储介质、服务器 |
CN109766365A (zh) * | 2018-12-13 | 2019-05-17 | 北京字节跳动网络技术有限公司 | 基于redis的运行事件控制方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110427576A (zh) | 2019-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108363806B (zh) | 数据库的多版本并发控制方法、装置、服务器及存储介质 | |
CN108932236B (zh) | 一种文件管理方法及装置 | |
US20190129894A1 (en) | Database Transaction Processing Method, Client, and Server | |
US20070118547A1 (en) | Efficient index versioning in multi-version databases | |
US9148329B1 (en) | Resource constraints for request processing | |
KR20160136475A (ko) | 개별 액세스 가능한 데이터 유닛의 스토리지 관리 | |
CN109815240B (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
CN107783974B (zh) | 数据处理系统及方法 | |
CN106161193B (zh) | 一种邮件处理方法、装置和系统 | |
CN115878027A (zh) | 一种存储对象的处理方法、装置、终端及存储介质 | |
CN110222046B (zh) | 列表数据的处理方法、装置、服务器和存储介质 | |
US8521789B2 (en) | Undrop objects and dependent objects in a database system | |
CN110427576B (zh) | 一种基于分享内容的区块链资源值的控制方法及系统 | |
CN111913913B (zh) | 访问请求的处理方法和装置 | |
WO2021037072A1 (zh) | 一种缓存信息的更新方法、装置、设备及介质 | |
CN111694853B (zh) | 基于世系的数据增量采集方法、装置、存储介质和电子设备 | |
US6571250B1 (en) | Method and system for processing queries in a data processing system using index | |
CN110928900A (zh) | 多表数据的查询方法、装置、终端以及计算机存储介质 | |
CN112463734A (zh) | 一种文件检索方法、系统及相关装置 | |
CN108241758B (zh) | 数据查询方法及相关设备 | |
CN103714121A (zh) | 一种索引记录的管理方法及装置 | |
CN115408342A (zh) | 文件处理方法、装置及电子设备 | |
US8024351B2 (en) | Query result iteration | |
CN110413617B (zh) | 一种根据数据量的大小动态调节哈希表组的方法 | |
CN111143365B (zh) | 一种数据分表方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |