快速入门Redis系列(3)——Redis的JavaAPI操作(附带练习)

举报
大数据梦想家 发表于 2021/09/28 23:26:52 2021/09/28
【摘要】         作为快速入门Redis系列的第三篇博客,本篇为大家带来的是Redis的JavaAPI操作。  &...

        作为快速入门Redis系列的第三篇博客,本篇为大家带来的是Redis的JavaAPI操作

        码字不易,先赞后看!

在这里插入图片描述


Redis的JavaAPI操作

        看完了上一篇博客,相信大家对于Redis的数据类型有了初步的了解。事实上,Redis不仅可以通过命令行进行操作,同时Redis也可以通过JavaAPI进行操作。我们可以通过使用javaAPI来对Redis数据库当中的各种数据类型进行操作。
        

<1> 创建maven工程并导入jar包

<dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>
 </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!--    <verbal>true</verbal>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

<2> 连接以及关闭redis客户端

private JedisPool jedisPool;
private JedisPoolConfig config;

/**
* 连接Redis连接池
*/
@BeforeTest
public void redisConnectionPool(){

    // 初始化配置文件
    config = new JedisPoolConfig();
    // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值是8
    config.setMaxIdle(10);
    // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
    config.setMaxWaitMillis(3000);
    // 连接实例的最大连接数
    config.setMaxTotal(50);
    config.setMinIdle(5);
    // 设置连接点所处的节点,以及端口号
    jedisPool = new JedisPool(config, "node01", 6379);

    }

