【Redis】 Java操作Redis客户端命令——基础操作与字符串操作

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 【Redis】 Java操作Redis客户端命令——基础操作与字符串操作

🍃前言

本篇文章重点是,介绍一些Java 操作 Redis 的常见命令的使用。

总体分为以下6个部分进行介绍:

  1. 基础操作
  2. 字符串操作
  3. 列表操作
  4. 哈希表操作
  5. 集合操作
  6. 有序集合操作

本篇演示以下两种用法:

  1. 基础操作
  2. 字符串操作

🎍基础操作

准备工作代码如下:

public class EssentialDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()){
            jedis.flushAll();
            // 在此处调用测试代码
            //testGetAndSet(jedis);
            //testExistsAndDel(jedis);
            //testKeys(jedis);
            //testExpireAndTtl(jedis);
            //testType(jedis);
        }
    }
}

这里博主只展示如何使用 Java 操作完成这些命令操作,如果有小伙伴对这部分命令作用不了解,可以参考博主写的【Redis】 常见的基本全局命令

🚩get 和 set

  • get:获取 key 所对应的 value,若当前key 不存在,则获取为null
  • set:设置当前 key 与 value

这两个命令本应该属于字符串操作,但是由于后面基本操作都离不开这两个操作,所以这里先行进行介绍一下。

public static void testGetAndSet(Jedis jedis) {
    System.out.println("测试 get 和 set");
    jedis.set("k1","111");
    jedis.set("k2","222");
    String result = jedis.get("k1");
    System.out.println("k1:" + result);
    result = jedis.get("k2");
    System.out.println("k2:" + result);
    result = jedis.get("k3");
    System.out.println("k3:" + result);
}

执行结果如下:

🚩exists 和 del

  • exists: 判断当前 key 是否存在
  • del: 删除当前key(可以为多个)可以,返回删除 key 的个数

代码示例如下:

public static void testExistsAndDel(Jedis jedis) {
    System.out.println("测试 exists 和 del");
    jedis.set("k1","111");
    jedis.set("k2","222");
    jedis.set("k3","333");
    boolean ret = jedis.exists("k1");
    System.out.println("k1 : " + ret);
    long n = jedis.del("k1");
    ret = jedis.exists("k1");
    System.out.println("n : " + n);
    System.out.println("k1 : " + ret);
    n = jedis.del("k2","k3");
    System.out.println("n : " + n);
    ret = jedis.exists("k2");
    System.out.println("k2 : " + ret);
    ret = jedis.exists("k3");
    System.out.println("k3 : " + ret);
}

执行情况如下:

🚩keys

  • keys:获取相应的key,可以使用通配符,返回一个集合

代码示例如下:

public static void testKeys(Jedis jedis) {
    System.out.println("测试 keys");
    jedis.set("k1","11");
    jedis.set("k2","22");
    jedis.set("k3","33");
    Set<String> arrayList = jedis.keys("*");
    System.out.println("* : " + arrayList);
}

执行结果如下:

🚩expire 和 ttl

  • expire:设置过期时间,使⽤ setex 直接设置 key 的同时指定过期时间. 单位为秒
  • ttl:显示剩余时间

代码示例如下:

