Redis执行失败后如何处理
Redis执行失败后如何处理
redis出现错误的两种情况:1) Redis连接失败,系统异常 2)Redis执行失败
1、redis连接失败,抛出异常(RedisException类)
如果无法访问Redis服务器,phpredis会抛出RedisException对象。如果连接 出现问题,Redis服务已关闭,或者redis主机压力过大,则可能发生这种情况。在任何其他不涉及无法访问的服务器(例如key不存在,无效命令等)的问题情况下,phpredis将返回FALSE。
解决方法:
1)依次检查Linux,php,nginx,redis配置方面可能出现的问题
2)检查phpredis连接redis用的方法是connect()还是pconnect()
说明:通常我们在使用phpredis连接redis的时候,都是用的connect()方法,在大量的php请求请求到redis的时候,这种方式会不断的建立和关闭连接,占用很多资源,导致服务器出现大量的TIME_WAIT,这样就会有很多php请求无法连接redis,出现Redis server went away这个异常,实际就说明redis服务没有收到请求。
3)try ... catch ... 是必须要做的标准开发编程手段
下面给出一段参考代码:
1 public function testRedis() 2 { 3 $redis=new Redis(); 4 try { 5 $redis->connect('127.0.0.1', 6379); 6 $redis->setex('test_key', 60, 'test'); 7 } catch (\Exception $e) { 8 die( "Cannot connect to redis server:".$e->getMessage() ); 9 } 10 }
2、执行失败
这个比较简单,根据phpredis手册,针对执行失败返回的结果进行处理即可
下面给出一段参考代码:
1 //记录分享次数 2 $res = $this->redis->incr('share' . $openid); 3 //执行成功,则设在缓存时间 4 if ($res) { 5 $this->redis->expire('share' . $openid, EXPIRE_TIME); 6 }
3、执行失败,是否需要提示用户?
这是需要视情况而定的,主要是根据这个执行失败对用户的影响程度
1)对用户影响不大
比如点赞排行榜这种的,某个用户的点赞成功与否对总的点赞次数影响不明显,这种情况下使用redis缓存点赞失败,无须提示用户。
2)对用户影响比较明显
比如redis缓存的是用户个人收藏的图书信息,如果收藏失败,就无法显示收藏的图书信息,直接影响到用户的体验,这种就需要友好地提示用户。
参考链接:
phpredis中文手册:https://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html
phpredis英文手册:https://github.com/phpredis/phpredis/