面试题答案
一键面试缓存设计
- 数据结构选择:
- 可以使用键值对(Key - Value)结构的缓存,例如 Redis。将交易哈希值作为键(Key),交易详情作为值(Value)。交易详情可以序列化为 JSON 或其他合适的格式存储。这样在查询时,通过交易哈希值能够快速定位到对应的交易详情。
- 缓存层次:
- 可以考虑设置两层缓存。第一层为本地缓存(如 Guava Cache),在应用服务器本地存储部分近期频繁查询的交易数据。这样对于一些高频的本地查询,可以直接在本地缓存中获取,减少对外部缓存(如 Redis)的访问压力。第二层为分布式缓存(如 Redis),存储更广泛的近期频繁查询的交易数据,供多个应用实例共享访问。
缓存淘汰策略
- 策略选择:采用 LRU(最近最少使用)淘汰策略较为合适。
- 原因阐述:
- 由于缓存空间有限,当缓存满时需要淘汰数据。LRU 策略会优先淘汰最长时间未被使用的缓存数据。在区块链交易记录场景中,近期频繁查询的交易哈希值及详情更有可能在未来继续被查询。而长时间未被查询的交易数据,再次被查询的概率相对较低。所以使用 LRU 策略,能够保证缓存中始终保留最可能被再次使用的交易数据,提高缓存命中率,有效利用缓存空间,从而提升系统对频繁查询交易数据的响应性能。