Redis---字符串的操作

set的时候设置生命周期

  • set key value [ex 秒] /[px 毫秒] [nx]/[xx]:后面接秒是可以设置key的生命周期的
    • 设置name的生命周期10s有效;set name sinmu ex 10
      Redis---字符串的操作
  • 当ex和px同时出现的时候,以后面的为准
    • set name sinmu ex 10 px 1000,实际的时间会以1000毫秒为准
  • nx:如果key不存在就进行set
  • xx:如果key存在就可以执行
    Redis---字符串的操作

一次性设置/获取多个key

  • 一次设置多个key:mset name sinmu sex man age 3
  • 一次性获取多个value:mget name sex age
    Redis---字符串的操作

对字符串的修改

  • setrange key offset value:作用是从key的地offset位开始替换为value值,字符串是从第0位开始的
    如:将name的值向右偏移第2个位后开始替换**:setrange name 2 **
    Redis---字符串的操作

  • 当这个偏移的值大于字符串的长度时会发生一些奇妙的变化:后面的会用\x00补充
    Redis---字符串的操作

对字符串的追加

  • append key value:将value追加到key存储的值的后面
    如我需要在name后面追加一个hello
    Redis---字符串的操作

对字符串的截取

  • getrange key start stop:对key的内容截取[start,stop]段
    • 当start >= stop > 0,会返回空字符串
    • start >=length,返回空字符串
    • stop >= length , 截取到字符串末尾

Redis---字符串的操作

getset:返回旧值,设置新值

对于这个我想到一个应用场景:linux每次登陆会显示上一次的登陆时间,那么我们通过redis也可以模拟这个操作。
set time 2020-6-15,当6.16登陆的时候显示的应该是2020-6-15这个值,并且这个时间也更新到2020-6-16登陆的值。对此的语句:getset time 20206-16
Redis---字符串的操作

对于数字增加和减少

  • incr key:增加1
  • decr key:减少1
  • incrby key num:增加num
  • decrby key num:减少num
    Redis---字符串的操作

对此有些类似与一个资格的获取,淘宝进行秒杀的时候,都是先获取一个购买的资格,然后在进行订单操作,那么这个购买的资格以及对用户显示的剩余货物的数量就可以通过redis进行模拟。
比如货物的数量有100份,对此货物进行秒杀,每多一个购买的资格,就有一个触发条件进行decr key,下一个购买者抢购资格的时候就会少一个。
Redis---字符串的操作

将大写字母转换成小写

  • 主要是使用二进制的操作
    根据Ascii码表 A的十进制是65=64+1,转换成二进制为0100 0001,同理a的十进制97,其二进制为0110 0001

A 65 0100 0001
a 97 0110 0001
换言之,在A的基础上,从左往右数,只需要将第2位的0换成1即可转换成a,现在redis有这么一个命令可以对位进行操作

  • setbit key offset value:将key的二进制的offset位的值设置为value,如将A转换成a,那么只需要将A的二进制的的第2位的0设置为1 就可以转换成a了,其语句为;setbit word 2 1
    Redis---字符串的操作

需要注意2个问题

  • 如果这个offset超出了key原本的位的长度,会发生什么?

针对第一个问题来尝试一下,A只有8位,那么使用setbit word 10 1
Redis---字符串的操作
说明中间是用\x00进行填充,另我好奇的是,最后有个\b,其代表的应该是二进制,就有些令我不知其解了

  • 这个offset的最大值为多少
    首先来预估一下这个情况,先测试一下216=65536和232=4294967296
    Redis---字符串的操作

通过测试发现,(232 )-1是offset的最大值,就有(232)/8个字节,(232)/(8*210)k=219k,有((219)/210)M,大约在512M左右

以上为redis中的字符串的基本操作