redis-cluster - Spring集成Redis做缓存,Redis宕机时Spring处理的问题

查看:362
本文介绍了redis-cluster - Spring集成Redis做缓存,Redis宕机时Spring处理的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

采用的是Spring自带的缓存管理,使用Redis做缓存,在Spring中配置如下

@Configuration
@EnableCaching
public class CachingConfig {

    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        return new RedisCacheManager(redisTemplate);
    }

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.afterPropertiesSet();

        return jedisConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String,User> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }
}

在DAO实现中使用缓存的代码如下

    @Cacheable(value = "userCache", key = "'id_'+#id")
    public User selectUser(String id) {
        return getMapper().selectUser(id);
    }

这里使用的是单个Redis,在Redis正常工作时没有问题,但是如果这时候Redis挂掉了,访问时就会抛出获取与Redis之间connection异常(这也正常,Redis都挂掉了)。
跟了一下代码,发现此时Spring的处理逻辑是这样的:

配置有缓存-->先去Redis找-->连接不上-->抛出错误

但是我理解和问题的是:

  1. 缓存如果挂掉了,请求应该就直接去数据库取,否则缓存一挂岂不是整个系统都不可用了?

  2. Spring中是否有什么配置使缓存能否做到可插拔?

  3. 实际中会直接使用这种方案吗?还是使用Redis集群方案(抱歉这个还没研究)?

  4. 实际项目中自己实现缓存管理方案?还是其他的好的解决方案?

谢谢!

解决方案

1、这个问题你要这样想,Redis 有挂掉的可能,数据库也存在这个可能,数据库挂了系统不是也不可用了么?
2、这个貌似没有
3、通常都会对 Redis 集群,其实访问量、数据库不大的话不集群的话问题也不大,服务器中 Redis 也不是那么容易挂的,而且可以设置监控系统监控 Redis 、数据库等运行情况,有异常则报警,报警后及时处理即可。
4、不太清楚你说的自己实现缓存管理方案具体是指什么

这篇关于redis-cluster - Spring集成Redis做缓存,Redis宕机时Spring处理的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