欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【redis】Jedis 操作 Redis 基础指令(上)

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

2025/3/19 20:17:34 来源:https://blog.csdn.net/Yeeear/article/details/146312032  浏览:    关键词:【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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词