CN116150207A - 一种数据缓存方法、装置、电子设备及存储介质 - Google Patents
一种数据缓存方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116150207A CN116150207A CN202310105166.9A CN202310105166A CN116150207A CN 116150207 A CN116150207 A CN 116150207A CN 202310105166 A CN202310105166 A CN 202310105166A CN 116150207 A CN116150207 A CN 116150207A
- Authority
- CN
- China
- Prior art keywords
- user
- identification information
- information
- fieldkey
- service
- 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.)
- Pending
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据缓存方法、装置、电子设备及存储介质,本申请考虑到用户是否报名活动具有二值性,因此接收到用户的活动报名请求信息,采用位图Bitmap形式缓存报名请求信息。具体是根据用户的标识信息确定活动位图中用户的位置索引信息,并对位置索引信息指示的字符进行更新。而对于活动中用户的各个业务产生的交易信息,采用哈希映射Hashmap形式进行缓存。具体是将各个业务产生的交易信息对应写入各个业务的字符串FieldKey对应的数值Value字段。本申请通过采用不同形式缓存用户不同数据的方案,能够达到减少数据缓存空间占用量的效果,在不增加数据缓存成本的前提下,解决数据缓存空间占用较大的问题。
Description
技术领域
本申请涉及数据存储技术领域,尤其涉及一种数据缓存方法、装置、电子设备及存储介质。
背景技术
公司会通过举办营销活动的方式提高用户粘性,用户参与营销活动一般会产生报名数据和交易数据。在金融交易系统中,每日需要处理数亿级记录,累计计算亿级用户近几个月甚至近几年的累计交易笔数、金额、奖励次数等。同时为了满足高性能查询诉求,这些报名数据和交易数据通常需要存放在缓存中。
由于每个任务都有到期时间或者周期,键值对KV(key-value)结构以自带过期时间及自动清理策略成为首选。但是使用KV结构进行数据缓存,经常出现缓存空间占用较大,超过预警值的问题。
现有技术为了解决数据缓存空间占用较大的问题,一般通过扩容,增加缓存集群中机器数量,提高集群总体容量,但是这种方案需要配置更多的缓存机器资源,使得数据缓存成本较高。
发明内容
本申请实施例提供了一种数据缓存方法、装置、电子设备及存储介质,用以解决现有技术数据缓存成本较高的问题。
本申请提供了一种数据缓存方法,所述方法包括:
接收用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,获取所述活动报名请求信息中所述用户的标识信息,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新;
获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
进一步地,所述根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息包括:
根据所述用户的标识信息和预设的分散因子,确定活动位图中所述用户的位置索引信息。
进一步地,所述根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息之前,所述方法还包括:
若所述用户的标识信息为非数字类的标识信息,通过进制转换将所述非数字类的标识信息转换为数字类的标识信息。
进一步地,所述方法还包括:
若所述数字类的标识信息大于设定的阈值,将所述数字类的标识信息拆分为至少两个子标识信息;分别确定各个子标识信息各自对应的位图中的位置索引信息;各个位图中的位置索引信息的组合作为所述活动位图中所述用户的位置索引信息。
进一步地,所述确定所述用户对应于所述活动的各个业务的字符串FieldKey之后,所述方法还包括:
根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey。
进一步地,所述根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey包括:
根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为初始字符,将各个初始字符进行取余运算,将取余运算的结果与N/2的差值作为映射后的各个短字符FieldKey;其中,N为小于等于512的正整数。
进一步地,所述方法还包括:
在所述映射关系表中配置FieldKey过期时间,检索出所述映射关系表中过期时间早于当前日期且未清理的FieldKey,定时扫描缓存中所有的HashMap,将与过期时间早于当前日期且未清理的FieldKey一致的FieldKey及对应的数值删除。
另一方面,本申请提供了一种数据缓存装置,所述装置包括:
第一缓存模块,用于接收用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,获取所述活动报名请求信息中所述用户的标识信息,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新;
第二缓存模块,用于获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
进一步地,所述第一缓存模块,具体用于根据所述用户的标识信息和预设的分散因子,确定活动位图中所述用户的位置索引信息。
进一步地,所述第一缓存模块,还用于若所述用户的标识信息为非数字类的标识信息,通过进制转换将所述非数字类的标识信息转换为数字类的标识信息。
进一步地,所述第一缓存模块,还用于若所述数字类的标识信息大于设定的阈值,将所述数字类的标识信息拆分为至少两个子标识信息;分别确定各个子标识信息各自对应的位图中的位置索引信息;各个位图中的位置索引信息的组合作为所述活动位图中所述用户的位置索引信息。
进一步地,所述第二缓存模块,还用于根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey。
进一步地,所述第二缓存模块,具体用于根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为初始字符,将各个初始字符进行取余运算,将取余运算的结果与N/2的差值作为映射后的各个短字符FieldKey;其中,N为小于等于512的正整数。
进一步地,所述装置还包括:
数据清理模块,用于在所述映射关系表中配置FieldKey过期时间,检索出所述映射关系表中过期时间早于当前日期且未清理的FieldKey,定时扫描缓存中所有的HashMap,将与过期时间早于当前日期且未清理的FieldKey一致的FieldKey及对应的数值删除。
再一方面,本申请提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一项所述的方法步骤。
再一方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法步骤。
本申请提供了一种数据缓存方法、装置、电子设备及存储介质,所述方法包括:接收并根据用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新;获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
上述的技术方案具有如下优点或有益效果:
本申请考虑到用户是否报名活动具有二值性,因此接收到用户的活动报名请求信息,采用位图Bitmap形式缓存报名请求信息。具体是根据用户的标识信息确定活动位图中用户的位置索引信息,并对位置索引信息指示的字符进行更新。而对于活动中用户的各个业务产生的交易信息,采用哈希映射Hashmap形式进行缓存。具体是将各个业务产生的交易信息对应写入各个业务的字符串FieldKey对应的数值Value字段。本申请通过采用不同形式缓存用户不同数据的方案,能够达到减少数据缓存空间占用量的效果,在不增加数据缓存成本的前提下,解决数据缓存空间占用较大的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请提供的数据缓存过程示意图;
图2为本申请提供的第一种Bitmap形式数据存储示意图;
图3为本申请提供的第二种Bitmap形式数据存储示意图;
图4为本申请提供的第三种Bitmap形式数据存储示意图;
图5为本申请提供的第四种Bitmap形式数据存储示意图;
图6为本申请提供的第一种Hashmap形式数据存储示意图;
图7为本申请提供的映射关系表示意图;
图8为本申请提供的第二种Hashmap形式数据存储示意图;
图9为本申请提供的第三种Hashmap形式数据存储示意图;
图10为本申请提供的过期KEY清理流程示意图;
图11为本申请提供的报名参加活动的时序图;
图12为本申请提供的用户参与活动任务的时序图;
图13为本申请提供的数据缓存装置结构示意图;
图14为本申请提供的电子设备结构示意图。
具体实施方式
为使本申请的目的和实施方式更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施方式进行清楚、完整地描述,显然,描述的示例性实施例仅是本申请一部分实施例,而不是全部的实施例。
需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。
本申请中说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别类似或同类的对象或实体,而不必然意味着限定特定的顺序或先后次序,除非另外注明。应该理解这样使用的用语在适当情况下可以互换。
术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的所有组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。
术语“模块”是指任何已知或后来开发的硬件、软件、固件、人工智能、模糊逻辑或硬件或/和软件代码的组合,能够执行与该元件相关的功能。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
为了方便解释,已经结合具体的实施方式进行了上述说明。但是,上述示例性的讨论不是意图穷尽或者将实施方式限定到上述公开的具体形式。根据上述的教导,可以得到多种修改和变形。上述实施方式的选择和描述是为了更好的解释原理以及实际的应用,从而使得本领域技术人员更好的使用所述实施方式以及适于具体使用考虑的各种不同的变形的实施方式。
图1为本申请提供的数据缓存过程示意图,该过程包括以下步骤:
S101:接收用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,获取所述活动报名请求信息中所述用户的标识信息,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新。
S102:获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
本申请提供的数据缓存方法应用于电子设备,该电子设备可以是PC、平板电脑等设备,也可以是服务器。
当用户报名活动时,电子设备会接收到用户的活动报名请求信息,然后电子设备采用位图Bitmap形式缓存所述报名请求信息。具体的,电子设备根据用户的活动报名请求信息可以获取到用户的标识信息。例如,获取到用户的标识信息为C00705689。本申请不对电子设备根据用户的活动报名请求信息获取到用户的标识信息的规则进行限定,例如可以按照顺序为报名的用户分配标识信息。
电子设备根据用户的标识信息,确定活动位图中用户的位置索引信息。其中,可以直接将用户的标识信息的数字部分作为活动位图中用户的位置索引信息。还以用户的标识信息为C00705689为例,那么活动位图中用户的位置索引信息为705689。
电子设备对位置索引信息指示的字符进行更新。因为报名具有二值性,即报名和不报名。电子设备可以预先规定报名对应在活动位图中的字符以及不报名对应在活动位图中的字符。例如,报名对应在活动位图中的字符为1,不报名对应在活动位图中的字符为0,那么对于标识信息为C00705689的用户报名后,将位置索引信息为705689的字符由0更新为1。
电子设备获取到用户对应于活动的各个业务产生的交易信息之后,采用哈希映射Hashmap形式缓存交易信息。具体的,首先确定用户对应于活动的各个业务的字符串FieldKey。例如,在活动中,用户C00180656569的KEY为C00180656569,活动的业务1的字符串FieldKey为:limitCount_1_202111161_2021111601_10_DAY_20211117_C00180656569_UD;业务2的字符串FieldKey为:limitAmount_1_202111161_2021111601_10_NOPERIOD_C00180656569_UT。每个业务存在对应的Value字段,将用户各个业务的具体信息写入业务对应的Value字段。
本申请考虑到用户是否报名活动具有二值性,因此接收到用户的活动报名请求信息,采用位图Bitmap形式缓存报名请求信息。具体是根据用户的标识信息确定活动位图中用户的位置索引信息,并对位置索引信息指示的字符进行更新。而对于活动中用户的各个业务产生的交易信息,采用哈希映射Hashmap形式进行缓存。具体是将各个业务产生的交易信息对应写入各个业务的字符串FieldKey对应的数值Value字段。本申请通过采用不同形式缓存用户不同数据的方案,能够达到减少数据缓存空间占用量的效果,在不增加数据缓存成本的前提下,解决数据缓存空间占用较大的问题。
本申请上述方案中,以活动ID为KEY,单个KEY只会落在缓存集群中的某个分片上,所有对该KEY的操作都会落在同一个缓存分片上,无法发挥缓存集群的性能。为了解决上述问题,本申请中,所述根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息包括:
根据所述用户的标识信息和预设的分散因子,确定活动位图中所述用户的位置索引信息。
预设的分散因子N1取值例如是256、512等。本申请以活动ID结合用户的标识信息和预设的分散因子作为KEY。具体的,将用户的标识信息和预设的分散因子N1进行取余运算,得到余数,然后以活动ID结合余数作为KEY。例如活动ID为SIGN_HDID,用户的标识信息为C00180656569,预设的分散因子N1取值是256,得到180656569%256=185,其中%为取余运算符号。则KEY为SIGN_HDID_185。
根据用户的标识信息和预设的分散因子的比值,确定KEY为SIGN_HDID_185对应的位图中用户的位置索引信息。即180656569/256=705689。然后将位置索引信息705689指示的字符进行更新。
本申请中,所述根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息之前,所述方法还包括:
若所述用户的标识信息为非数字类的标识信息,通过进制转换将所述非数字类的标识信息转换为数字类的标识信息。
若用户的标识信息为非数字类的标识信息,例如其包含字母,则将字母从26进制/36进制/62进制/64进制转为10进制后,实现非数字类的标识信息转换为数字类的标识信息,然后再根据用户的数字类的标识信息,确定活动位图中用户的位置索引信息,并对位置索引信息指示的字符进行更新。
本申请中,所述方法还包括:
若所述数字类的标识信息大于设定的阈值,将所述数字类的标识信息拆分为至少两个子标识信息;分别确定各个子标识信息各自对应的位图中的位置索引信息;各个位图中的位置索引信息的组合作为所述活动位图中所述用户的位置索引信息。
若数字类的标识信息大于设定的阈值,设定的阈值例如是2^32–1=4294967295,将数字类的标识信息拆分为至少两个子标识信息,然后针对每个子标识信息,将子标识信息和预设的分散因子N1进行取余运算,得到余数,然后以活动ID结合余数作为KEY。根据用户的子标识信息和预设的分散因子的比值,确定KEY对应的位图中用户的位置索引信息。
这样针对各个子标识信息,可以得到该子标识信息对应的KEY和该KEY对应位图中的位置索引信息,各个KEY和各个KEY对应位图中的位置索引信息的组合作为活动位图中用户的位置索引信息。
为了降低各个业务产生的交易信息的缓存占有量,本申请中,所述确定所述用户对应于所述活动的各个业务的字符串FieldKey之后,所述方法还包括:
根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey。
考虑到一个活动任务会有许多用户参与,故可发现FieldKey中存在大量相似值,但该值比较长,会占用过多内存空间。因此本申请配置映射关系表,将各个业务的字符串FieldKey分别映射为短字符FieldKey。由于新增了一张映射关系表,将原先一次缓存调用操作,变为两次,降低了系统性能。但可以通过将映射关系表作为参数表,结合Ehcache/Memcache将映射关系数据查询后缓存在应用内存中,以此达到与原先只需一次缓存调用的效果,仅多了一次内存操作,性能几乎保持不变。
考虑到HashMap只有在FieldKey数量小于512且FiledValue长度小于64字节的情况下才会使用ziplist进行压缩存储。所述根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey包括:
根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为初始字符,将各个初始字符进行取余运算,将取余运算的结果与N/2的差值作为映射后的各个短字符FieldKey;其中,N为小于等于512的正整数。
计算各个业务的初始字符与N的比值,将比值取整拼接至原Hashmap的Key的末尾。
HashMap相较于键值对KV结构,缺乏自动过期机制。可通过在映射关系表中增加FieldKey过期时间实现数据清理。具体的,所述方法还包括:
在所述映射关系表中配置FieldKey过期时间,检索出所述映射关系表中过期时间早于当前日期且未清理的FieldKey,定时扫描缓存中所有的HashMap,将与过期时间早于当前日期且未清理的FieldKey一致的FieldKey及对应的数值删除。
本申请提出一种节约缓存存储容量的数据缓存方法,效果如下:
1、高性能:非时间换空间,不额外增加缓存调用次数,性能几乎与现有单次缓存操作性能一致。
2、低成本:在存储相同数据结构与数据量的前提下,本提案使用的机器资源更少,企业成本更低。在我们的案例中,经过测试比对,改造后缓存容量占用仅为改造前的1/10。
3、使用范围广:本方案中优化后的Bitmap和Hashmap,可以支持更长和更多的数据记录,相较于原有数据结构,适用范围更广。
本申请通过进制转换和分区,突破位图Bitmap对数据长度(2^32-1)与数字(具体数值)的要求。使得可以兼容存储原先无法使用Bitmap存储的数据。
用户是否报名,具有二值性,要么报名,要么未报名,且同一个活动,缓存有效期相同,非常适合用Bitmap来存储。以HDID(活动标识)为Key,用户的标识信息UserId去除字母之后的数字作为位置索引信息Offset。当指定位置的取值为1则表示报名,为0则表示未报名。
下面通过举例对本申请提供的数据缓存过程进行详细说明。
图2为本申请提供的第一种Bitmap形式数据存储示意图,如图2所示,用户ID为C00705689。图2中KEY为SIGN_活动ID,位图中第705689位数值为1。
由于单个Key,只会落在缓存集群中某个分片(某台缓存机器)上,所有对该Key的操作都会落在同一个缓存分片上,无法发挥缓存集群的性能(现有存在问题)。故可以考虑将用户的报名情况存储在多个Key中,即增加一个分散因子N。通过Key%N保证只有N个Key,通过Key/N计算用户所在Bitmap的索引下标。例如N取256,则用户的报名情况存储在Key为SIGN_HDID_(UserId%256),Offset为UserId/256的位置。通过该方式,将key打散。
图3为本申请提供的第二种Bitmap形式数据存储示意图,如图3所示,用户ID为C00180656569。180656569%256=185,180656569/256=705689。则KEY为SIGN_HD105_185,位图中第705689位数值为1。
对于非数字类的用户ID,可以将字母从26进制/36进制/62进制/64进制转为10进制后,再使用上述的方法来存储。如果用户ID数字部分的最大值超过了2^32-1=4294967295,可以拆分为高低位共同表示或者适当调整N的取值后,再使用上述的方法来存储。如果数字部分不是固定从0开始的,还可以减去固定开始的数字,再按上述方案来操作,避免内存浪费。
图4为本申请提供的第三种Bitmap形式数据存储示意图,如图4所示,用户ID为zaaby,zaaby从26进制转换为10进制为11899705,11899705%256=57,11899705/256=46483。
图5为本申请提供的第四种Bitmap形式数据存储示意图,如图5所示,用户ID为H22cZzxd,H22cZzxd从64进制转换为10进制为74907024088807,其超过了4294967295,因此举例如下:将74907024088807拆分为74907作为高位,024088807作为低位。高位:74907%256=155,74907/256=292;低位:24088807%256=231,24088807/256=94096。
本申请通过长短Key映射关系表和分区,突破Hashmap压缩算法对Field Key数量上的限制,进一步提升缓存存储的数据量。
各系统在实现具体业务时,往往为了避免构造的Key重复,相互干扰,缓存Key的长度不会短。通常会与具体业务结合,例如用户在完成某个活动不同任务时,会根据任务类型、任务大类、任务id、优先级、刷新周期、规则维度等字段生成一个表意明确的Key。
图6为本申请提供的第一种Hashmap形式数据存储示意图。图6是针对用户ID为C00180656569的Hashmap形式数据存储示意图。如图6所示,用户ID(userId)作为key,FieldKey为具体业务KEY,如图6所示,业务limitCount_1_202111161_2021111601_10_DAY_20211117_C00180656569_UD的实际数值为10,业务limitAmount_1_202111161_2021111601_10_NOPERIOD_C00180656569_UT的实际数值为1000,业务account_1_202111161_2021111601_10_DAY_C00180656569_UD的实际数值为602。
由于一个活动任务会有许多用户参与,故可发现FieldKey中存在大量相似值,但该值比较长,会占用过多内存空间。故可将FieldKey做一个长短映射,即新增一张表,用于记录长FieldKey与自增ID的映射,缓存中仅存放ID。由于新增了一张映射关系表,将原先一次缓存调用操作,变为两次,降低了系统性能。但可以通过将映射关系表作为参数表,结合Ehcache/Memcache将映射关系数据查询后缓存在应用内存中,以此达到与原先只需一次缓存调用的效果,仅多了一次内存操作,性能几乎保持不变。
图7为本申请提供的映射关系表示意图,如图7所示,映射关系表包括长短key映射表名、具体表字段以及各个字段分别对应的具体记录。
将limitCount_1_202111161_2021111601_10_DAY_20211117_C00180656569_UD映射为初始字符105。
图8为本申请提供的第二种Hashmap形式数据存储示意图。图8是针对用户ID为C00180656569的Hashmap形式数据存储示意图。如图8所示,用户ID(userId)作为key,FieldKey为映射后的KEY,如图8所示,业务105的实际数值为10,业务106的实际数值为1000,业务107的实际数值为602。
由于HashMap只有在FieldKey数量小于512且FiledValue长度小于64字节的情况下才会使用ziplist进行压缩存储。FieldValue通常用于存储用户的完成进度,故能满足,但FiledKey会随着配置的长短Key映射关系会一直增长。故需要控制每个HashMap下FieldKey的数量。通过对长短Key自增ID进行取模与取余的分区运算,保证其最多只能有N(N是小于等于512的正整数,建议取256)个FieldKey。通过取模后减N/2,保证FieldKey占用字节数最小,进一步节约缓存空间。
图9为本申请提供的第三种Hashmap形式数据存储示意图。图9是针对用户ID为C00180656569的Hashmap形式数据存储示意图。如图9所示,userId_(id/N)作为key,userId为C00180656569,初始字符分别为105,106,107,N为256。初始字符与N的比值取整均为0,因此KEY为C00180656569_0。FieldKey为映射后的KEY%N-N/2,如图9所示,业务-23的实际数值为10,业务-22的实际数值为1000,业务-21的实际数值为602。
本申请通过新增FieldKey逻辑过期时间,实现活动灵活展期与自动清理过期Key的效果。HashMap相较于KV结构,缺乏自动过期机制。可通过在长短Key映射表中增加FieldKey过期时间。每日检索出该表中过期日期早于当前日期且未清理的FieldKey,再定时扫描缓存中所有的HashMap,比较FieldKey是否与过期Key一致,若一致则触发删除(fieldkey和velue)。该方式可实现在活动结束前,随意延长活动结束时间的功能。只需要在参数表中调整FieldKey的过期时间即可,无需大面积扫描缓存再更新过期时间,对系统性能影响为零。
图10为本申请提供的过期KEY清理流程示意图,如图10所示,每日0点定时查询长短key映射表中过期日期早于当前日期且未清理完成的Fieldkey记录,判断是否存在,如果存在,扫描Redis集群中所有的Hashmap,比较Hashmap中是否存在此Fieldkey记录,如果存在,出发Redis删除指令。
下面通过时序图对本申请提供的数据缓存过程进行说明。
图11为本申请提供的报名参加活动的时序图,如图11所示,用户进入活动页面浏览,点击报名按钮;页面上送活动ID(HD20221111)和用户ID(C00123456)至后台服务器;服务端根据事先预估的活动参与总人数,选定N为256,即该活动共有256个Key用于表示用户报名情况。对用户ID(C00123456)进行计算,取用户ID中数字部分,即123456,123456%256=64,则该用户在缓存中的Key为SIGN_HD20221111_64,123456/256=482,则该用户的Offset为482。最终该用户的报名信息,标记在Key为SIGN_HD20221111_64,第482位下标索引处,标记为1。返回前端报名成功,后续查询用户报名情况时,按照同样的方式构造Key,判断其值是否为1,若为1则表示已报名。
图12为本申请提供的用户参与活动任务的时序图,如图12所示,首先业务运营人员,根据开展的活动,在管理页面配置活动规则。管理平台后台根据活动配置信息自动产生长短Key映射关系,落库并刷新至缓存。后台服务端应用每隔1分钟,从缓存中读取最新的映射关系数据,更新至应用本地内存Ehcache中。当用户了解到该活动,进入活动页,按照活动规则完成指定交易任务或浏览/签到等行为任务后。这些数据异步写入数据Kafka(对应时序图中步骤1)。后台服务端订阅数据Kafka,每次Pull一批数据回来,循环第5步逐条处理(对应时序图中步骤2)。根据用户完成的交易/行为数据以及规则参数,通过规则引擎累计用户(C00123456)的任务完成进度(对应时序图中步骤3)。在更新累计值时,需要先根据配置的规则计算所得长Key。在本地应用内存Ehcache中查询出对应的短Key(例如ID为495)。再根据短Key计算用户在缓存中的Key与FieldKey。其中Key的计算规则为ID/N=495/256=1,则key为C00123456_1,FieldKey的计算规则为ID%N-N/2=495%256-256/2=111,则FieldKey为111。根据计算所得key,通过缓存指令(hget C00123456_1 111)查询该用户在缓存中存储的历史进度。根据需要判断是否需要通过缓存(hset C00123456_1 111xxxx)指令更新用户当前累计值。这批消息处理完毕后,返回第4步,继续执行。
图13为本申请提供的数据缓存装置结构示意图,包括:
第一缓存模块131,用于接收用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,获取所述活动报名请求信息中所述用户的标识信息,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新;
第二缓存模块132,用于获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
所述第一缓存模块131,具体用于根据所述用户的标识信息和预设的分散因子,确定活动位图中所述用户的位置索引信息。
所述第一缓存模块131,还用于若所述用户的标识信息为非数字类的标识信息,通过进制转换将所述非数字类的标识信息转换为数字类的标识信息。
所述第一缓存模块131,还用于若所述数字类的标识信息大于设定的阈值,将所述数字类的标识信息拆分为至少两个子标识信息;分别确定各个子标识信息各自对应的位图中的位置索引信息;各个位图中的位置索引信息的组合作为所述活动位图中所述用户的位置索引信息。
所述第二缓存模块132,还用于根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey。
所述第二缓存模块132,具体用于根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为初始字符,将各个初始字符进行取余运算,将取余运算的结果与N/2的差值作为映射后的各个短字符FieldKey;其中,N为小于等于512的正整数。
所述装置还包括:
数据清理模块133,用于在所述映射关系表中配置FieldKey过期时间,检索出所述映射关系表中过期时间早于当前日期且未清理的FieldKey,定时扫描缓存中所有的HashMap,将与过期时间早于当前日期且未清理的FieldKey一致的FieldKey及对应的数值删除。
本申请还提供了一种电子设备,如图14所示,包括:处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信;
所述存储器303中存储有计算机程序,当所述程序被所述处理器301执行时,使得所述处理器301执行以上任一方法步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口302用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述处理器可以是通用处理器,包括中央处理器、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路、现场可编程门陈列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
本申请还提供了一种计算机存储可读存储介质,所述计算机可读存储介质内存储有可由电子设备执行的计算机程序,当所述程序在所述电子设备上运行时,使得所述电子设备执行时实现以上任一方法步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (16)
1.一种数据缓存方法,其特征在于,所述方法包括:
接收用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,获取所述活动报名请求信息中所述用户的标识信息,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新;
获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
2.如权利要求1所述的方法,其特征在于,所述根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息包括:
根据所述用户的标识信息和预设的分散因子,确定活动位图中所述用户的位置索引信息。
3.如权利要求1或2所述的方法,其特征在于,所述根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息之前,所述方法还包括:
若所述用户的标识信息为非数字类的标识信息,通过进制转换将所述非数字类的标识信息转换为数字类的标识信息。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述数字类的标识信息大于设定的阈值,将所述数字类的标识信息拆分为至少两个子标识信息;分别确定各个子标识信息各自对应的位图中的位置索引信息;各个位图中的位置索引信息的组合作为所述活动位图中所述用户的位置索引信息。
5.如权利要求1所述的方法,其特征在于,所述确定所述用户对应于所述活动的各个业务的字符串FieldKey之后,所述方法还包括:
根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey。
6.如权利要求5所述的方法,其特征在于,所述根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey包括:
根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为初始字符,将各个初始字符进行取余运算,将取余运算的结果与N/2的差值作为映射后的各个短字符FieldKey;其中,N为小于等于512的正整数。
7.如权利要求5所述的方法,其特征在于,所述方法还包括:
在所述映射关系表中配置FieldKey过期时间,检索出所述映射关系表中过期时间早于当前日期且未清理的FieldKey,定时扫描缓存中所有的HashMap,将与过期时间早于当前日期且未清理的FieldKey一致的FieldKey及对应的数值删除。
8.一种数据缓存装置,其特征在于,所述装置包括:
第一缓存模块,用于接收用户的活动报名请求信息,采用位图Bitmap形式缓存所述报名请求信息;其中,获取所述活动报名请求信息中所述用户的标识信息,根据所述用户的标识信息,确定活动位图中所述用户的位置索引信息,并对所述位置索引信息指示的字符进行更新;
第二缓存模块,用于获取所述用户对应于所述活动的各个业务产生的交易信息,采用哈希映射Hashmap形式缓存所述交易信息;其中,确定所述用户对应于所述活动的各个业务的字符串FieldKey,将所述各个业务产生的交易信息对应写入字符串FieldKey对应的数值Value字段。
9.如权利要求8所述的装置,其特征在于,所述第一缓存模块,具体用于根据所述用户的标识信息和预设的分散因子,确定活动位图中所述用户的位置索引信息。
10.如权利要求8或9所述的装置,其特征在于,所述第一缓存模块,还用于若所述用户的标识信息为非数字类的标识信息,通过进制转换将所述非数字类的标识信息转换为数字类的标识信息。
11.如权利要求10所述的装置,其特征在于,所述第一缓存模块,还用于若所述数字类的标识信息大于设定的阈值,将所述数字类的标识信息拆分为至少两个子标识信息;分别确定各个子标识信息各自对应的位图中的位置索引信息;各个位图中的位置索引信息的组合作为所述活动位图中所述用户的位置索引信息。
12.如权利要求8所述的装置,其特征在于,所述第二缓存模块,还用于根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为短字符FieldKey。
13.如权利要求12所述的装置,其特征在于,所述第二缓存模块,具体用于根据预先配置的映射关系表,将所述各个业务的字符串FieldKey分别映射为初始字符,将各个初始字符进行取余运算,将取余运算的结果与N/2的差值作为映射后的各个短字符FieldKey;其中,N为小于等于512的正整数。
14.如权利要求12所述的装置,其特征在于,所述装置还包括:
数据清理模块,用于在所述映射关系表中配置FieldKey过期时间,检索出所述映射关系表中过期时间早于当前日期且未清理的FieldKey,定时扫描缓存中所有的HashMap,将与过期时间早于当前日期且未清理的FieldKey一致的FieldKey及对应的数值删除。
15.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-7任一项所述的方法步骤。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310105166.9A CN116150207A (zh) | 2023-02-13 | 2023-02-13 | 一种数据缓存方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310105166.9A CN116150207A (zh) | 2023-02-13 | 2023-02-13 | 一种数据缓存方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116150207A true CN116150207A (zh) | 2023-05-23 |
Family
ID=86352231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310105166.9A Pending CN116150207A (zh) | 2023-02-13 | 2023-02-13 | 一种数据缓存方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116150207A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117215500A (zh) * | 2023-11-09 | 2023-12-12 | 北京友友天宇系统技术有限公司 | 一种突破LMDBKey长度的方法及系统 |
-
2023
- 2023-02-13 CN CN202310105166.9A patent/CN116150207A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117215500A (zh) * | 2023-11-09 | 2023-12-12 | 北京友友天宇系统技术有限公司 | 一种突破LMDBKey长度的方法及系统 |
CN117215500B (zh) * | 2023-11-09 | 2024-01-23 | 北京友友天宇系统技术有限公司 | 一种突破LMDB Key长度的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10489476B2 (en) | Methods and devices for preloading webpages | |
CN104202423B (zh) | 一种通过软件架构扩展缓存的系统 | |
CN109299144B (zh) | 一种数据处理方法、装置、系统及应用服务器 | |
CN105631035B (zh) | 数据存储方法和装置 | |
CN106464669B (zh) | 基于访问模式的智能文件预取 | |
US20160381164A1 (en) | Optimizing storage in a publish / subscribe environment | |
US11314689B2 (en) | Method, apparatus, and computer program product for indexing a file | |
US10585807B2 (en) | Balanced cache for recently frequently used data | |
CN112181306A (zh) | 一种号段模式下生成分布式id的方法 | |
CN112437148B (zh) | 业务请求的处理方法、装置、业务服务器及系统 | |
CN116150207A (zh) | 一种数据缓存方法、装置、电子设备及存储介质 | |
CN112347355B (zh) | 数据处理方法、装置、服务器及存储介质 | |
US9292549B2 (en) | Method and system for index serialization | |
CN116405460A (zh) | 用于内容分发网络的域名解析方法、装置、电子设备及存储介质 | |
CN111563199A (zh) | 一种数据处理方法及装置 | |
CN113779452B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN112487009B (zh) | 数据更新方法、装置、设备、存储介质及程序产品 | |
WO2023142605A1 (zh) | 一种基于区块链的数据处理方法和相关装置 | |
US20120254133A1 (en) | Method for binary persistence in a system providing offers to subscribers | |
CN113037420B (zh) | 读时间戳的获取方法和装置、电子设备和存储介质 | |
CN113132241B (zh) | Acl模板动态配置方法及装置 | |
CN113760390A (zh) | 页面文件加载方法、装置、设备及存储介质 | |
CN113138943B (zh) | 一种处理请求的方法和装置 | |
CN113362097A (zh) | 一种用户确定方法和装置 | |
CN114444440B (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 |