SpringBoot整合Jedis

朱雀 2023-10-06 13:28 129阅读 0赞

文章目录

  • Jedis操作String类型
  • Jedis操作Hash类型

我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,在这里,使用jedis来实现redis缓存来达到高效缓存的目的

引入依赖:

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. </dependency>

因为 SpringBoot 内默认引用了jedis版本。
所以我们直接引入jedis 依赖 无需在配置 jedis的版本号了。

application.yml

  1. spring:
  2. redis:
  3. port: 6379
  4. password: ****
  5. host: 192.168.**.**
  6. jedis:
  7. pool:
  8. max-idle: 6 #最大空闲数
  9. max-active: 10 #最大连接数
  10. min-idle: 2 #最小空闲数
  11. timeout: 2000 #连接超时
  12. logging.level.org.springframework.boot.autoconfigure: ERROR

编写Config

  1. package com.example.config;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import redis.clients.jedis.JedisPool;
  8. import redis.clients.jedis.JedisPoolConfig;
  9. @Configuration
  10. public class JedisConfig {
  11. private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
  12. // 将yml文件中的属性给注入进来
  13. @Value("${spring.redis.host}")
  14. private String host;
  15. @Value("${spring.redis.port}")
  16. private int port;
  17. @Value("${spring.redis.password}")
  18. private String password;
  19. @Value("${spring.redis.timeout}")
  20. private int timeout;
  21. @Value("${spring.redis.jedis.pool.max-active}")
  22. private int maxActive;
  23. @Value("${spring.redis.jedis.pool.max-idle}")
  24. private int maxIdle;
  25. @Value("${spring.redis.jedis.pool.min-idle}")
  26. private int minIdle;
  27. @Bean
  28. public JedisPool jedisPool(){
  29. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  30. jedisPoolConfig.setMaxIdle(maxIdle);
  31. jedisPoolConfig.setMinIdle(minIdle);
  32. jedisPoolConfig.setMaxTotal(maxActive);
  33. //创建一个Jedis连接池对象
  34. JedisPool jedisPool=new JedisPool(jedisPoolConfig,host,port,timeout,password);
  35. logger.info("JedisPoll连接成功:"+host+"\t"+port);
  36. return jedisPool;
  37. }
  38. }

封装工具类

  1. package com.example.Utils;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Component;
  4. import redis.clients.jedis.Jedis;
  5. import redis.clients.jedis.JedisPool;
  6. @Component
  7. public class jedisUtils {
  8. @Autowired
  9. private JedisPool jedisPool;
  10. /**
  11. * 获取Jedis资源
  12. */
  13. public Jedis getJedis() {
  14. return jedisPool.getResource();
  15. }
  16. /**
  17. * 释放Jedis连接
  18. */
  19. public void close(Jedis jedis) {
  20. if (jedis != null) {
  21. jedis.close();
  22. }
  23. }
  24. }

Jedis操作String类型

  1. package com.example.service.impl;
  2. import com.example.Utils.jedisUtils;
  3. import com.example.config.JedisConfig;
  4. import com.example.entity.User;
  5. import com.example.service.JedisService;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import redis.clients.jedis.Jedis;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. @Service
  14. public class JedisServiceImpl implements JedisService {
  15. private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
  16. @Autowired
  17. private jedisUtils jedisUtils;
  18. @Override
  19. public String getString(String key) {
  20. Jedis jedis = jedisUtils.getJedis();
  21. String val=null;
  22. if (!jedis.exists(key)){
  23. // 如果redis中没有该key,则去mysql中查找并且将其存在redis中
  24. val="鸭子";
  25. logger.info("从Mysql中查询到了该数据:"+val);
  26. jedis.set(key,val);
  27. logger.info("往redis中存入了该数据,值为:"+val);
  28. }else {
  29. // 从redis中直接读取该key
  30. val= jedis.get(key);
  31. logger.info(key+"存在于redis中,值为:"+val);
  32. }
  33. jedis.close();
  34. return val;
  35. }
  36. }

进行单元测试

  1. @SpringBootTest
  2. public class JedisTests {
  3. @Autowired
  4. private JedisServiceImpl jedisService;
  5. @Test
  6. void t1(){
  7. String val= jedisService.getString("name");
  8. System.out.println(val);
  9. }
  10. }

Jedis操作Hash类型

  1. package com.example.service.impl;
  2. import com.example.Utils.jedisUtils;
  3. import com.example.config.JedisConfig;
  4. import com.example.entity.User;
  5. import com.example.service.JedisService;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import redis.clients.jedis.Jedis;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. @Service
  14. public class JedisServiceImpl implements JedisService {
  15. private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
  16. /**
  17. * 测试 jedis 操作hash类型
  18. * 根据用户ID查询用户信息
  19. * 先判断Redis中是否存在,
  20. * 如果不存在,数据库中查询。并存到Redis中
  21. * 如果存在,直接查询Redis 并返回
  22. * @return
  23. */
  24. @Override
  25. public User selectBy(String id) {
  26. String key="user:id"; //根据规则生成相同规范的key
  27. User user = new User();
  28. Jedis jedis = jedisUtils.getJedis();
  29. if (!jedis.exists(key)){
  30. //mysql中查并存入redis
  31. user.setId("1");
  32. user.setName("老肥");
  33. logger.info("从Mysql中查询到了该用户 信息为:"+user);
  34. Map<String,String> map=new HashMap<>();
  35. map.put("id",user.getId());
  36. map.put("name",user.getName());
  37. jedis.hset(key,map);
  38. logger.info(key+"成功存入Redis:"+user);
  39. }else {
  40. Map<String,String> map= jedis.hgetAll(key);
  41. user.setId(map.get("id"));
  42. user.setName(map.get("name"));
  43. logger.info(key+"\t"+"Redis中查询出来的是:"+map);
  44. }
  45. jedisUtils.close(jedis);
  46. return user;
  47. }
  48. }

进行单元测试

  1. @SpringBootTest
  2. public class JedisTests {
  3. @Autowired
  4. private JedisServiceImpl jedisService;
  5. @Test
  6. void hash(){
  7. User user= jedisService.selectBy("1001");
  8. System.out.println(user);
  9. }
  10. }

发表评论

表情:
评论列表 (有 0 条评论,129人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot整合Jedis

    文章目录 Jedis操作String类型 Jedis操作Hash类型 我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高

    相关 spring整合jedis

    1. 概述: spring封装了redis,使用很方便,总结下对spring与jedis的整合使用 redis 是目前最常用的开源缓存系统之一,它具有丰富的缓存数据结构