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

1. java连接redis

1.1 java连接单机redis

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

 (1)引入依赖

<dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.8.0</version>
        </dependency>
    </dependencies>

(2)测试

public class demo1 {
    public static void main(String[] args) {
        //String数据类型
//        redisString();

        //hash数据类型
//        redisHash();

        //List<列表>数据类型
        Jedis jedis = new Jedis("172.16.7.220",6379);


    }

    private static void redisHash() {
        Jedis jedis = new Jedis("172.16.7.220",6379);
        jedis.select(1);
        jedis.hset("k1","name","syf");

        HashMap<String,String> map = new HashMap<>();
        map.put("name","ljh");
        map.put("age","18");
        map.put("address","shanghai");
        Long k2 = jedis.hset("k2", map);//将哈希表 key 中的字段 field 的值设为 value hget key field: 获取存储在哈希表中指定字段的值。
        Map<String, String> all = jedis.hgetAll("k2");//获取在哈希表中指定 key 的所有字段和值
        Set<String> k21 = jedis.hkeys("k2");//获取所有哈希表中的字段
        Long k1 = jedis.hdel("k2","name");//删除一个或多个哈希表字段
        System.out.println(k1);
    }

    private static void redisString() {
        //把所有关于对redis的操作都封装到一个类中Jedis
        //Jedis jedis = new Jedis();//无参构造函数,默认连接的是本地的redis,而且端口6379
        Jedis jedis = new Jedis("172.16.7.220",6379);
//        System.out.println(jedis.ping());//测试连通性   pong则为连通

        //String类型的redis数据测试
//        String s = jedis.flushAll();     //清空当前redis库的数据
//        String select = jedis.select(0);      //切换redis的数据库
        String set = jedis.set("k1", "v1");   //设置k1,v1
        String mset = jedis.mset("k1","v2","k2","v2","k4","4");  //设置多个k1,v1
        Long setnx = jedis.setnx("k1", "v1");//判断如果k1不存在的添加返回1,存在不添加返回0
        Set<String> keys = jedis.keys("*"); //获取所有的key
        String setex = jedis.setex("k3", 5L, "v3");//设置过期时间
//        Long del = jedis.del("k1", "k2");//删除key
        String k1 = jedis.get("k1");//获取k1的值
        Long k4 = jedis.incr("k4");//对指定的key的value值进行递增。key对应的value必须为整型字符串
        Long decr = jedis.decrBy("k4", 2L);//按照number值进行递增
        System.out.println(decr);
        jedis.close();
    }
}

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

1.2 java通过连接池连接redis

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

public class demo2 {
    public static void main(String[] args) {
        //配置连接对象信息
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMinIdle(5);//设置最小的空闲数
        poolConfig.setMaxIdle(10);//当没人连接redis服务器是,该池子最多能空闲几个连接对象
        poolConfig.setMaxTotal(15);//当有人连接redis服务时,最大能生成多少个连接对象

        //创建连接池对象
        JedisPool jedisPool = new JedisPool(poolConfig,"172.16.7.220",6379);
        long start = System.currentTimeMillis();

        //从连接池获取连接对象
        for (int i = 0; i < 1000; i++) {
            Jedis jedis = jedisPool.getResource();
            jedis.ping();
            jedis.close();
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}

1.3 java连接redis集群

public class demo4 {
    public static void main(String[] args) {
        HostAndPort hostAndPort1=new HostAndPort("172.16.7.220",7001);
        HostAndPort hostAndPort2=new HostAndPort("172.16.7.220",7002);
        HostAndPort hostAndPort3=new HostAndPort("172.16.7.220",7003);
        HostAndPort hostAndPort4=new HostAndPort("172.16.7.220",7004);
        HostAndPort hostAndPort5=new HostAndPort("172.16.7.220",7005);
        HostAndPort hostAndPort6=new HostAndPort("172.16.7.220",7006);
        Set<HostAndPort> sets=new HashSet<>();
        sets.add(hostAndPort1);
        sets.add(hostAndPort2);
        sets.add(hostAndPort3);
        sets.add(hostAndPort4);
        sets.add(hostAndPort5);
        sets.add(hostAndPort6);
        JedisCluster jedisCluster=new JedisCluster(sets);
        jedisCluster.set("k1","v1");
        jedisCluster.set("k2","v2");
        jedisCluster.set("k3","v3");
        jedisCluster.set("k4","v4");
        jedisCluster.set("k5","v5");
        jedisCluster.set("k6","v6");
        jedisCluster.set("k7","v7");

        jedisCluster.close();
    }
}

2. springboot整合redis.

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

(1)创建一个Springboot工程

(2)引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.aaa</groupId>
    <artifactId>redis-springboot-01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>redis-springboot-01</name>
    <description>redis-springboot-01</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

(2)配置信息


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

(3)测试

@SpringBootTest
class RedisSpringboot01ApplicationTests {

    //springboot 创建好该类对象 并交于IOC容器管理
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void contextLoads() {
//        Boolean k1 = redisTemplate.hasKey("k1");//判断k存不存在
//        System.out.println("判断k1是否存在:"+k1);
//        Boolean k2 = redisTemplate.delete("k2");//删除指定的k
//        System.out.println("k2是否删除成功:"+k2);
//        Set<String> keys = redisTemplate.keys("*");//得到所有的k
//        System.out.println(keys);

        //字符串的操作--redisTemplate类中对于每一种数据类型的操作,单独封装了响应的类
        ValueOperations<String, String> forValue = redisTemplate.opsForValue();
//        Integer append = forValue.append("k1", "v5");//追加字符串功能
//        forValue.set("k8","v8");//设置值
//        String k8 = forValue.get("k8");//获取k对应的value
//        Boolean absent = forValue.setIfAbsent("k9", "v9");//如果k不存在则添加,存在则返回false
//        Boolean k9 = forValue.setIfPresent("k9","v100");//如果k存在就覆盖,不存在就添加
//        HashMap<String, String> map = new HashMap<>();
//        map.put("k6","v6");
//        map.put("k7","v7");
//        map.put("k8","v8");
//        map.put("k9","v9");
//        forValue.multiSet(map);
//        ArrayList<String> list = new ArrayList<>();
//        list.add("k6");
//        list.add("k7");
//        list.add("k8");
//        list.add("k9");
//        List<String> strings = forValue.multiGet(list);
//        System.out.println(strings);

        //hash类型操作
        HashOperations<String, Object, Object> opsForHash = redisTemplate.opsForHash();
        Object o = opsForHash.get("k1", "name");//获取字段的值
        opsForHash.put("k3","name","yuhail");//存放数据
        Set<Object> set = opsForHash.keys("k2");//获取k的所有字段
        Map<Object, Object> k2 = opsForHash.entries("k2");//获取所有的字段和value值
        System.out.println(set);
        System.out.println(k2);
        HashMap<String, String> map = new HashMap<>();//批量添加hash数据
        map.put("name","asfd");
        map.put("addr","v7");
        map.put("age","v8");
        map.put("sex","v9");
        opsForHash.putAll("k4",map);

    }

}

猜你喜欢

转载自blog.csdn.net/yhl15736773842/article/details/131518103