当前位置: 首页 > news >正文

【redis】Jedis 操作 Redis 基础指令(上)

jedis 进行 redis 中的一些通用命令

  1. get/set
  2. exists
  3. del
  4. keys
  5. expire/ttl
  6. kype
    接下来介绍这些 redis 的命令在代码中的曹组哦,不会覆盖到所有的命令

一个优秀的库,一定是非常容易上手的

基础操作

get/set

import redis.clients.jedis.Jedis;  
import redis.clients.jedis.JedisPool;  
  
public class RedisDemo {  
  
  
    public static void test1(Jedis jedis) {  
        System.out.println("get 和 set 的使用");  
        // 先清空一下数据库,避免上一组测试的残留数据影响到下一次组测试结果  
        jedis.flushAll();  
  
        jedis.set("key1", "111");  
        jedis.set("key2", "222");  
  
        String value1 = jedis.get("key1");  
        String value2 = jedis.get("key2");  
        System.out.println("value1 = " + value1);  
        System.out.println("value2 = " + value2);  
    }  
  
    public static void main(String[] args) {  
        // 连接到 Redis 服务器上  
        JedisPool jedisPool = new JedisPool("localhost",6379);  
  
        // 从 Redis 连接池中取一个连接出来  
        // 连接用完之后要释放,此处的释放不一定是真的关闭 TCP 连接,而是将连接放回到池子里  
        // 因为是在 try 后面的()里面进行取连接的,执行结束后会自动关闭  
        try(Jedis jedis = jedisPool.getResource()) {  
            // Redis 的各种命令,就对应到 Jedis 对象的各种方法  
            test1(jedis);  
        }  
    }  
}
  • 运行结果image.png

ex/xx/nx

params.ex(10);  
params.xx();  
jedis.set("key3","333", params);
  • exxxnx 等指令,含义和前面我们学习的指令意思一样。不过要调用这些指令的话,需要一个额外的参数来接收这些信息,然后传到 set 里面

del/exists

public static void test2(Jedis jedis) {  
    System.out.println("exists 和 del");  
    jedis.flushAll();  
  
    jedis.set("key1", "111");  
    jedis.set("key2", "222");  
  
    System.out.println("key1 = " + jedis.get("key1"));  
    System.out.println("key2 = " + jedis.get("key2"));  
    boolean result = jedis.exists("key1");  
    System.out.println("redult1 = " + result);  
  
    jedis.del("key2");  
    boolean result2 = jedis.exists("key2");  
    System.out.println("进行 del key2 操作");  
    System.out.println("result2 = " + result2);  
}
long result2 = jedis.del("key2");  
System.out.println("进行 del key2 操作");  
System.out.println("result2 = " + result2);
  • del 的时候,返回类型是 long,返回值是 1 代表删除成功,是 0 代表删除失败

keys

public static void test3(Jedis jedis) {  
    System.out.println("keys");  
    jedis.flushAll();  
  
    jedis.set("key1", "111");  
    jedis.set("key2", "222");  
    jedis.set("key3", "333");  
    jedis.set("key4", "444");  
  
    // redis 中的 key 不能重复,不在意顺序,所以用 set 表示  
    Set<String> keys = jedis.keys("*");  
    System.out.println(keys);  
}

// keys
// [key1, key2, key3, key4]

expire/ttl

public static void test4(Jedis jedis) {  
    System.out.println("expire 和 ttl");  
    jedis.flushAll();  
  
    jedis.set("key1", "111");  
    jedis.expire("key1", 10);  
  
    long time = jedis.ttl("key1");  
    System.out.println("time: " + time);  
}


// expire 和 ttl
// time: 10
  • 这里由于执行速度太快,所以 ttl 一直都是 10s,我们可以让他休眠一下再执行
public static void test4(Jedis jedis) {  
    System.out.println("expire 和 ttl");  
    jedis.flushAll();  
  
    jedis.set("key1", "111");  
    jedis.expire("key1", 10);  
  
    try {  
        Thread.sleep(4000);  
    } catch (InterruptedException e) {  
        throw new RuntimeException(e);  
    }  
  
    long time = jedis.ttl("key1");  
    System.out.println("time: " + time);  
}
  • 休眠 4s

type

public static void test5(Jedis jedis) {  
    System.out.println("type");  
    jedis.flushAll();  
    jedis.set("key", "111");  
    String type = jedis.type("key");  
    System.out.println("type: " + type);  
  
    // 有序集合 list(顺序很重要、可重复)  
    jedis.lpush("key2", "111", "222", "333");  
    type = jedis.type("key2");  
    System.out.println("type: " + type);  
  
    // hash,key-(filed1-value1)、(field2-value2)......  
    jedis.hset("key3", "f1", "111");  
    type = jedis.type("key3");  
    System.out.println("type: " + type);  
  
    // 无序集合 set(顺序不重要、不可重复)  
    jedis.sadd("key4","111", "222", "333");  
    type = jedis.type("key4");  
    System.out.println("type: " + type);  
  
    // 升/降序集合(按照参数 score 来排序)  
    jedis.zadd("key5", 10, "zhangsan");  
    type = jedis.type("key5");  
    System.out.println("type: " + type);  
}

