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/

原文地址:https://www.cnblogs.com/hld123/p/14109924.html