SpringBoot(二十四)整合Redis

v阅读目录 v应用场景 v搭建Redis vRedis测试效果 v源码地址 v博客前言 缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。 之前有两篇博文(centos安装Redis 和 Redis五大数据类型的常用操作),分别介绍了Redis的安装和Redis的常用操作。今天主要介绍介绍springboot整合Redis。 回到顶部 v应用场景 现在公司做的项目都偏重论坛/社区/社交类产品,所以对Redis的实用场景主要集中在排行榜,最新/最热内容,Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。还有点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量通常来说比较大,而且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能。 还有很多应用场景,比如分布式会话和分布式锁(分布式锁感兴趣的可以看我之前的一篇文章《Java分布式锁,搞懂分布式锁实现看这篇文章就对了》)等等,总之越来越广泛。 回到顶部 v搭建Redis 1.1. 引入Redis 复制代码 org.springframework.boot spring-boot-starter-data-redis 复制代码 注意redis.clients是我本地调试测试用的,可以忽略。 1.2. 添加RedisCacheConfig 复制代码 package com.demo.Redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import java.util.concurrent.CountDownLatch; /** * Created by toutou on 2019/1/20. */ @Configuration @EnableCaching public class RedisCacheConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(listenerAdapter, new PatternTopic("chat")); return container; } @Bean MessageListenerAdapter listenerAdapter(Receiver receiver) { return new MessageListenerAdapter(receiver, "receiveMessage"); } @Bean Receiver receiver(CountDownLatch latch) { return new Receiver(latch); } @Bean CountDownLatch latch() { return new CountDownLatch(1); } @Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); } public class Receiver { private CountDownLatch latch; @Autowired public Receiver(CountDownLatch latch) { this.latch = latch; } public void receiveMessage(String message) { latch.countDown(); } } } 复制代码 可以按需添加,也可以按需忽略。 1.3. 添加Redis配置,修改application.properties 复制代码 # ----- Redis -------- # # REDIS (RedisProperties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=10.168.11.129 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=5000 复制代码 1.4. 添加Service 复制代码 package com.demo.service; import com.demo.pojo.UserDetails; /** * Created by toutou on 2018/10/15. */ public interface UserService { UserDetails getUserDetailsByUid(int uid); String getUserNameById(Integer uid); void setUserNameById(Integer uid, String userName); } 复制代码 UserServiceImpl 复制代码 package com.demo.service; import com.demo.dao.UserDetailsMapper; import com.demo.dao.UserPositionMapper; import com.demo.pojo.UserDetails; import com.demo.pojo.UserPosition; import com.google.common.base.Strings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; /** * Created by toutou on 2018/10/15. */ @Service public class UserServiceImpl implements UserService{ @Autowired UserDetailsMapper userDetailsMapper; @Autowired UserPositionMapper userPositionMapper; @Autowired StringRedisTemplate template; static final String KEY_USER_INFO__NAME = "com_demo_user_info_007_%s"; public String getUserNameById(Integer uid){ String userName = "未知用户"; try { userName = template.opsForValue().get(String.format(KEY_USER_INFO__NAME, uid)); if (Strings.isNullOrEmpty(userName)) { // Redis中没有就读数据库 UserDetails userDetails = getUserDetailsByUid(uid); if (userDetails != null && !Strings.isNullOrEmpty(userDetails.getCity())) { userName = userDetails.getCity(); } } }catch(Exception e){ System.out.println(e.toString()); } return userName; } public void setUserNameById(Integer uid, String userName){ template.opsForValue().set(String.format(KEY_USER_INFO__NAME, uid), userName); } public UserDetails getUserDetailsByUid(int uid){ return userDetailsMapper.getUserDetailsByUid(uid); } } 复制代码 1.5. 添加RedisController 复制代码 package com.demo.controller; import com.demo.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import redis.clients.jedis.Jedis; /** * Created by toutou on 2019/1/20. */ @RestController @Slf4j public class RedisController { @Autowired UserService userService; @RequestMapping(value = "/getusernamebyid") public String getUserNameById(Integer uid) { return userService.getUserNameById(uid); } @RequestMapping(value = "/setusernamebyid") public String setUserNameById(Integer uid, String uname) { userService.setUserNameById(uid, uname); return "设置成功"; } @RequestMapping(value = "/jedistest") public String jedisTest(){ // 创建一个jedis对象 Jedis jedis = new Jedis("ip", 6379); // 直接调用jedis对象的方法,方法名称和redis的命令一致 jedis.set("key1", "test01"); String key1 = jedis.get("key1"); System.out.println(key1 + " " + key1); // 关闭jedis jedis.close(); return key1; } } 复制代码 注意jedisTest是我本地调试测试用的,可以忽略。 回到顶部 vRedis测试效果 SpringBoot(二十四)整合Redis SpringBoot(二十四)整合Redis 回到顶部 v源码地址 https://github.com/toutouge/javademo/tree/master/hellospringboot 您可以考虑给头头来个小小的打赏以资鼓励,您的肯定将是我最大的动力。thx. 微信打赏 微信账号 i7toutou 支付宝打赏 支付宝账号 datou431@qq.com 作  者:请叫我头头哥 出  处:http://www.cnblogs.com/toutou/ 关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教! 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力! https://www.cnblogs.com/toutou/p/spring_boot_redis.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信