type
type: string
type: list
type: hash
type: set
type: zset

字符串操作

mget 和 mset

一次操作多组键值对

public static void test1(Jedis jedis) {  
    jedis.mset("key1", "value1","key2", "value2", "key3", "value3");  
    List<String> mget = jedis.mget("key1", "key2", "key3");  
    System.out.println(mget);  
}
  • 输出:[value 1, value 2, value 3]

append

如果 key 已经存在,并且是一个 string,命令会将 value 追加到原有 string 的后面。如果 key 不存在,则效果等同于 `set

public static void test2(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.append("key", "aaa");  
    String value = jedis.get("key");  
    System.out.println(value);  
  
    jedis.append("key", "bbb");  
    value = jedis.get("key");  
    System.out.println(value);  
}

// 输出结果:
aaa
aaabbb

getrange 和 setrange

  • getrange:返回 key 对应的 string 的⼦串,由 startend 确定(左闭右闭)。
    • Java 中的 `substring
  • setrange:从 start 开始替换,直到给的字符串替换完为止
public static void test3(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.set("key", "abcdefg");  
    String value = jedis.getrange("key", 1, 4);  
    System.out.println(value);  
  
    System.out.println(jedis.get("key"));  
    jedis.setrange("key", 0, "hhh");  
    value = jedis.get("key");  
    System.out.println(value);  
}

//运行结果:
bcde
abcdefg
hhhdefg

setnx

不存在才能设置,存在则设置失败

public static void test4(Jedis jedis) {  
    jedis.flushAll();  
  
    long n = jedis.setnx("key", "value");  
    System.out.println(n);  
    String value = jedis.get("key");  
    System.out.println(value);  
  
    n = jedis.setnx("key", "value2");  
    System.out.println(n);  
    value = jedis.get("key");  
    System.out.println(value);  
}


//运行结果
1
value
0
value
  • setnx 设置成功返回 1,失败返回 0

psetex

设置 key 的过期时间(单位 ms

  • psetex key 时间 value
public static void test5(Jedis jedis) {  
    jedis.flushAll();  
    jedis.psetex("key", 1000, "value");  
  
    try {  
        Thread.sleep(500);  
    } catch (InterruptedException e) {  
        throw new RuntimeException(e);  
    }  
      
    long ttl = jedis.pttl("key");  
    System.out.println(ttl);  
}

//运行结果
495
  • 通过 sleep 休眠一段时间,可以更好的看到过期时间的变化
  • 获取到的时间不一定刚好 1000-500,因为 pttl 本身也是有时间开销的

incr/decr 和 incrby/decrby

public static void test6(Jedis jedis) {  
    jedis.flushAll();  
    jedis.set("key", "0");  
    jedis.incr("key");  
    System.out.println(jedis.get("key"));  
  
    jedis.decr("key");  
    System.out.println(jedis.get("key"));  
  
    jedis.incrBy("key", 10);  
    System.out.println(jedis.get("key"));  
  
    jedis.decrBy("key", 5);  
    System.out.println(jedis.get("key"));  
}

//运行结果

1
0
10
5

相关文章:

  • 2022 年 3 月青少年软编等考 C 语言七级真题解析
  • 【Azure 架构师学习笔记】- Azure Databricks (22) --Autoloader
  • LeetCode 热题 100_前 K 个高频元素(75_347_中等_C++)(堆)(哈希表+排序;哈希表+优先队列(小根堆))
  • 基于ssm的自习室预订座位管理(全套)
  • 蓝桥杯 阶乘的和
  • 登录Xshell主机及Linux基本指令
  • SpringBoot之一个注解完成所有类型的文件下载!
  • MySQL UPDATE 更新操作详解
  • 深入解析GORM的配置选项及示例
  • clickhouse清除system 表数据释放磁盘空间
  • 内容中台智能推荐服务创新路径
  • 网上怎么样可以挣钱,分享几种可以让你在家赚钱的兼职项目
  • 开发过程中的网络协议
  • SpringMVC(八)Knife4j 接口文档
  • XML 树结构
  • 爬虫逆向:逆向中用到汇编语言详细总结
  • 网络层协议
  • 教育直播培训系统源码解析:核心功能与实现方式
  • Android Room 框架公共模块源码深度剖析(四)
  • React Native 如何使用 Expo 快速开发?
  • 马上评|扩大高速免费救援范围,打消出行后顾之忧
  • 网警查处编造传播“登顶泰山最高可得3万奖金”网络谣言者
  • 神十九都带回了哪些实验样品?果蝇等生命类样品已交付科学家
  • “五一”逃离城市计划:带上帐篷去大自然里充电
  • 神十九乘组安全顺利出舱
  • 神十九飞船已撤离空间站,计划于今日中午返回东风着陆场