zoukankan      html  css  js  c++  java
  • 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的时候,也是)
  • 相关阅读:
    ACwing(基础)--- 树状数组
    ACwing(基础)--- 快速幂
    Oracle for loop 循环
    Oracle 为表增加时间戳字段
    Oracle Materialized View 物化视图
    Splunk DBConnect使用
    Splunk 过滤接入数据
    Python 协程库 asyncio 的简单理解和使用
    Python 正则使用 备查
    Splunk 数据接入 创建索引接收数据
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/10141915.html
Copyright © 2011-2022 走看看