2013年1月14日星期一

key生成器的两种持久化方案

需求:
        key生成器功能是生成一个唯一的key,不能重复。序列化是将已经生成的key序列化到磁盘,以防机器宕机,key丢失导致生成重复的key;我们的需求key是顺序增长的。


方案一:
        先生成key后持久化;用户模块调用key生成器时,生成器先将key返回给用户,并将返回给用户的最大key存储在内存中,到一定量后(比如,已经返回给用户64个key)将key序列化到文件。文件中还存在一个标识位,正常打开、关闭文件时设置相应的标识位。key生成器启动读取序列化文件时,判断文件是否被正常关闭,是则正常读取文件中最大的key,否则读取文件中的key加上64(略过,保证key不重复),再继续去生成key。

方案二:
        先持久化后生成key ;用户模块调用key生成器时,先将key序列化到文件,再将key返回给用户。直接序列化一个区间到文件,如程序启动时,key从1开始,不直接序列化1,而将64序列化到文件,这样之后从2-63的调用就不需再去序列化文件了,减少了文件的写操作。此方案不需在文件中存储任何标识位,机器宕机之后,序列化文件中的key肯定是最大的,后续的key不会重复。


        以上两种方案,都是从别人的代码和交流中获得的,我比较喜欢第二种方案,简单,省去了不必要的错误恢复。有时候换一种思路或者说逆向思路可以让你的设计更为简单、容易理解。

没有评论:

发表评论