当前位置:   article > 正文

JAVA如何连接redis以及Springboot整合redis详解_java 连接redis

java 连接redis

1. java连接redis

1.1 java连接单机redis

首先创建一个普通的maven工程

 (1)引入依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>redis.clients</groupId>
  4. <artifactId>jedis</artifactId>
  5. <version>3.8.0</version>
  6. </dependency>
  7. </dependencies>

(2)测试

  1. public class demo1 {
  2. public static void main(String[] args) {
  3. //String数据类型
  4. // redisString();
  5. //hash数据类型
  6. // redisHash();
  7. //List<列表>数据类型
  8. Jedis jedis = new Jedis("172.16.7.220",6379);
  9. }
  10. private static void redisHash() {
  11. Jedis jedis = new Jedis("172.16.7.220",6379);
  12. jedis.select(1);
  13. jedis.hset("k1","name","syf");
  14. HashMap<String,String> map = new HashMap<>();
  15. map.put("name","ljh");
  16. map.put("age","18");
  17. map.put("address","shanghai");
  18. Long k2 = jedis.hset("k2", map);//将哈希表 key 中的字段 field 的值设为 value hget key field: 获取存储在哈希表中指定字段的值。
  19. Map<String, String> all = jedis.hgetAll("k2");//获取在哈希表中指定 key 的所有字段和值
  20. Set<String> k21 = jedis.hkeys("k2");//获取所有哈希表中的字段
  21. Long k1 = jedis.hdel("k2","name");//删除一个或多个哈希表字段
  22. System.out.println(k1);
  23. }
  24. private static void redisString() {
  25. //把所有关于对redis的操作都封装到一个类中Jedis
  26. //Jedis jedis = new Jedis();//无参构造函数,默认连接的是本地的redis,而且端口6379
  27. Jedis jedis = new Jedis("172.16.7.220",6379);
  28. // System.out.println(jedis.ping());//测试连通性 pong则为连通
  29. //String类型的redis数据测试
  30. // String s = jedis.flushAll(); //清空当前redis库的数据
  31. // String select = jedis.select(0); //切换redis的数据库
  32. String set = jedis.set("k1", "v1"); //设置k1,v1
  33. String mset = jedis.mset("k1","v2","k2","v2","k4","4"); //设置多个k1,v1
  34. Long setnx = jedis.setnx("k1", "v1");//判断如果k1不存在的添加返回1,存在不添加返回0
  35. Set<String> keys = jedis.keys("*"); //获取所有的key
  36. String setex = jedis.setex("k3", 5L, "v3");//设置过期时间
  37. // Long del = jedis.del("k1", "k2");//删除key
  38. String k1 = jedis.get("k1");//获取k1的值
  39. Long k4 = jedis.incr("k4");//对指定的key的value值进行递增。key对应的value必须为整型字符串
  40. Long decr = jedis.decrBy("k4", 2L);//按照number值进行递增
  41. System.out.println(decr);
  42. jedis.close();
  43. }
  44. }

特点: Jedis把对redis的操作都封装到Jedis类对象中了,而每个命令封装了一个对应的方法。

1.2 java通过连接池连接redis

连接池的作用: 减少频繁创建和销毁连接对象。

  1. public class demo2 {
  2. public static void main(String[] args) {
  3. //配置连接对象信息
  4. JedisPoolConfig poolConfig = new JedisPoolConfig();
  5. poolConfig.setMinIdle(5);//设置最小的空闲数
  6. poolConfig.setMaxIdle(10);//当没人连接redis服务器是,该池子最多能空闲几个连接对象
  7. poolConfig.setMaxTotal(15);//当有人连接redis服务时,最大能生成多少个连接对象
  8. //创建连接池对象
  9. JedisPool jedisPool = new JedisPool(poolConfig,"172.16.7.220",6379);
  10. long start = System.currentTimeMillis();
  11. //从连接池获取连接对象
  12. for (int i = 0; i < 1000; i++) {
  13. Jedis jedis = jedisPool.getResource();
  14. jedis.ping();
  15. jedis.close();
  16. }
  17. long end = System.currentTimeMillis();
  18. System.out.println(end-start);
  19. }
  20. }

