

图片来自于百度图片
NOSQL支持
Spring boot 支持使用NOSQL数据库作为缓存,MongoDB, Neo4J, Elasticsearch, Solr, Redis, Gemfire, Cassandra, Couchbase 与LDAP。今天主要说一说Spring boot对redis的支持。
注意:本文只探讨 spring boot 中如何使用 redis,不探讨 redis 的语法和使用
redis 安装
下载
官网下载地址(只能下载linux版本):https://redis.io/download
github下载地址(可以下载windows版本):https://github.com/MicrosoftArchive/redis/tags
配置
下载后解压到指定目录即可。在根目录找到redis.conf/redis.windows.conf并打开,找到以下内容进行配置
requirepass admin 设置密码
port 6379 设置端口
bind 127.0.0.1 设置绑定的IP
启动
linux:./bin/redis-server etc/redis.conf
windows: redis-server.exe redis.windows.conf
加载redis
配置redis
前面已经提过了很多次spring boot的宗旨是 “约定优于配置”,因此在Spring boot中使用redis同样非常简单,两步搞定。
第一步:maven导入spring boot依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.3</version>
</dependency>
第二步:在application.properties中配置redis相关参数
#################redis基础配置#################
spring.redis.database=5
spring.redis.host=127.0.0.1
spring.redis.password=admin
spring.redis.port=6379
# 连接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
#################redis线程池设置#################
# 连接池中的最大空闲连接,默认值也是8。
spring.redis.pool.max-idle=500
#连接池中的最小空闲连接,默认值也是0。
spring.redis.pool.min-idle=50
# 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
spring.redis.pool.max-active=2000
# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
spring.redis.pool.max-wait=1000
spring boot为大家提供了两种自带的bean对redis进行操作
RedisTemplate<Object,Object> 可以对Redis中key和value都为object类型的数据进行操作,默认会将对象使用JdkSerializationRedisSerializer进行序列化
StringRedisTemplate可以对Redis中key和value都是String类型的数据进行操作
使用redis进行缓存
@RestController
@RequestMapping(value="/redis/")
public class RedisWeb {
@Resource RedisService redisService;
@RequestMapping(value="/save/{name}/{sex}")
public String save(@PathVariable String name , @PathVariable int sex) {
User user = new User();
user.setName(name);
user.setSex(sex);
User user2 = redisService.saveUser(user);
System.out.println(user.toString() + " \r\n "+user2.toString());
return user.getId()+"";
}
@RequestMapping(value="/find/{id}")
public String find(@PathVariable int id) {
User user = redisService.findUserById(id);
System.out.println(user.toString());
return user.toString()+"";
}
}
方式一:沿用每日一学之Spring boot NO.5 Spring boot 缓存中的方式使用@cacheable等注解来使用缓存,service类无需做任何改动,不过上文中的User类必须实现Serializable接口
public class User implements Serializable
方式二:使用Spring boot提供的模板
@Service
public class RedisService {
@Resource Gson gson;
@Resource UserDao userDao;
@Resource
StringRedisTemplate stringRedisTemplate;
public User findUserById(int id) {
User user ;
String json = stringRedisTemplate.opsForValue().get("user_"+id);
if(null == json || "".equals(json)) {
user = userDao.findUser(id);
}else {
user = gson.fromJson(json, User.class);
}
return user;
}
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)
public User saveUser(User user) {
userDao.save(user);
stringRedisTemplate.opsForValue().set("user_"+user.getId(), gson.toJson(user), 10, TimeUnit.MINUTES);
return user;
}
}
以上实例使用的是Spring boot提供的StringRedisTemplate进行redis缓存操作。所有的value均为JSON格式的数据。
Spring boot相关的文章我们已经讲了6篇,利用这6篇的知识,相信大家已经可以利用Spring boot完成大部分的项目的开发。
每日一学之Spring boot系列NO.1认识Spring boot
每日一学之Spring boot系列NO.2 Spring boot配置的变化
每日一学之Spring boot NO.3 Spring boot web
每日一学之Spring boot NO.4 Spring boot JPA
每日一学之Spring boot NO.5 Spring boot 缓存
下期提要
Spring boot的基础知识就讲到这里,如果有什么问题欢迎留言交流。后面我讲介绍 Spring 家族中另一个重要成员 - Spring cloud,不过再介绍cloud之前,先给大家普及普及一些基础概念。我相信大家对分布式这个东西已经不陌生了,甚至现在在动不动就是什么ngix + redis + zookeeper + mq等等,那么这些到底是什么东西?为什么Spring cloud或者说分布式系统会用到这些内容?再认识Spring cloud之前,我们需要先认识它们。
近期,我和活跃在业界的一线技术老司机们共同开通了知识星球,——一个与公众号有别,但又一脉相承的技术圈、认知圈:公众号会一如既往地进行知识分享,知识星球则坚持关注解决问题与动手实践。问题很广、方法很多、思绪很快,希望我们能够在这里驻足思考、交流、沉淀、提升。
你负责认真,我们负责帮你解决问题,让改变发生;欢迎大家扫码加入我们的星球。期待 2018,在程序猿成长的道路上,彼此成就,共同进化!





