SpringBoot实践(三)整合Redis

一:配置Redis服务器

   在springboot中配置redis服务器很简单,只要把相应的配置写在配置文件里面(比如application.properties):


#Redis配置
#Matser的ip地址
redis.hostName=192.168.1.110
spring.redis.host=192.168.1.110
#端口号
spring.redis.port=6379
#如果有密码
#redis.password=123456
#客户端超时时间单位是毫秒 默认是2000

spring.redis.timeout=10000

#最大空闲数

spring.redis.jedis.pool.max-idle=300
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
#redis.maxActive=600
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
redis.maxTotal=1000  
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000  
#连接的最小空闲时间 默认1800000毫秒(30分钟)
redis.minEvictableIdleTimeMillis=300000  
#每次释放连接的最大数目,默认3
redis.numTestsPerEvictionRun=1024  

#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
redis.timeBetweenEvictionRunsMillis=30000  
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true  
#在空闲时检查有效性, 默认false
redis.testWhileIdle=true 

可以根据自己需求添加和修改相关的配置,添加了这些属性之后,在springboot启动的时候会创建有关Redis的操作对象,比如:RedisConnectionFactory类,RedisTemplate,StringRedisTemplate等常用的Redis对象.

二:修改RedisTemplate默认属性

我们都知道spring中操作基本redis都是通过RedisTemplate来进行的,但是根据配置文件配置redis来生成的RedisTemplate往往不能满足要求,比如:RedisTemplate的默认的序列化器是:JdkSerializationRedisSerializer。这样Redis服务器存入的的就是经过序列化后的特殊字符串,有时候对于我们查看并不方便,如果使用默认的序列化器,则我们存入的key值会变成下面的样子:


127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x06test03"
2) "\xac\xed\x00\x05t\x00\x06test04"

 

这是因为Redis是一种基于字符串存储的NoSql,而java是基于对象的语言,对象是无法存储到Redis中的,不过Java提供了序列化机制,只要类实现了java.io.Serializable接口,就代表类的对象可以进行序列化,通过将类的对象进行序列化就能够得到二进制字符串,这样Redis就可以将这些类对象以字符串的格式进行存储。Java也可以将这些二进制字符串进行反序列化来得到对象。Spring给我提供了一些序列化器让我们可以自定义序列化的方式,这些序列化方式通过RedisTemplate来设置。

                                                           RedisTemplate中提供了如下的一些序列化器的属性


属性描述备注
defaultSerializer默认序列化器如果没设置,则使用JdkSerializationRedisSerializer
keySerializerRedis键序列化器如果没设置,则使用默认序列化器
valueSerializerRedis值序列化器如果没设置,则使用默认序列化器
hashKeySerializerRedis散列结构field序列化器如果没设置,则使用默认序列化器
hashValueSerializerRedis散列结构value序列化器如果没设置,则使用默认序列化器
stringSerializer字符串序列化器RedisTemplate自动赋值为StringRedisSerializer

我们在Java配置中设置我们自己的序列化器如下(注意备注信息!):

/**
     *springboot默认的redisTemplate添加了@ConditionOnMissingBean所以,如果自定义了,默认的就不会加载
     */

    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new 
        Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

设置上面的属性之后,再看我们的存入的key值变成如下内容:

127.0.0.1:6379> keys *
1) "test04"
2) "test03"

这是对于key:value中的key的设置,上述代码中也对value的序列化进行设置,设置内容见下。

三:设置中文序列化

如果我们的value里面包含了中文内容,而我们想看到完整正确的value内容,需要增加valueSerializer的设置。如上设置的jackson2JsonRedisSerializer。但是你可能加上这个配置去Redis后台去查看的时候还是会看到如下的情况:

127.0.0.1:6379> get test03
"\xac\xed\x00\x05t\x00\t\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a"

 这种时候并不是设置没有起作用的原因,而是Redis服务器的启动的时候需要添加  -- raw 参数,它能让数据按原格式输出,不显示多余的内容,也能使中文显示。启动命令如下:

./redis-cli --raw

启动之后再查询如下:

127.0.0.1:6379> get test03
"李银河"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姑苏冷

您的打赏是对原创文章最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值