public static void testExpireAndTtl(Jedis jedis)  {
    System.out.println("测试 expire 和 ttl");
    jedis.setex("key",2,"value");
    long ttl = 1;
    while (ttl > 0) {
        try {
            Thread.sleep(100);
            ttl = jedis.ttl("key");
            System.out.println("剩余:" + ttl);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

执行结果如下:

🚩type

  • type:显示当前key所对应value的类型

代码示例如下:

public static void testType(Jedis jedis) {
    jedis.set("key1", "value");
    System.out.println(jedis.type("key1"));
    jedis.lpush("key2", "a", "b", "c");
    System.out.println(jedis.type("key2"));
    jedis.hset("key3", "name", "zhangsan");
    System.out.println(jedis.type("key3"));
    jedis.sadd("key4", "111", "222", "333");
    System.out.println(jedis.type("key4"));
    jedis.zadd("key5", 1, "aaa");
    System.out.println(jedis.type("key5"));
}

执行结果如下:

🍀字符串操作

除去上面所介绍的 get 与 set ,还有以下操作。

首先准备工作代码如下:

public class StringDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
            try (Jedis jedis = jedisPool.getResource()){
              jedis.flushAll();
              //在此处调用测试代码
              //testMsetAndMget(jedis);
              //testAppend(jedis);
              //testSetrangeAndGetrange(jedis);
              //testSetnx(jedis);
              //testIncrDecr(jedis);
              //testIncrbyDecrby(jedis);
        }
    }
}

这里博主只展示如何使用 Java 操作完成这些命令操作,如果有小伙伴对这部分命令作用不了解,可以参考博主写【Redis】 String 字符串类型常见命令

🚩mset 和 mget

  • mset:设置多个key与value
  • mset:获取多个key的value,返回一个列表

代码示例如下:

public static void testMsetAndMget(Jedis jedis) {
    jedis.mset("k1","11","k2","22","k3","33");
    List<String> list = jedis.mget("k1","k2","k3","k4");
    System.out.println("list : " + list);
}

执行结果如下:

🚩append

  • append:对原字符串进行拼接

代码示例如下:

public static void  testAppend(Jedis jedis) {
    System.out.println("测试 append ");
    jedis.set("k1","abc");
    String result = jedis.get("k1");
    System.out.println("result : " + result);
    jedis.append("k1","def");
    result = jedis.get("k1");
    System.out.println("result : " + result);
}

执行结果如下:

🚩getrange 和 setrange

  • setrange:覆盖字符串的⼀部分,从指定的偏移开始。
  • getrange:返回 key 对应的 string 的⼦串(左闭右闭)。

代码示例如下:

public static void testSetrangeAndGetrange(Jedis jedis) {
    System.out.println("测试 setrange 和 getrange");
    jedis.set("key","abcdefg");
    String result = jedis.getrange("key",0,-1);
    System.out.println("result : " + result);
    result = jedis.getrange("key",1,4);
    System.out.println("result : " + result);
    jedis.setrange("key",0,"123");
    result = jedis.getrange("key",0,-1);
    System.out.println("result : " + result);
}

执行结果如下:

🚩setnx

  • setnx:设置 key-value 但只允许在 key 之前不存在的情况下。

代码示例如下:

public static void testSetnx(Jedis jedis) {
    System.out.println("测试 setnx");
    jedis.set("k1","11");
    long n = jedis.setnx("k1","11");
    System.out.println(n);
    n = jedis.setnx("k2","22");
    System.out.println(n);
    String result = jedis.get("k2");
    System.out.println(result);
}

代码执行结如下

🚩incr 和 decr

  • incr:将 key 对应的 string 表⽰的数字加⼀
  • decr:将 key 对应的 string 表⽰的数字减⼀

代码示例如下:

public static void testIncrDecr(Jedis jedis) {
    System.out.println("测试 incr 和 decr");
    jedis.set("k1","5");
    String result = jedis.get("k1");
    System.out.println("此时result : " + result);
    jedis.decr("k1");
    result = jedis.get("k1");
    System.out.println("result - 1 : " + result);
    System.out.println("此时result : " + result);
    jedis.incr("k1");
    result = jedis.get("k1");
    System.out.println("result + 1 : " + result);
}

执行结果如下:

🚩incrby 和 decrby

  • incrby:将 key 对应的 string 表⽰的数字加上对应的值。
  • decrby:将 key 对应的 string 表⽰的数字减去对应的值。

代码示例如下:

public static void testIncrbyDecrby(Jedis jedis) {
    System.out.println("测试 incr 和 decr");
    jedis.set("k1","5");
    String result = jedis.get("k1");
    System.out.println("此时result : " + result);
    jedis.decrBy("k1",5);
    result = jedis.get("k1");
    System.out.println("result - 5 : " + result);
    System.out.println("此时result : " + result);
    jedis.incrBy("k1",5);
    result = jedis.get("k1");
    System.out.println("result + 5 : " + result);
}

执行结果如下:

⭕总结

关于《【Redis】 Java操作Redis客户端命令——基础操作与字符串操作》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1天前
|
负载均衡 NoSQL Java
|
5天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
11天前
|
Java
Java 替换字符串 replace replaceAll
【7月更文挑战第10天】Java 替换字符串 replace replaceAll
Java 替换字符串 replace  replaceAll
|
14天前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
4天前
|
存储 JSON Java
Java对象转换为JSON字符串
在Java开发中,常需将数据对象转换为JSON存储,如使用Fastjson库。要将Java对象转为JSON,可调用`JSON.toJSONString(obj)`;反向转换则用`JSON.parseObject(str, Class)`。
|
9天前
|
安全 Java
Java8 拼接字符串 StringJoiner
Java8 拼接字符串 StringJoiner
|
11天前
|
并行计算 Java 数据挖掘
Java面试题:解释Java中的Stream API及其操作
Java面试题:解释Java中的Stream API及其操作
18 0
|
11天前
|
存储 安全 Java
Java面试题:请解释Java中的字符串和字符串缓冲区?
Java面试题:请解释Java中的字符串和字符串缓冲区?
9 0
|
12天前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
13 0
|
13天前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作