SpringBoot整合Jedis

SpringBoot 內默認引用了jedis版本。所以我們直接引入jedis 依賴 無需在配置 jedis的版本號了。

一、引入jar包,pom文件

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

二、配置文件application,配置redis

#設置服務啓動的端口號默認8080
server.port=8089
#設置請求發生錯誤時顯示的頁面
server.error.path=/error

#redis
spring.redis.database=0
spring.redis.host=
spring.redis.password=
spring.redis.port=6379
# 數據庫連接超時時間,2.0 中該參數的類型爲Duration,這裏在配置的時候需要指明單位
spring.redis.timeout=5000

# 連接池配置,2.0中直接使用jedis或者lettuce配置連接池
# 最大活躍連接數,負數爲不限制
spring.redis.jedis.pool.max-active=8
# 等待可用連接的最大時間,負數爲不限制
spring.redis.jedis.pool.max-wait=-1
# 最大空閒連接數
spring.redis.jedis.pool.max-idle=8
# 最小空閒連接數
spring.redis.jedis.pool.min-idle=0

三、JedisConfig配置類

@Configuration
@Slf4j
public class JedisConfig {
    //private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxActive;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;
    @Bean
    public JedisPool jedisPool(){
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxActive);
        // 是否啓用pool的jmx管理功能, 默認true
        jedisPoolConfig.setJmxEnabled(true);

        JedisPool jedisPool=new JedisPool(jedisPoolConfig,host,port,timeout,password);
        log.info("JedisPool連接成功:"+host+":"+port);
        return jedisPool;
    }
}

測試JedisConfig配置成功

@SpringBootTest
public class JedisConfigTest {
    @Autowired
    private JedisPool jedisPool;
    @Test
    public void conextLoads() {
        System.out.println(jedisPool);
        Jedis jedis = jedisPool.getResource();
        jedis.set("name1","zjw");
        String name = jedis.get("name1");
        System.out.println(name);
        jedis.close();
    }
}

四、工具類,JedisUtils,可以封裝一些redis的操作,這裏面只有獲取資源和釋放連接

@Component
public class JedisUtils {
    @Autowired
    private JedisPool jedisPool;

    /*獲取Jedis資源*/
    public Jedis getJedis() {
        return jedisPool.getResource();
    }
    /*釋放Jedis連接*/
    public void close(Jedis jedis) {
        if(jedis!=null) {
            jedis.close();
        }
    }
}

五、具體實例JedisServiceImpl.java

@Service
@Log
public class JedisServiceImpl {
    @Autowired
    private JedisUtils jedisUtils;

    /*
    測試String
     */
    public String getString(String key) {
        Jedis jedis = jedisUtils.getJedis();
        String val = null;
        if (!jedis.exists(key)) {
            val = "黎明的光和影";
            log.info(key + "在MYSQL數據庫中進行查詢的結果是:" + val);
            jedis.set(key, val);
            log.info(key + "存入Redis中的值是:" + val);
        } else {
            val = jedis.get(key);
            log.info(key + "是在Redis中查詢的數據。值是:" + val);
        }
        jedisUtils.close(jedis); //釋放資源
        return val;
    }

    /**
     * 測試 jedis 操作hash類型
     * * 根據用戶ID查詢用戶信息
     * * 先判斷Redis中是否存在,
     * * 如果不存在,數據庫中查詢。並存到Redis中
     * * 如果存在,直接查詢Redis 並返回
     */
    public User selectBy(String id) {
        String key = "user:"+id; //根據規則生成相同規範的key
        User user = new User();
        Jedis jedis = jedisUtils.getJedis();
        if (!jedis.exists(key)) { //數據庫中查詢,並進行存
            user.setId(id);
            user.setName("RedisHash");
            user.setAge(22);
            log.info("數據庫中查詢的用戶信息是:" + user);
            Map<String, String> map = new HashMap();
            map.put("id", user.getId());
            map.put("name", user.getName());
            map.put("age",user.getAge().toString());
            jedis.hset(key, map);
            log.info(key + "成功存入Redis:" + user);
        } else {
            Map<String, String> map = jedis.hgetAll(key);
            user.setId(map.get("id"));
            user.setName(map.get("name"));
            System.out.println("map中的age"+map.get("age"));
            user.setAge(Integer.valueOf(map.get("age")));
            log.info(key + "Redis中查詢出來的是:" + map);
        }
        Map<String, String> userVal = jedis.hgetAll(key);
        System.out.println(userVal+"mapUserVal");
        jedisUtils.close(jedis);
        return user;
    }

    /*
    redis數據庫存儲
     */
    public String select() {
        Jedis jedis = jedisUtils.getJedis();
        return "zhangjingwen";
    }
}

測試:

@SpringBootTest
public class JedisUtilsTest {
    @Autowired
    private JedisServiceImpl jedisService;

    @Test
    public void t1() {
        String val = jedisService.getString("name1");
        String val2= jedisService.getString("age");
        String val3= jedisService.getString("name");
        System.out.println(val+ val2+val3);
    }
    @Test
    public void test() {
        User user = jedisService.selectBy("2");
        System.out.println(user);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章