可以使 Redis 服务器 return NULL 或 False 而不是 JedisConnectionException 吗?
Can Make Redis server return NULL or False instead of JedisConnectionException?
我们正在开发一个使用Redis服务器作为缓存服务器的应用程序。
所以我们做的是当客户端请求API它首先去Redis获取数据如果没有数据它returns null所以第二步去MYSQL数据库获取数据,
但是当我们失去 Redis 连接时的问题是 returns JedisConnectionException。
如果没有连接,我们可以在配置中将此异常处理为 return null 而不是异常吗?
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
@Bean
HashOperations hashOperations() {
return redisTemplate().opsForHash();
}
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Autowired
private HashOperations hashOperations;
public void save(User user) {
hashOperations.put("USER",user.getId(),user);
}
public List<User> getAll() {
Collection users = hashOperations.entries("USER").values();
if(CollectionUtils.isEmpty(users)){
// get data from data base
}
return (List<User>) users;
}
也许使用 try
块?
try {
// your Redis operations
} catch (JedisConnectionException jce) {
return null;
}
private static boolean isConnected() {
try {
// get any fake key to test connection
ApplicationContextConfig.getBean(HashOperations.class).get("TEST", 1);
return true;
} catch (Exception ex) {
return false;
}
}
请注意,异常可能会
RedisConnectionFailureException
或
JedisConnectionException
所以我做到了 Exception
.
此方法在任何 Redis 操作之前调用,以首先测试连接性。
我们正在开发一个使用Redis服务器作为缓存服务器的应用程序。
所以我们做的是当客户端请求API它首先去Redis获取数据如果没有数据它returns null所以第二步去MYSQL数据库获取数据,
但是当我们失去 Redis 连接时的问题是 returns JedisConnectionException。
如果没有连接,我们可以在配置中将此异常处理为 return null 而不是异常吗?
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
@Bean
HashOperations hashOperations() {
return redisTemplate().opsForHash();
}
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Autowired
private HashOperations hashOperations;
public void save(User user) {
hashOperations.put("USER",user.getId(),user);
}
public List<User> getAll() {
Collection users = hashOperations.entries("USER").values();
if(CollectionUtils.isEmpty(users)){
// get data from data base
}
return (List<User>) users;
}
也许使用 try
块?
try {
// your Redis operations
} catch (JedisConnectionException jce) {
return null;
}
private static boolean isConnected() {
try {
// get any fake key to test connection
ApplicationContextConfig.getBean(HashOperations.class).get("TEST", 1);
return true;
} catch (Exception ex) {
return false;
}
}
请注意,异常可能会
RedisConnectionFailureException
或
JedisConnectionException
所以我做到了 Exception
.
此方法在任何 Redis 操作之前调用,以首先测试连接性。