整合redis踩坑

时间:2025-02-18 07:14:55

几个重点

 <parent>
        <groupId></groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
  1. redis必须用这个依赖,其他依赖不适用
 		<dependency>
            <groupId></groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

或者yml

=0
# Redis服务器地址
=111.32.23.44
# Redis服务器连接端口
=6379
#redis 服务器密码,我的服务器有密码的,但是这里通过6379端口链接不要写密码
=        
# 连接池最大连接数(使用负值表示没有限制)
-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
-wait=-1
# 连接池中的最大空闲连接
-idle=8
# 连接池中的最小空闲连接
-idle=0
# 连接超时时间(毫秒)
=6000

坑:如果填写密码会报错,掉坑里半天

 jedisDataException: ERR Client sent AUTH, but no password is set
  1. CacheConfig
@Slf4j
@Configuration
@EnableCaching//启用缓存,这个注解很重要;
//继承CachingConfigurerSupport,为了自定义生成KEY的策略。可以不继承。
public class RedisConfig extends CachingConfigurerSupport{
    @Bean(name="redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        (redisConnectionFactory);

        FastJsonRedisSerializer<Object> serializer = new FastJsonRedisSerializer<Object>();
        // value值的序列化采用fastJsonRedisSerializer
        (serializer);
        (serializer);
        // key的序列化采用StringRedisSerializer
        (new StringRedisSerializer());
        (new StringRedisSerializer());

        (redisConnectionFactory);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
        RedisCacheConfiguration config = ();
        // 设置缓存的默认过期时间,也是使用Duration设置
        config = ((1))
                .disableCachingNullValues();     // 不缓存空值

        // 设置一个初始化的缓存空间set集合
        Set<String> cacheNames =  new HashSet<>();
        ("my-redis-cache1");
        ("my-redis-cache2");

        // 对每个缓存空间应用不同的配置
        Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
        ("my-redis-cache1", config);
        ("my-redis-cache2", ((120)));

        // 使用自定义的缓存配置初始化一个cacheManager
        RedisCacheManager cacheManager = (factory)
                .initialCacheNames(cacheNames)  // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
                .withInitialCacheConfigurations(configMap)
                .build();
        return cacheManager;
    }
}

坑:注意这里RedisCacheManager已经去掉的构造方法中用redieTemplte;

  1. 应用测试
//在service层调用方法上加Cacheable	
	@Cacheable(cacheNames = "cart", key="'cart_'+#id")
	@Override
	public Cart getById(Long id){
		return (id);
	}
	```
	6.  验证

![在这里插入图片描述](/)

	redis中已经有key=cart_7的数据的。