1.3 java连接redis集群

  1. public class demo4 {
  2. public static void main(String[] args) {
  3. HostAndPort hostAndPort1=new HostAndPort("172.16.7.220",7001);
  4. HostAndPort hostAndPort2=new HostAndPort("172.16.7.220",7002);
  5. HostAndPort hostAndPort3=new HostAndPort("172.16.7.220",7003);
  6. HostAndPort hostAndPort4=new HostAndPort("172.16.7.220",7004);
  7. HostAndPort hostAndPort5=new HostAndPort("172.16.7.220",7005);
  8. HostAndPort hostAndPort6=new HostAndPort("172.16.7.220",7006);
  9. Set<HostAndPort> sets=new HashSet<>();
  10. sets.add(hostAndPort1);
  11. sets.add(hostAndPort2);
  12. sets.add(hostAndPort3);
  13. sets.add(hostAndPort4);
  14. sets.add(hostAndPort5);
  15. sets.add(hostAndPort6);
  16. JedisCluster jedisCluster=new JedisCluster(sets);
  17. jedisCluster.set("k1","v1");
  18. jedisCluster.set("k2","v2");
  19. jedisCluster.set("k3","v3");
  20. jedisCluster.set("k4","v4");
  21. jedisCluster.set("k5","v5");
  22. jedisCluster.set("k6","v6");
  23. jedisCluster.set("k7","v7");
  24. jedisCluster.close();
  25. }
  26. }

2. springboot整合redis.

springboot对redis的操作封装到模板类中RedisTemplate和StringRedisTemplate。StringRedisTemplate是Redistemplate的子类,它只能往redis中存放字符串类型。

(1)创建一个Springboot工程

(2)引入依赖

  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.3.12.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.aaa</groupId>
  12. <artifactId>redis-springboot-01</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>redis-springboot-01</name>
  15. <description>redis-springboot-01</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-data-redis</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-web</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.projectlombok</groupId>
  30. <artifactId>lombok</artifactId>
  31. <optional>true</optional>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-test</artifactId>
  36. <scope>test</scope>
  37. </dependency>
  38. </dependencies>
  39. <build>
  40. <plugins>
  41. <plugin>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-maven-plugin</artifactId>
  44. <configuration>
  45. <excludes>
  46. <exclude>
  47. <groupId>org.projectlombok</groupId>
  48. <artifactId>lombok</artifactId>
  49. </exclude>
  50. </excludes>
  51. </configuration>
  52. </plugin>
  53. </plugins>
  54. </build>
  55. </project>

(2)配置信息

  1. #redis的配置信息--单机
  2. spring.redis.host=192.168.223.147
  3. spring.redis.port=6379

(3)测试

  1. @SpringBootTest
  2. class RedisSpringboot01ApplicationTests {
  3. //springboot 创建好该类对象 并交于IOC容器管理
  4. @Autowired
  5. private StringRedisTemplate redisTemplate;
  6. @Test
  7. void contextLoads() {
  8. // Boolean k1 = redisTemplate.hasKey("k1");//判断k存不存在
  9. // System.out.println("判断k1是否存在:"+k1);
  10. // Boolean k2 = redisTemplate.delete("k2");//删除指定的k
  11. // System.out.println("k2是否删除成功:"+k2);
  12. // Set<String> keys = redisTemplate.keys("*");//得到所有的k
  13. // System.out.println(keys);
  14. //字符串的操作--redisTemplate类中对于每一种数据类型的操作,单独封装了响应的类
  15. ValueOperations<String, String> forValue = redisTemplate.opsForValue();
  16. // Integer append = forValue.append("k1", "v5");//追加字符串功能
  17. // forValue.set("k8","v8");//设置值
  18. // String k8 = forValue.get("k8");//获取k对应的value
  19. // Boolean absent = forValue.setIfAbsent("k9", "v9");//如果k不存在则添加,存在则返回false
  20. // Boolean k9 = forValue.setIfPresent("k9","v100");//如果k存在就覆盖,不存在就添加
  21. // HashMap<String, String> map = new HashMap<>();
  22. // map.put("k6","v6");
  23. // map.put("k7","v7");
  24. // map.put("k8","v8");
  25. // map.put("k9","v9");
  26. // forValue.multiSet(map);
  27. // ArrayList<String> list = new ArrayList<>();
  28. // list.add("k6");
  29. // list.add("k7");
  30. // list.add("k8");
  31. // list.add("k9");
  32. // List<String> strings = forValue.multiGet(list);
  33. // System.out.println(strings);
  34. //hash类型操作
  35. HashOperations<String, Object, Object> opsForHash = redisTemplate.opsForHash();
  36. Object o = opsForHash.get("k1", "name");//获取字段的值
  37. opsForHash.put("k3","name","yuhail");//存放数据
  38. Set<Object> set = opsForHash.keys("k2");//获取k的所有字段
  39. Map<Object, Object> k2 = opsForHash.entries("k2");//获取所有的字段和value值
  40. System.out.println(set);
  41. System.out.println(k2);
  42. HashMap<String, String> map = new HashMap<>();//批量添加hash数据
  43. map.put("name","asfd");
  44. map.put("addr","v7");
  45. map.put("age","v8");
  46. map.put("sex","v9");
  47. opsForHash.putAll("k4",map);
  48. }
  49. }

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

闽ICP备14008679号