当前位置:   article > 正文

springboot整合jedis

springboot整合jedis

在开始整合之间先来回答三个问题

1、什么是jedis

2、它解决了什么问题

3、如何使用

基本上所有的技术都可以用这三问快速入门

答1: jedis集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。

答2:jedis提供了更为方便的redis操作,类比mybatis、hibernate等框架合数据库直接的关系

答3 : 本文的主题,我们通过springboot来整合jedis

第一步:添加依赖,如下是我的整个pom.xml  建议github查看jedis官网文档获取最近版本 https://github.com/xetorthio/jedis

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.7.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.eqxiu</groupId>
  12. <artifactId>eqxiu-hdh5-rmq</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>eqxiu-hdh5-rmq</name>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <!-- 引入jedis jar包 -->
  24. <dependency>
  25. <groupId>redis.clients</groupId>
  26. <artifactId>jedis</artifactId>
  27. <version>2.9.0</version>
  28. </dependency>
  29. </dependencies>
  30. <build>
  31. <plugins>
  32. <plugin>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-maven-plugin</artifactId>
  35. </plugin>
  36. </plugins>
  37. </build>
  38. </project>

第二步 配置文件添加配置

  1. redis.server.host=localhost
  2. redis.server.port=6379
  3. redis.server.password=
  4. redis.server.timeOut=5000 #连接超时时间
  5. redis.server.maxIdle=50 #最小空闲数 空闲数依据访问缓存的频率设置,如果有较高并发建议设置大些,避免反复销毁创建连接,反之设置小些
  6. redis.server.maxWaitMillis=500 #获取连接最大等待时间,建议不要设置太长时间
  7. redis.server.maxTotal=500 #最大连接数

第三步 通过springboot注解方式创建JedisPool, 代码如下,其中RedisUtil是我提供的工具类,用来封装一些jedis常用操作的,第四步会介绍到

  1. package com.eqxiu.hd.config;
  2. import com.eqxiu.hd.util.RedisUtil;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import redis.clients.jedis.JedisPool;
  9. import redis.clients.jedis.JedisPoolConfig;
  10. @Configuration
  11. @EnableConfigurationProperties(JedisConfig.JedisProperties.class)
  12. public class JedisConfig {
  13. @Autowired
  14. private JedisProperties prop;
  15. @Bean
  16. public JedisPool jedisPool() {
  17. JedisPoolConfig config = new JedisPoolConfig();
  18. config.setMaxTotal(prop.getMaxTotal());
  19. config.setMaxIdle(prop.getMaxIdle());
  20. config.setMaxWaitMillis(prop.getMaxWaitMillis());
  21. JedisPool jedisPool;
  22. if("".equals(prop.getPassword())){
  23. jedisPool = new JedisPool(config, prop.getHost(), prop.getPort(), prop.getTimeOut());
  24. }else{
  25. jedisPool = new JedisPool(config, prop.getHost(), prop.getPort(), prop.getTimeOut(), prop.getPassword());
  26. }
  27. // 此处为RedisUtil设置了jedisPool
  28. RedisUtil.setJedisPool(jedisPool);
  29. return jedisPool;
  30. }
  31. @ConfigurationProperties(prefix = JedisProperties.JEDIS_PREFIX)
  32. class JedisProperties {
  33. public static final String JEDIS_PREFIX = "redis.server";
  34. private String host;
  35. private int port;
  36. private String password;
  37. private int maxTotal;
  38. private int maxIdle;
  39. private int maxWaitMillis;
  40. private int timeOut;
  41. public String getHost() {
  42. return host;
  43. }
  44. public void setHost(String host) {
  45. this.host = host;
  46. }
  47. public int getPort() {
  48. return port;
  49. }
  50. public void setPort(int port) {
  51. this.port = port;
  52. }
  53. public String getPassword() {
  54. return password;
  55. }
  56. public void setPassword(String password) {
  57. this.password = password;
  58. }
  59. public int getMaxTotal() {
  60. return maxTotal;
  61. }
  62. public void setMaxTotal(int maxTotal) {
  63. this.maxTotal = maxTotal;
  64. }
  65. public int getMaxIdle() {
  66. return maxIdle;
  67. }
  68. public void setMaxIdle(int maxIdle) {
  69. this.maxIdle = maxIdle;
  70. }
  71. public int getMaxWaitMillis() {
  72. return maxWaitMillis;
  73. }
  74. public void setMaxWaitMillis(int maxWaitMillis) {
  75. this.maxWaitMillis = maxWaitMillis;
  76. }
  77. public int getTimeOut() {
  78. return timeOut;
  79. }
  80. public void setTimeOut(int timeOut) {
  81. this.timeOut = timeOut;
  82. }
  83. }
  84. }

第四步 编写RedisUtil封装常用操作,这里只些了最简单的两个方法。后续需要的操作都可以写到这里。

  1. package com.eqxiu.hd.util;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import redis.clients.jedis.Jedis;
  5. import redis.clients.jedis.JedisPool;
  6. public class RedisUtil {
  7. private static Logger logger = LoggerFactory.getLogger(RedisUtil.class);
  8. private static JedisPool jedisPool;
  9. public static void setJedisPool(JedisPool jedisPool) {
  10. RedisUtil.jedisPool = jedisPool;
  11. }
  12. public static String redisGet(String key) {
  13. Jedis jedis = null;
  14. try {
  15. jedis = jedisPool.getResource();
  16. return jedis.get(key);
  17. } catch (Exception e) {
  18. logger.error(e.getMessage(), e);
  19. } finally {
  20. close(jedis);
  21. }
  22. return null;
  23. }
  24. public static void redisPut(String key, String val) {
  25. Jedis jedis = null;
  26. try {
  27. jedis = jedisPool.getResource();
  28. jedis.set(key, val);
  29. } catch (Exception e) {
  30. logger.error(e.getMessage(), e);
  31. } finally {
  32. close(jedis);
  33. }
  34. }
  35. private static void close(Jedis jedis) {
  36. if (jedis != null) {
  37. jedis.close();
  38. }
  39. }
  40. }

第五步, 写个controller测试下,简单粗暴了点,但是测试结果没问题,能用,本文所有代码真实可用

  1. @RequestMapping(value={"/redis"})
  2. @ResponseBody
  3. public String redis() {
  4. RedisUtil.redisPut("superbing09", "你好!是、啊");
  5. return RedisUtil.redisGet("superbing09");
  6. }

其实有个问题 RedisUtil被定义为工具类,对外提供的方法必须是static的,这里为了注入JedisPool对象提供了public的set方法,这样不太好,那么问题来了,你有什么好办法可以分享给我嘛?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/160004
推荐阅读
相关标签
  

闽ICP备14008679号