zoukankan      html  css  js  c++  java
  • Jedis基础详解

    Jedis

    使用Java来操作Redis

    什么是Jedis 是Redis官方推荐的Java操作Redis中间件, 如果你要使用Java操作Redis, 那么就该对jedis熟悉

    测试

    • 导入对应的依赖
        <!-- 导入jedisd的包 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
        </dependency>
    
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
    
    • 编码测试
      • 连接数据库
      • 操作命令
      • 断开连接

    PING

        @Test
        void TestPing() {
            //1 new Jedis 对象即可
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            //jedis 所有的命令就是他的基本命令, 就是对象的方法
            System.out.println(jedis.ping());;
        }
    

    输出PONG

    常用API

    • String
    • List
    • Set
    • Hash
    • Zset

    Redis-key

        @Test
        void TestKey() {
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            System.out.println("清空数据" + jedis.flushDB());
            System.out.println("判断某个键是否存在: " + jedis.exists("username"));
            System.out.println("新增'<username, mxz>的键值对'" + jedis.set("username", "mxz"));
            System.out.println("新增'<password, mxz>的键值对'" + jedis.set("password", "mxz"));
            System.out.println("系统中所有的键值对如下: ");
            Set<String> keys = jedis.keys("*");
            System.out.println(keys);
    
            System.out.println("删除键password: " + jedis.del("password"));
            System.out.println("判断键password是否存在: " + jedis.exists("password"));
            System.out.println("查看键username所存储值的类型: " + jedis.type("username"));
            System.out.println("随机返回key空间的一个: " + jedis.randomKey());
            System.out.println("重命名key: " + jedis.rename("username", "name"));
            System.out.println("按索引查询: " + jedis.select(0));
            System.out.println("删除当前选择数据库的所有的key: " + jedis.flushDB());
            System.out.println("返回当前数据库中key的数目: " + jedis.dbSize());
            System.out.println("删除所有数据库中的所有的key: " + jedis.flushAll());
        }
    

    输出

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.1)
    
    2021-01-08 19:28:31.602  INFO 7492 --- [           main] cn.com.codincge.RedisApplicationTests    : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 7492 (started by mxz in D:mxz_codecodingce-javacodingce-redis
    edis-01-jedis)
    2021-01-08 19:28:31.608  INFO 7492 --- [           main] cn.com.codincge.RedisApplicationTests    : No active profile set, falling back to default profiles: default
    2021-01-08 19:28:32.290  INFO 7492 --- [           main] cn.com.codincge.RedisApplicationTests    : Started RedisApplicationTests in 1.133 seconds (JVM running for 3.804)
    
    清空数据OK
    判断某个键是否存在: false
    新增'<username, mxz>的键值对'OK
    新增'<password, mxz>的键值对'OK
    系统中所有的键值对如下: 
    [password, username]
    删除键password: 1
    判断键password是否存在: false
    查看键username所存储值的类型: string
    随机返回key空间的一个: username
    重命名key: OK
    按索引查询: OK
    删除当前选择数据库的所有的key: OK
    返回当前数据库中key的数目: 0
    删除所有数据库中的所有的key: OK
    

    String(字符串)

        @Test
        void TestString() {
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            System.out.println("=====增加数据=====");
            System.out.println(jedis.set("key1", "value1"));
            System.out.println(jedis.set("key2", "value2"));
            System.out.println(jedis.set("key3", "value3"));
            System.out.println("删除键key2" + jedis.del("key2"));
            System.out.println("获取键key2" + jedis.get("key2"));
            System.out.println("修改key1" + jedis.set("key1", "valueChanged"));
            System.out.println("获取key1的值" + jedis.get("key1"));
            System.out.println("在key3后面加入值" + jedis.append("key3", "end"));
            System.out.println("key3的值" + jedis.get("key3"));
            System.out.println("增加多个键值对: " + jedis.mset("key01", "value01", "key02", "value02"));
            System.out.println("获取多个键值对: " + jedis.mget("key01", "key02", "key03"));
            System.out.println("获取多个键值对: " + jedis.mget("key01", "key02", "key03", "key04"));
            System.out.println("删除多个键值对: " + jedis.del("key01", "key02"));
            System.out.println("获取多个键值对: " + jedis.mget("key01", "key02", "key03"));
    
            jedis.flushDB();
            System.out.println("=====新增键值对防止覆盖原先值=====");
            System.out.println(jedis.setnx("key1", "value1"));
            System.out.println(jedis.setnx("key2", "value2"));
            System.out.println(jedis.setnx("key2", "value2-new"));
            System.out.println(jedis.get("key1"));
            System.out.println(jedis.get("key2"));
    
            System.out.println("=====新增键值对并设置有效时间=====");
            System.out.println(jedis.setex("key3", 2, "value3"));
            System.out.println(jedis.get("key3"));
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(jedis.get("key3"));
    
    
            System.out.println("=====获取原值, 更新为新值=====");
            System.out.println(jedis.getSet("key2", "key2GetSet"));
            System.out.println(jedis.get("key2"));
    
            System.out.println("获得key2的值字符串: " + jedis.getrange("key2", 2, 4));
        }
    

    输出

    
      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.1)
    
    2021-01-09 09:56:23.763  INFO 9088 --- [           main] cn.com.codincge.RedisApplicationTests    : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 9088 (started by mxz in D:mxz_codecodingce-javacodingce-redis
    edis-01-jedis)
    2021-01-09 09:56:23.825  INFO 9088 --- [           main] cn.com.codincge.RedisApplicationTests    : No active profile set, falling back to default profiles: default
    2021-01-09 09:56:25.462  INFO 9088 --- [           main] cn.com.codincge.RedisApplicationTests    : Started RedisApplicationTests in 2.349 seconds (JVM running for 5.252)
    
    =====增加数据=====
    OK
    OK
    OK
    删除键key21
    获取键key2null
    修改key1OK
    获取key1的值valueChanged
    在key3后面加入值9
    key3的值value3end
    增加多个键值对: OK
    获取多个键值对: [value01, value02, null]
    获取多个键值对: [value01, value02, null, null]
    删除多个键值对: 2
    获取多个键值对: [null, null, null]
    =====新增键值对防止覆盖原先值=====
    1
    1
    0
    value1
    value2
    =====新增键值对并设置有效时间=====
    OK
    value3
    null
    =====获取原值, 更新为新值=====
    value2
    key2GetSet
    获得key2的值字符串: y2G
    

    List(列表)

        @Test
        void TestList() {
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            jedis.flushDB();
    
            System.out.println("=====添加一个List=====");
            jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap");
            jedis.lpush("collections", "HashSet");
            jedis.lpush("collections", "TreeSet");
            jedis.lpush("collections", "TreeMap");
            System.out.println("collections的内容" + jedis.lrange("collections", 0, -1));// -1代表倒数
            System.out.println("collections区间 0-3 的元素: " + jedis.lrange("collections", 2, 3));
    
            System.out.println("===========================================");
            // 删除列表指定的值, 第二个参数为删除的个数(有重复时), 后add进去的值先被删, 类似于出栈
            System.out.println("删除指定元素个数: " + jedis.lrem("collectionws", 2, "HashMap"));
            System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
            System.out.println("删除下表0-3区间之外的元素: " + jedis.ltrim("collections", 0, 3));
            System.out.println("collections内容: " + jedis.lrange("collections", 0, -1));
            System.out.println("collections列表出栈(左端): " + jedis.lpop("collections"));
            System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
            System.out.println("collections添加元素, 从列表右端, 与lpush相对应: " + jedis.rpush("collections", "test"));
            System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
            System.out.println("collections列表出栈(右端): " + jedis.rpop("collections"));
            System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
            System.out.println("collections指定下标 1 的内容: " + jedis.lset("collections", 1, "FLinkedHashMap"));
            System.out.println("collections的内容: " + jedis.lrange("collections", 0, -1));
    
            System.out.println("===========================================");
            System.out.println("collections的长度: " + jedis.llen("collections"));
            System.out.println("获取collections下标为 2 的元素" + jedis.lindex("collections", 2));
            System.out.println("===========================================");
            jedis.lpush("sortedList", "3", "6", "2", "4", "5", "7", "9");
            System.out.println("sortedList排序前: " + jedis.lrange("sortedList", 0, -1));
            System.out.println(jedis.sort("sortedList"));
            System.out.println("sortedList排序后:" + jedis.lrange("sortedList", 0, -1));
        }
    

    输出

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.1)
    
    2021-01-09 10:43:37.900  INFO 12624 --- [           main] cn.com.codincge.RedisApplicationTests    : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 12624 (started by mxz in D:mxz_codecodingce-javacodingce-redis
    edis-01-jedis)
    2021-01-09 10:43:37.900  INFO 12624 --- [           main] cn.com.codincge.RedisApplicationTests    : No active profile set, falling back to default profiles: default
    2021-01-09 10:43:38.572  INFO 12624 --- [           main] cn.com.codincge.RedisApplicationTests    : Started RedisApplicationTests in 0.997 seconds (JVM running for 2.26)
    
    =====添加一个List=====
    collections的内容[TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList]
    collections区间 0-3 的元素: [HashSet, LinkedHashMap]
    ===========================================
    删除指定元素个数: 0
    collections的内容: [TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList]
    删除下表0-3区间之外的元素: OK
    collections内容: [TreeMap, TreeSet, HashSet, LinkedHashMap]
    collections列表出栈(左端): TreeMap
    collections的内容: [TreeSet, HashSet, LinkedHashMap]
    collections添加元素, 从列表右端, 与lpush相对应: 4
    collections的内容: [TreeSet, HashSet, LinkedHashMap, test]
    collections列表出栈(右端): test
    collections的内容: [TreeSet, HashSet, LinkedHashMap]
    collections指定下标 1 的内容: OK
    collections的内容: [TreeSet, FLinkedHashMap, LinkedHashMap]
    ===========================================
    collections的长度: 3
    获取collections下标为 2 的元素LinkedHashMap
    ===========================================
    sortedList排序前: [9, 7, 5, 4, 2, 6, 3]
    [2, 3, 4, 5, 6, 7, 9]
    sortedList排序后:[9, 7, 5, 4, 2, 6, 3]
    

    Set(集合)

        @Test
        void TestSet() {
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            jedis.flushDB();
            System.out.println("======向集合中添加元素(不重复)======");
            System.out.println(jedis.sadd("eleSet", "e0", "e1", "e2", "e3", "e4", "e5"));
            System.out.println(jedis.sadd("eleSet", "e6"));
            System.out.println(jedis.sadd("eleSet", "e6"));
            System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
            System.out.println("删除一个元素e0" + jedis.srem("eleSet", "e0"));
            System.out.println("删除两个元素e6 e7" + jedis.srem("eleSet", "e7", "e6"));
            System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
            System.out.println("随机移除集合中的一个元素: " + jedis.spop("eleSet"));
            System.out.println("随机移除集合中的一个元素: " + jedis.spop("eleSet"));
            System.out.println("eleSet的所有元素为: " + jedis.smembers("eleSet"));
            System.out.println("eleSet中包含元素的个数: " + jedis.scard("eleSet"));
            System.out.println("e3是否在eleSet中: " + jedis.sismember("eleSet", "e3"));
            System.out.println("e1是否在eleSet中: " + jedis.sismember("eleSet", "e1"));
            System.out.println("e5是否在eleSet中: " + jedis.sismember("eleSet", "e5"));
            System.out.println("========================================");
            System.out.println(jedis.sadd("eleSet1", "e0", "e1", "e2", "e3", "e4", "e5"));
            System.out.println(jedis.sadd("eleSet2", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8"));
            System.out.println("将eleSet1中删除e1并存入eleSet3中: " + jedis.smove("eleSet1", "eleSet3", "e1"));
            System.out.println("将eleSet2中删除e2并存入eleSet3中: " + jedis.smove("eleSet2", "eleSet3", "e2"));
            System.out.println("eleSet1中的元素: " + jedis.smembers("eleSet1"));
            System.out.println("eleSet2中的元素: " + jedis.smembers("eleSet2"));
            System.out.println("=====集合运算=====");
            System.out.println("eleSet1中的元素: " + jedis.smembers("eleSet1"));
            System.out.println("eleSet2中的元素: " + jedis.smembers("eleSet2"));
            System.out.println("eleSet1和eleSet2的交集" + jedis.sinter("eleSet1", "eleSet2"));
            System.out.println("eleSet1和eleSet2的并集" + jedis.sunion("eleSet1", "eleSet2"));
            System.out.println("eleSet1和eleSet2的差集" + jedis.sdiff("eleSet1", "eleSet2")); //eleSet1中有, EleSet2中没有
            jedis.sinterstore("eleSet4", "eleSet1", "eleSet2"); //求交集并将交集保存到 dstkey的集合
            System.out.println("eleSet4中的元素: " + jedis.smembers("eleSet4"));
        }
    

    输出

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.1)
    
    2021-01-09 11:25:15.843  INFO 6516 --- [           main] cn.com.codincge.RedisApplicationTests    : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 6516 (started by mxz in D:mxz_codecodingce-javacodingce-redis
    edis-01-jedis)
    2021-01-09 11:25:15.843  INFO 6516 --- [           main] cn.com.codincge.RedisApplicationTests    : No active profile set, falling back to default profiles: default
    2021-01-09 11:25:16.718  INFO 6516 --- [           main] cn.com.codincge.RedisApplicationTests    : Started RedisApplicationTests in 1.207 seconds (JVM running for 2.739)
    
    ======向集合中添加元素(不重复)======
    6
    1
    0
    eleSet的所有元素为: [e5, e1, e0, e2, e3, e6, e4]
    删除一个元素e01
    删除两个元素e6 e71
    eleSet的所有元素为: [e5, e1, e2, e3, e4]
    随机移除集合中的一个元素: e5
    随机移除集合中的一个元素: e2
    eleSet的所有元素为: [e1, e3, e4]
    eleSet中包含元素的个数: 3
    e3是否在eleSet中: true
    e1是否在eleSet中: true
    e5是否在eleSet中: false
    ========================================
    6
    9
    将eleSet1中删除e1并存入eleSet3中: 1
    将eleSet2中删除e2并存入eleSet3中: 1
    eleSet1中的元素: [e3, e5, e0, e2, e4]
    eleSet2中的元素: [e1, e0, e3, e6, e4, e8, e5, e7]
    =====集合运算=====
    eleSet1中的元素: [e3, e5, e0, e2, e4]
    eleSet2中的元素: [e1, e0, e3, e6, e4, e8, e5, e7]
    eleSet1和eleSet2的交集[e3, e5, e0, e4]
    eleSet1和eleSet2的并集[e7, e5, e1, e0, e8, e2, e3, e4, e6]
    eleSet1和eleSet2的差集[e2]
    eleSet4中的元素: [e0, e5, e4, e3]
    

    Hash(哈希)

        @Test
        void TestHash() {
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            jedis.flushDB();
            Map<String, String> map = new HashMap<>();
            map.put("key1", "value1");
            map.put("key2", "value2");
            map.put("key3", "value3");
            map.put("key4", "value4");
            //添加名称为hash(key) 的hash元素
            jedis.hmset("hash", map);
            //向名称为hash的hash中添加key为key5, value为value5的元素
            jedis.hset("hash", "key5", "value5");
            System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
            System.out.println("散列hash的所有的键为: " + jedis.hkeys("hash")); //return Set<String>
            System.out.println("散列hash的所有的值为: " + jedis.hvals("hash")); //return List<String>
            System.out.println("将key6保存的值加上一个整数, 如果key6不存在则添加key6: " + jedis.hincrBy("hash", "key6", 1));
            System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
            System.out.println("将key6保存的值加上一个整数, 如果key6不存在则添加key6: " + jedis.hincrByFloat("hash", "key6", 1.0));
            System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
            System.out.println("删除一个或多个键值对: " + jedis.hdel("hash", "key2"));
            System.out.println("散列hash的所有键值对为: " + jedis.hgetAll("hash"));
            System.out.println("散列hash的所有键值对个数: " + jedis.hlen("hash"));
            System.out.println("判断散列hash中是否存在key2: " + jedis.hexists("hash", "key2"));
            System.out.println("判断散列hash中是否存在key3: " + jedis.hexists("hash", "key3"));
            System.out.println("获取hash中的值: " + jedis.hmget("hash", "key3"));
            System.out.println("获取hash中的值: " + jedis.hmget("hash", "key3", "key4"));
        }
    

    输出

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.1)
    
    2021-01-09 13:27:34.237  INFO 11788 --- [           main] cn.com.codincge.RedisApplicationTests    : Starting RedisApplicationTests using Java 1.8.0_181 on DESKTOP-GMI8GKQ with PID 11788 (started by mxz in D:mxz_codecodingce-javacodingce-redis
    edis-01-jedis)
    2021-01-09 13:27:34.242  INFO 11788 --- [           main] cn.com.codincge.RedisApplicationTests    : No active profile set, falling back to default profiles: default
    2021-01-09 13:27:35.059  INFO 11788 --- [           main] cn.com.codincge.RedisApplicationTests    : Started RedisApplicationTests in 1.276 seconds (JVM running for 3.17)
    
    散列hash的所有键值对为: {key1=value1, key2=value2, key5=value5, key3=value3, key4=value4}
    散列hash的所有的键为: [key1, key2, key5, key3, key4]
    散列hash的所有的值为: [value1, value3, value4, value2, value5]
    将key6保存的值加上一个整数, 如果key6不存在则添加key6: 1
    散列hash的所有键值对为: {key1=value1, key2=value2, key5=value5, key6=1, key3=value3, key4=value4}
    将key6保存的值加上一个整数, 如果key6不存在则添加key6: 2.0
    散列hash的所有键值对为: {key1=value1, key2=value2, key5=value5, key6=2, key3=value3, key4=value4}
    删除一个或多个键值对: 1
    散列hash的所有键值对为: {key1=value1, key5=value5, key6=2, key3=value3, key4=value4}
    散列hash的所有键值对个数: 5
    判断散列hash中是否存在key2: false
    判断散列hash中是否存在key3: true
    获取hash中的值: [value3]
    获取hash中的值: [value3, value4]
    

    项目地址 https://github.com/xzMhehe/codingce-java

  • 相关阅读:
    【赵强老师】使用Docker Compose进行服务编排
    【赵强老师】Weblogic域和域的组成
    【赵强老师】管理Docker镜像
    3. 清理统一审计 AUD$UNIFIED 基表部份数据
    4. AUD$UNIFIED 基表及 分区键创建索引
    2.更改统一审计AUD$UNIFIED基表 默认表空间
    1.更改统一审计AUD$UNIFIED 分区为1天
    9. 将APEX18.2 升级到 APEX19.2 详细步骤
    1.2 安装中文语言包
    通过VBOX 导入系统工具 搭建APEX开发环境
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/14254750.html
Copyright © 2011-2022 走看看