我正在管理一个Java项目,用于存储用户数据。用户可以在线或离线。当用户在线时,他们的数据会加载到数据对象中以便于访问,并在注销时卸载。
然而,为了防止多个命令同时操作数据而导致数据损失,对于离线用户,我使用WeakHashMap作为已加载用户数据对象的缓存。如果需要访问离线数据对象进行修改,系统将首先检查缓存,然后再从文件中加载数据。
我唯一能想到的存储方法是使用字符串键,表示用户的用户名。但由于Java的工作方式,由于VM的字符串缓存系统存在,这种方式并不总是有效。
最初我考虑使用字符串包装器,但由于哈希映射表的工作方式(通过哈希码),创建新的字符串包装器将无法获得所需的值,如果我存储字符串包装器,那么将始终存储强引用到键(阻止从WeakHashMap中删除键)。
也许我只是没有理解WeakHashMap应该如何使用:S如果WeakHashMap不适合我现在的需求,我愿意接受其他解决方案。