Redis | Redis的String类型

2021-03-14  本文已影响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做活动:送礼物

上一篇下一篇

猜你喜欢

热点阅读