美文网首页
Redis | Redis的String类型

Redis | Redis的String类型

作者: 暴走的朝天椒 | 来源:发表于2021-03-14 23:23 被阅读0次
    redis的string类型.png

    字符串操作

    单条设置

    1、SET key value [EX seconds] [PX milliseconds] [NX|XX]

    描述:
    将键key设定为指定的“字符串”值。
    如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。
    当set命令执行成功之后,之前设置的过期时间都将失效

    选项:
    EX seconds – 设置键key的过期时间,单位时秒
    PX milliseconds – 设置键key的过期时间,单位时毫秒
    NX – 只有键key不存在的时候才会设置key的值
    XX – 只有键key存在的时候才会设置key的值

    2、SETEX key seconds value

    描述:
    设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。这个命令等效于执 行下面的命令:
                SET mykey value
                EXPIRE mykey seconds
    SETEX是原子的,也可以通过把上面两个命令放到MULTI/EXEC块中执行的方式重现。相比连续执行上面两个命令,它更快,因为当Redis当做缓存使用时,这个操作更加常用。

    3、SETNX key value

    描述:
    将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。SETNX是”SET if Not eXists”的简写。

    4、SETRANGE key offset value

    描述:
    这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串,能在offset处设置value。

    例子:
          基本使用方法
                redis> SET key1 "Hello World"
                      OK
                redis> SETRANGE key1 6 "Redis"
                      (integer) 11
                redis> GET key1
                      "Hello Redis"
                redis>

          补0的例子
                redis> SETRANGE key2 6 "Redis"
                      (integer) 11
                redis> GET key2
                      "\x00\x00\x00\x00\x00\x00Redis"
                redis>

    多条设置

    1、MSET key value [key value ...]

    描述:
    对应给定的keys到他们相应的values上。MSET会用新的value替换已经存在的value,就像普通的SET命令一样。如果你不想覆盖已经存在的values,请参看命令MSETNX。
    MSET是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。

    例子:
          redis> MSET key1 "Hello" key2 "World"
                OK
          redis> GET key1
                "Hello"
          redis> GET key2
                "World"
          redis>

    2、MSETNX key value [key value ...]

    描述:
    对应给定的keys到他们相应的values上。只要有一个key已经存在,MSETNX一个操作都不会执行。 由于这种特性,MSETNX可以实现要么所有的操作都成功,要么一个都不执行,这样可以用来设置不同的key,来表示一个唯一的对象的不同字段。
    MSETNX是原子的,所以所有给定的keys是一次性set的。客户端不可能看到这种一部分keys被更新而另外的没有改变的情况。

    例子:
          redis> MSETNX key1 "Hello" key2 "there"
                (integer) 1
          redis> MSETNX key2 "there" key3 "world"
                (integer) 0
          redis> MGET key1 key2 key3
                1) "Hello"
                2) "there"
                3) (nil)
          redis>

    获得字符串

    1、GET key

    描述:
    返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。

    2、GETRANGE key start end

    描述:
    返回key对应的字符串value的子串,这个子串是由start和end位移决定的(两者都在string内)。可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推。

    例子:
          redis> SET mykey "This is a string"
                OK
          redis> GETRANGE mykey 0 3
                "This"
          redis> GETRANGE mykey -3 -1
                "ing"
          redis> GETRANGE mykey 0 -1
                "This is a string"
          redis> GETRANGE mykey 10 100
                "string"
          redis>

    其他操作

    1、APPEND key value

    描述:
    如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

    2、STRLEN key

    描述:
    返回key的string类型value的长度。如果key对应的非string类型,就返回错误。

    3、TYPE key

    描述:
    返回key所存储的value的数据结构类型,它可以返回string, list, set, zset 和 hash等不同的类型。

    4、OBJECT ENCODING key

    描述:
    该命令返回指定key对应value所使用的编码类型。

    数值操作

    1、INCR key

    描述:
    对存储在指定key的数值执行原子的加1操作。
    如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0。
    如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,
    那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。

    2、INCRBY key increment

    描述:
    将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字。

    3、INCRBYFLOAT key increment

    描述:
    通过指定浮点数key来增长浮点数(存放于string中)的值. 当键不存在时,先将其值设为0再操作.下面任一情况都会返回错误:
          key 包含非法值(不是一个string).
          当前的key或者相加后的值不能解析为一个双精度的浮点值.(超出精度范围了)
    如果操作命令成功, 相加后的值将替换原值存储在对应的键值上, 并以string的类型返回. string中已存的值或者相加参数可以任意选用指数符号,但相加计算的结果会以科学计数法的格式存储. 无论各计算的内部精度如何, 输出精度都固定为小数点后17位.

    应用场景:抢购,秒杀,详情页,点赞,评论

    bitmap

    1、SETBIT key offset value

    描述:
    设置或者清空key的value(字符串)在offset处的bit值。
    那个位置的bit要么被设置,要么被清空,这个由value(只能是0或者1)来决定。当key不存在的时候,就创建一个新的字符串value。

    例子:
          redis> SETBIT mykey 7 1
                (integer) 0
          redis> SETBIT mykey 7 0
                (integer) 1
          redis> GET mykey
                "\x00"
          redis>

    2、GETBIT key offset

    描述:
    返回key对应的string在offset处的bit值 当offset超出了字符串长度的时候,这个字符串就被假定为由0比特填充的连续空间。当key不存在的时候,它就认为是一个空字符串,所以offset总是超出范围,然后value也被认为是由0比特填充的连续空间。到内存分配。

    例子:
          redis> SETBIT mykey 7 1
                (integer) 0
          redis> GETBIT mykey 0
                (integer) 0
          redis> GETBIT mykey 7
                (integer) 1
          redis> GETBIT mykey 100
                (integer) 0
          redis>

    3、BITCOUNT key [start end]

    描述:
    统计字符串被设置为1的bit数.
    例子:
    如果今天是网站上线的第 100 天,而用户 peter 在今天阅览过网站,那么执行命令 SETBIT peter 100 1 ;如果明天 peter 也继续阅览网站,那么执行命令 SETBIT peter 101 1 ,以此类推。
    当要计算 peter 总共以来的上线次数时,就使用 BITCOUNT 命令:执行 BITCOUNT peter ,得出的结果就是 peter 上线的总天数。

    4、BITOP operation destkey key [key ...]

    描述:
    对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
    BITOP 命令支持 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种参数:
          1、BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
          2、BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。
          3、BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
          4、BITOP NOT destkey srckey,对给定 key 求逻辑非,并将结果保存到 destkey 。
    除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。
    执行结果将始终保持到destkey里面。

    例子:
    BITOP是对BITCOUNT命令一个很好的补充。
    不同的bitmaps进行组合操作可以获得目标bitmap以进行人口统计操作。

    应用场景:
          1,有用户系统,统计用户登录天数,且窗口随机
          2,京东就是你们的,618做活动:送礼物

    相关文章

      网友评论

          本文标题:Redis | Redis的String类型

          本文链接:https://www.haomeiwen.com/subject/hzfhcltx.html