boot2不仅支持ORM框架,而且还支持redis,我们经常使用redis作缓存,之前java使用jedis连接redis服务,现在使用Lettuce作为连接客户端,它使用Netty的连接实例,可以在多个线程间并发访问。
导入依赖,如下:
compile('org.springframework.boot:spring-boot-starter')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-data-redis')
redis配置,如下:
redis:
host: 127.0.0.1
#password:
timeout: 1000
database: 0 #默认有16个db(集群模式用hash槽代替),这里配置具体使用的db,默认是0
lettuce:
pool:
max-active: 8 #最大连接数(使用负值表示没有限制) 默认 8
max-wait: -1 #最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-idle: 8 #最大空闲连接 默认 8
min-idle: 0
可以配置需要获取的数据库,账号、密码,连接池等等。
自定义Template
默认情况下,RedisTemplate
只支持字符串,在开发中常需要存入对象,我们可以自定义一个模板,如下:
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisCacheAutoConfiguration {
@Bean
public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Serializable> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
测试上面的template
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ApplicationTests {
private static final Logger log = LoggerFactory.getLogger(ApplicationTests.class);
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate<String, Serializable> redisCacheTemplate;
@Test
public void get() {
//存入字符串
stringRedisTemplate.opsForValue().set("key1", "value1");
final String k1 = stringRedisTemplate.opsForValue().get("key1");
log.info("字符缓存结果 - {}", k1);
String key = "user:1";
User user1 = new User();
user1.setAge(22);
user1.setName("test");
//存入对象
redisCacheTemplate.opsForValue().set(key, user1);
final User user = (User) redisCacheTemplate.opsForValue().get(key);
log.info("对象缓存结果 - {}", user);
}
}
关于redis的操作方式,还有其它几种:
- opsForValue: 对应 String(字符串)
- opsForZSet: 对应 ZSet(有序集合)
- opsForHash: 对应 Hash(哈希)
- opsForList: 对应 List(列表)
- opsForSet: 对应 Set(集合)
学习交流,请加群:64691032