【引言】前一篇重点分析了Redis的基础概念和数据类型,以及一些常用的操作命令和特性,主要还是停留在基本的了解和操作层面,毕竟我们是做Java的,所以我们的一个核心的诉求就是通过Java怎么把Redis用起来并且还能用的很顺手,所以这一章重点来捋一捋Java中如何使用Redis。
Maven
都到了Springboot年代了,Maven自然是必不可少的,通过如下XML引入springboot的spring-boot-starter-data-redis,就可以开始开发了,So easy。
1 |
|
application.properties
Springboot的两种配置文件格式之一(properties),另外一种是yml格式(分层缩进式),配置好redis连接。
1 | # Redis数据库索引(默认为0) |
RedisOperator
这个类模拟了最简单的两个Redis操作:写入和读取一个String的value,作为hello world级别的试验,这个程度足矣。
1 | package com.example.demo.redis; |
Springboot Main
直接就上Main方法了,Springboot里面的Main方法和传统的Main方法还是有些区别的,一般创建工程时默认都会给你建好,这里比常规的Main多实现了一个CommandLineRunner,这个主要是用来满足注入和非静态调用结合到static的main里面来用才加入的。(因为静态的接口变量是没办法被Springboot直接Autowired注入的,这个具体的原因在Springboot里面再详细探讨;比如redisOperator如果被定义为static的然后直接在main里面写一些调用,是会出现NullPointerException的)
1 | package com.example.demo; |
Test Result
既然是做hello world,那自然是要看到结果输出才算完事儿的,启动Main方法后看到下面熟悉的Springboot的日志logo然后就可以静静等待结果了,不出意外的话结果都可以正常打印到Console。
1 | . ____ _ __ _ _ |
Redis Client View
通过Redis的客户端我们也可以很清楚的看到,四条数据已经入库成功,证明之前的代码成功将数据写入了Redis。
More About
关于Template
初始使用springboot来整合redis的时候,其实我是忘了配置application.properties文件的,结果居然也跑出来了,后来发现springboot本身已经内置了默认配置生成的方法(猜测是已本机默认端口不带密码的模式来生成的)。
在上面的demo中,用到了StringRedisTemplate这个类,这个也是由redis-starter提供的生成RedisTemplate的一个实现(和Kafka、ActiveMQ类似的模式),所以就往上看了一下源码。
StringRedisTemplate
StringRedisTemplate是继承自RedisTemplate(用到了泛型),想当然的以为RedisTemplate有很多不同的实现(结果看了下发现就这一个和它自己),这里的默认构造方法指定了一些属性的持久化策略,仅此而已;所以重点我们来看看RedisTemplate。
1 | public class StringRedisTemplate extends RedisTemplate<String, String> { |
RedisTemplate
RedisTemplate源码有700多行,这里就不一行行去解读了,只针对里面看上去会影响我们使用的地方进行一些简要的说明。
首先我们注意到在demo里面有用到template.opsForValue()这种语法来获取操作类,果然在RedisTemplate内部还提供了一系列的操作类(从名称大致也能推测出针对不同的数据类型有不同的操作类获取方法);这里也就先分析到这一步吧,至于RedisTemplate内部的get、set、execute、sort等等方法,实际使用时再去挖掘吧。
1 | opsForCluster |
单机自动连接
很好奇这个单机自动连接(哪怕不配置也能操作),虽然猜测是默认写了,但是还是要看到源码才放心,所以经过一番查阅源码,最后发现了这个类JedisConnectionFactory。
1 | package org.springframework.data.redis.connection.jedis; |
集群配置
在JedisConnectionFactory这个类里面还有两个关于集群的Configuration定义;结合下面的定义,基本也就知道配置文件里面要配置哪些项了,现在不比SpringMVC时代了,一配一大把属性,当简则简。
1 | public class JedisConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory { |