使用Redis遇到的NA问题解决方案(redis返回NA)
在使用Redis进行开发工作是,遇到正在“NA”问题也是很常见的情况。一般而言,Redis返回“NA”代表着某一操作键值(key)不存在或者已被删除。但是,当Redis 把该键分配给另一台结点时(或者另一台节点的缓存失效),它可能返回“NA”而不是报错。这就可能导致应用出现非预期结果。
为了解决“NA”问题,应用开发者可以采用以下方法:
1、应用端重试:开发者可以在调用Redis某个操作时,判断如果返回结果为“NA”,可以重试改操作,重试之前,也可以加入延迟处理。这样,在Redis分区情况出现变化时,可以等待其缓存重新恢复正常,防止出现非预期结果。
2、可以使用“NX”参数: 当执行设置值操作(set)时,可以使用“NX”参数来限定在键不存在时,才进行设置操作,而不是Original(如果没有这个参数,可能会因为“NA”问题而发生重复set,从而不可预期结果。
例如: 使用“NX”参数
set name “grandyang” NX
3、可以使用WATCH 命令: 这是Redis中一个特殊机制,可以解决多个客户端进行竞争更新时,造成“NA”。WATCH可以将原子操作和数据库请求绑定起来。也就是说,其他客户端的更改键值内容的操作,只有在保持WATCH时,才能更新数据库,否则会进行失败。
以下代码展示了WATCH和MULTI命令的基本用法:
WATCH mykey
MULTI
SET mykey bar
EXEC
4、在后台定时检查key的有效性:开发者可以在应用的后台,比如定期任务中,加入定时检查key的有效性,如果发现发现key没有被正确使用(或者key不存在),可以重新设置key,避免出现“NA”问题。
例如: 通过设置一个SETNX参数,如果发现key已存在,可以更新该key:
SETNX mykey “grandyang”
通过以上4步,开发者可以很好的解决Redis中遇到的“NA”问题,确保应用行为正常。当然,针对不同的应用,应用开发者也可以根据自己的实际情况,采取必要的措施,保证系统的正常工作。