/**
  * 关闭连接池
*/
@AfterTest
public void closePool(){
    jedisPool.close();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

<3> Redis的JavaAPI操作

① 操作string类型数据

/**
 * 添加string类型数据
 */
@Test
public void addStr(){
    Jedis resource = jedisPool.getResource();
    //添加
    resource.set("jediskey", "jedisvalue");
    //查询
    String jediskey = resource.get("jediskey");
    System.out.println(jediskey);
    //修改
    resource.set("jediskey","jedisvalueUpdate");
    //删除
    resource.del("jediskey");
    //实现整型数据的增长操作
    resource.incr("jincr");
    resource.incrBy("jincr",3);
    //查询增长后的结果
    String jincr = resource.get("jincr");
    System.out.println(jincr);
    //关闭资源
    resource.close();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

        

② 操作hash列表类型数据

/**
 * 操作hash类型数据
 */
@Test
public void hashOperate(){
    Jedis resource = jedisPool.getResource();
    //添加数据
    resource.hset("jhsetkey","jmapkey","jmapvalue");
    resource.hset("jhsetkey","jmapkey2","jmapvalue2");
    //获取所有数据
    Map<String, String> jhsetkey = resource.hgetAll("jhsetkey");
    for (String s : jhsetkey.keySet()) {
        System.out.println(s);
    }
    //修改数据
    resource.hset("jhsetkey","jmapkey2","jmapvalueupdate2");
    Map<String, String> jhsetkey2 = resource.hgetAll("jhsetkey");
    for (String s : jhsetkey2.keySet()) {
        System.out.println("修改数据打印"+s);
    }
    //删除数据
    resource.del("jhsetkey");
    //获取所有的键所对应值里的键值
    Set<String> jhsetkey1 = resource.keys("jhsetkey");
    for (String result : jhsetkey1) {
        System.out.println(result);
    }
    //关闭资源
    resource.close();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

③ 操作list类型数据

/**
 * 操作list类型的数据
 */
@Test
public void listOperate(){
    Jedis resource = jedisPool.getResource();
    //从左边插入元素
    resource.lpush("listkey","listvalue1","listvalue1","listvalue2");

    //从右边移除元素
    resource.rpop("listkey");
    //获取所有值
    List<String> listkey = resource.lrange("listkey", 0, -1);
    for (String s : listkey) {
        System.out.println(s);
    }
    //关闭资源
    resource.close();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

④ 操作set类型的数据

/**
 * set类型数据操作
 */
@Test
public void setOperate(){
    Jedis resource = jedisPool.getResource();
    //添加数据
    resource.sadd("setkey", "setvalue1", "setvalue1", "setvalue2", "setvalue3");
    //查询数据
    Set<String> setkey = resource.smembers("setkey");
    for (String s : setkey) {
        System.out.println(s);
    }
    //移除掉一个数据
    resource.srem("setkey","setvalue3");
    // 关闭资源
    resource.close();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

<4>附赠练习

        上面的示例只展示了Redis的JavaAPI一些常用的情况。为了巩固大家的基础,提升大家的能力,下面博主准备了两道题供大家练习,并在文末附上了答案,仅供参考~

练习一:
使用List实现以下功能:
1、创建两个list 名字分别为ltest1 ltest2.
2、Ltest1 从左到右为1 2 3 4 5 6 7 8 9,ltest2 从左到右为 f e d c b a
3、在Ltest1的3 左边插入3333
4、在6右边插入6666
5、通过索引查询Ltest2 索引为3的数据
6、将ltest2的e 修改为EEE
7、只保留ltest2的EEE d c b
8、移除ltest1右边一个数据并插入ltest2的左边

练习二:
使用Set实现以下功能:
1、添加set 集合 setdemo1(aa,bb,cc,dd,ee,ff) , setdemo2(11,22,33,dd,ee,ff)
2、将两个集合的交集写入setdemo3
3、将两个集合的并集写入到setdemo4
4、将setdemo2集合与setdemo1集合的差集写入setdemo5
5、将setdemo2内的11 移动到setdemo1内
6、删除setdemo1内的bb

参考答案见下方
在这里插入图片描述

/**
 * @Auther: Alice菌
 * @Date: 2020/3/13 20:31
 * @Description: 流年笑掷 未来可期。以梦为马,不负韶华!
 */
public class Demo03 {

    private JedisPool jedisPool;

    private JedisPoolConfig config;


    /**
     * 连接Redis连接池
     */
    @BeforeTest
    public void redisConnectionPool(){

        // 初始化配置文件
        config = new JedisPoolConfig();
        // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值是8
        config.setMaxIdle(10);
        // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
        config.setMaxWaitMillis(3000);
        // 连接实例的最大连接数
        config.setMaxTotal(50);
        config.setMinIdle(5);
        jedisPool = new JedisPool(config, "node01", 6379);

    }

    /**
     * 关闭资源
     */
    @AfterTest
    public void closePool(){
        jedisPool.close();
    }

    /**
     * 测试题1
     */
    @Test
    public void  test01(){

        Jedis resource = jedisPool.getResource();
        // 1.创建两个list 名字分别为ltest1,ltest2
        // 2.Ltest1 从左到右为 1 2 3 4 5 6 7 8 9
        resource.lpush("ltest1","987654321");
        // Ltest2 从左到右为 f e d c b a
        resource.lpush("ltest2","abcdef");
        // 34.在Ltest的3 左边插入3333,在 6 右边插入 6666
        resource.linsert("ltest1", BinaryClient.LIST_POSITION.BEFORE,"3","3333");
        resource.linsert("ltest1", BinaryClient.LIST_POSITION.AFTER,"6","6666");
        // 5.通过索引查询ltest2 索引为3 的数据
        String data1 = resource.lindex("ltest2", 3);
        System.out.println("ltest2表中索引为3的数据为:"+data1);
        // 6.将ltest2的e 修改为 EEE
        resource.lset("ltest2",1,"EEE");
        // 7.只保留ltest2的EEE d  c b
        resource.ltrim("ltest2",1,4);
        // 8.移除ltest1右边一个数据并插入ltest2的左边
        resource.rpoplpush("ltest1","ltest2");

        resource.close();
    }


    /**
     * 测试题2
     */
    @Test
    public void test2(){

        Jedis resource = jedisPool.getResource();
        // 1. 添加set 集合 setdemo1(aa,bb,cc,dd,ee,ff)    setdemo2(11,22,33,dd,ee,ff)
        resource.sadd("setdemo1","aa","bb","cc","dd","ee","ff");
        resource.sadd("setdemo2","11","22","33","dd","ee","ff");
        // 2. 将两个集合的交集写入到setdemo3
        resource.sinter("setdemo3","setdemo1","setdemo2");
        // 3. 将两个集合的并集写入到setdemo4
        resource.sunion("setdemo4","setdemo1","setdemo2");
        // 4. 将setdemo2集合与setdemo1集合的差集写入到setdemo5
        resource.sdiffstore("setdemo5","setdemo2","setdemo1");
        // 5. 将setdemo2内的11 移动到setdemo1内
        resource.smove("setdemo2","setdemo1","11");
        // 6. 删除setdemo1内的bb
        resource.srem("setdemo1","bb");

        resource.close();

    }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

        好了,本次的分享内容就到这里,受益或感兴趣的朋友记得点赞加关注,下一篇博客将为大家介绍Redis的持久化方案!敬请期待|ू・ω・` )
        
在这里插入图片描述

文章来源: alice.blog.csdn.net,作者:大数据梦想家,版权归原作者所有,如需转载,请联系作者。

原文链接:alice.blog.csdn.net/article/details/104854435

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。