项目当中遇到异常测试,redis服务挂掉后,项目连接不上导致调用获取缓存的地方报错疯狂打日志,把内存占满后服务挂掉了。针对的这个问题的修改方案为项目启动校验一下redis 是否能正常连接,检测下redis 是否可以用。当项目是在执行过程中redis服务挂掉的情况,项目做了兼容获取缓存数据失败后,会直接去查询数据库。
package com.shopping.test;
import redis.clients.jedis.Jedis;
/**
* 测试redis缓存
*/
public class RedisTest {
/**
* 检查redis是否存活
* @param url 服务器地址
* @param port 端口
* @return
*/
public static Integer getRedisIsOk(String url, int port) {
int result = 0; try {
//连接本地Redis服务
Jedis jedis = new Jedis(url, port);
String ping = jedis.ping();
if (ping.equalsIgnoreCase("PONG")) {
System.out.println("redis缓存有效!" + ping);
result = 0;
}
} catch (Exception e) {
System.out.println("redis缓存失败!");
result = 1;
}
return result;
}
public static void main(String[] args) {
int res = getRedisIsOk("127.0.0.1", 6379);
if (res == 0) {
System.out.println("redis缓存有效!" + res);
} else {
System.out.println("redis缓存失败!" + res);
}
}
}
2.如果缓存有密码则,直接使用下面的方法就可以:
/**
* 检查redis是否存活
* @param url 服务器地址
* @param port 端口
* @param password redis的密码
* @return
*/
public static Integer getRedisIsOk(String url, int port,String password) {
int result = 0;
try {
//连接本地Redis服务
Jedis jedis = new Jedis(url, port);
jedis.auth(password);//密码
String ping = jedis.ping();
if (ping.equalsIgnoreCase("PONG")) {
System.out.println("redis缓存有效!" + ping);
result = 0;
}
jedis.close(); // 释放连接资源
} catch (Exception e) {
System.out.println("redis缓存失败!");
result = 1;
}
return result;
}