Redis客户端缓存(Tracking)测试疑问:二次GET为何仍请求服务器?
Redis客户端缓存功能的实现说明
首先明确:redis-cli本身并没有实现客户端缓存的逻辑,它只是一个命令行工具,负责发送命令到服务器并返回结果,不会在本地存储缓存数据。所以即使你开启了CLIENT TRACKING,redis-cli依然会把每一次GET请求都发送到服务器,这就是你在monitor中看到两次GET的原因。
对于你的疑问:
- 是否需要自行实现缓存?是的。
CLIENT TRACKING只是Redis服务器提供的缓存失效通知机制,它负责在数据更新时通知客户端,但客户端本身需要自己实现本地缓存的存储、读取以及根据服务器的通知来失效缓存的逻辑。 - Ruby的redis客户端(包括搭配hiredis的情况)默认也没有内置客户端缓存实现,所以同样会把所有GET请求发送到服务器。如果需要使用客户端缓存功能,你需要基于这些客户端进行二次开发,或者使用已经实现了该功能的第三方库/扩展。
举个简单的逻辑示例(伪代码):
# 模拟客户端缓存实现 local_cache = {} # 开启客户端追踪后,处理服务器的失效通知 def handle_invalidation(key) local_cache.delete(key) end # 自定义GET方法 def get(key) if local_cache.key?(key) return local_cache[key] else value = redis.get(key) local_cache[key] = value return value end end
只有这样,当第二次调用GET test:1时,才会优先读取本地缓存,而不会发送请求到服务器。
内容的提问来源于stack exchange,提问作者Zacarias Eugênio
相关产品推荐
相关产品推荐

