暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一学之Spring boot NO.6 Spring boot redis

程序员的日记本 2018-05-03
145

                        


图片来自于百度图片


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,在程序猿成长的道路上,彼此成就,共同进化!

文章转载自程序员的日记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论