jedis set 的四个重载方法(byte[]的四个自动忽略)

方法定义如下:

1、String    set(String key, String value)
2、String    set(String key, String value, String nxxx) 
3、String    set(String key, String value, String nxxx, String expx, int time) 
4、String    set(String key, String value, String nxxx, String expx, long time)

功能都是一样的,“Set the string value as value of the key.” 将string类型的value 放到key的value上,返回值都是 String。

1、把key、value set到redis中,隐含覆盖,默认的ttl是-1(永不过期)

2、根据第三个参数,把key、value set到redis中

    nx : not exists, 只有key 不存在时才把key value set 到redis

    xx : is exists ,只有 key 存在是,才把key value set 到redis

 

3、4 和2 就相同,只是多加了个过期时间

     expx参数有两个值可选 :

          ex : seconds 秒

          px :   milliseconds 毫秒

     使用其他值,抛出 异常 : redis.clients.jedis.exceptions.JedisDataException : ERR syntax error 

    

    第五个参数就比较尴尬了,有两种可选的值,int 和long 的time,都是过期时间,那有什么不一样呢?

    

    Jedis 类的set 方法中 int和long(第五个参数)重载的方法,方法体基本一样:

public String set(final String key, final String value, final String nxxx, final String expx, final int time){
          checkIsInMultiOrPipeline();
          client.set(key, value, nxxx, expx, time)
          return client.getStatusCodeReply();
     }


public String set(final String key, final String value, final String nxxx, final String expx, final long time){
          checkIsInMultiOrPipeline();
          client.set(key, value, nxxx, expx, time)
          return client.getStatusCodeReply();
     }

有什么不一样呢,其他并没有,一路源码追下去:

    

Jedis 类 --》 Client类 --》 BinaryClient  都是一样的

 

在BinaryClient 的set 方法中,对 int 和 long 的time参数,做了个 toByteArray(time),操作,打开源码,发现:

public static final byte[] toByteArray(final int value){
    return SafeEncoder.encode(StringvalueOf(value));
}


public static final byte[] toByteArray(final long value){
    return SafeEncoder.encode(StringvalueOf(value));
}

不管是int 还是long,都转成String了,所以jedis 的最后两个重载方法,其实是一样的,(猜测:1、expx 参数是px的时候,使用long类型的参数,可以表示更多时间; 2、满足使用习惯long类型表示毫秒)

  

最后,返回值String,如果写入成功是“OK”,写入失败返回空(在nxxx的时候,也是)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jedis.set 方法用于向 Redis 中设置一个 key-value 对。如果 key 已经存在,则会覆盖原来的值,如果 key 不存在,则会创建一个新的 key-value 对。 set 方法有多个重载,可以根据需要选择使用不同的方法。 以下是 jedis.set 方法的常用重载: 1. 设置 key-value 对,不设置任何其他参数: ```java jedis.set(String key, String value); ``` 示例: ```java jedis.set("name", "Tom"); ``` 2. 设置 key-value 对,并指定过期时间(单位为秒): ```java jedis.set(String key, String value, int seconds); ``` 示例: ```java jedis.set("name", "Tom", 60); ``` 上述示例将 key 为 "name" 的值设置为 "Tom",并将其过期时间设置为 60 秒。 3. 设置 key-value 对,并指定过期时间(单位为毫秒): ```java jedis.psetex(String key, long milliseconds, String value); ``` 示例: ```java jedis.psetex("name", 60000, "Tom"); ``` 上述示例将 key 为 "name" 的值设置为 "Tom",并将其过期时间设置为 60000 毫秒(即 60 秒)。 4. 仅当 key 不存在时,才设置 key-value 对: ```java jedis.setnx(String key, String value); ``` 示例: ```java jedis.setnx("name", "Tom"); ``` 上述示例只有当 key 为 "name" 的键不存在时,才会将其值设置为 "Tom"。 需要注意的是,以上示例中的 key 和 value 都是字符串类型。如果需要设置其他类型的值,可以使用相应的转换方法进行转换。例如: ```java int intValue = 123; jedis.set("intKey", String.valueOf(intValue)); ``` 上述示例将 int 类型的值转换为字符串类型,并将其设置为 key 为 "intKey" 的值。 除了 set 方法外,jedis 还提供了一些其他的方法用于设置值,例如 setex、setnx、mset 等,可以根据具体需求选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值