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

【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

http://www.kler.cn/a/591516.html

相关文章:

  • c语言笔记 结构体基础
  • Axios 请求取消:从原理到实践
  • 开源PACS(dcm4che-arc-light)部署教程,源码方式
  • opencv中stitch图像融合
  • 基于51单片机的手机拨号键盘模拟proteus仿真
  • MySQL实现全量同步和增量同步到SQL Server或其他关系型库
  • LeetCode203移除链表
  • Android ARouter的详细使用指南
  • 【数据库】如何用索引优化查询性能
  • Linux一键安装node.js【脚本】
  • Python学习- 数据结构类型
  • 软考中级-数据库-5.1 计算机网络概述与网络硬件基础
  • springCloud使用webSocket(接收端)
  • 基于PMU的14节点、30节点电力系统状态估计MATLAB程序
  • 【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)
  • Python使用总结之Flask构建文件服务器,通过网络地址访问本地文件
  • 学术论文pdf图片中的公式如何自动识别为word
  • 提升AI性能的秘密武器:量化、蒸馏与剪枝全面解析
  • Python----计算机视觉处理(Opencv:形态学变换)
  • 深度学习视觉BEV 3D目标检测算法综述