美文网首页数据库
Redis-3-针对String数据类型的一些操作

Redis-3-针对String数据类型的一些操作

作者: 冷风_f818 | 来源:发表于2019-04-28 18:13 被阅读5次

    概述

    上文中,我们看了一些所有数据类型都通用的一些命令,下面再来看一下一些针对String类型独有的命令

    操作String类型数据的一些命令

    append

    追加字符串,如果key存在的话,就直接在value后面追加内容,如果key不存在,就会先创建一个value是空字符串的数据,然后再追加,具体使用方式如下:

    172.16.12.3:6379> get key1
    (nil)
    172.16.12.3:6379> append key1 hello
    (integer) 5
    172.16.12.3:6379> get key1
    "hello"
    172.16.12.3:6379> append key1 world
    (integer) 10
    172.16.12.3:6379> get key1
    "helloworld"
    

    decr

    decr命令可以对指定key的value执行减1的操作.

    如果key的value不为数字,则会报错

    如果key不存在,则key对应的初始值会被置为0, 然后再进行减1的操作

    具体使用如下:

    172.16.12.3:6379> set k2 20
    OK
    172.16.12.3:6379> decr k2
    (integer) 19
    172.16.12.3:6379> get k2
    "19"
    
    172.16.12.3:6379> set k3 test
    OK
    172.16.12.3:6379> decr k3
    (error) ERR value is not an integer or out of range
    
    172.16.12.3:6379> decr k4
    (integer) -1
    172.16.12.3:6379> get k4
    "-1"
    

    decrby

    和decr差不多,只不过decrby可以指定步长,如下命令,指定减5:

    172.16.12.3:6379> get k2
    "19"
    172.16.12.3:6379> decrby k2 5
    (integer) 14
    172.16.12.3:6379> get k2
    "14"
    

    get

    get命令用来获取对应key的value,如果不存在,就返回nil,如下:

    172.16.12.3:6379> get k2
    "14"
    172.16.12.3:6379> get k5
    (nil)
    

    getrange

    跟java的substring类似,用来返回key所对应的value的子串, 需要传入开始的下标和结束的下标

    从左往右数每个字符的下标依次是0,1,2,3....

    如果是从右往左数的话,下标依次是-1,-2,-3,-4.....

    具体使用方式如下:

    172.16.12.3:6379> set k5 helloworld
    OK
    172.16.12.3:6379>
    172.16.12.3:6379> get key5
    (nil)
    172.16.12.3:6379> get 5
    (nil)
    172.16.12.3:6379> get k5
    "helloworld"
    172.16.12.3:6379> getrange k5 0 4
    "hello"
    172.16.12.3:6379> getrange k5 -5 -1
    "world"
    

    getset

    getset命令,用来获取指定key所对应的value,并且给这个key设置新的value,具体如下:

    172.16.12.3:6379> get k5
    "helloworld"
    172.16.12.3:6379> getset k5 newvalue
    "helloworld"
    172.16.12.3:6379> get k5
    "newvalue"
    

    incr

    incr命令可以对指定key的value进行加1的操作

    如果指定key的value不是数字,就会报错

    如果指定key不存在,会先将key的value设置为0,然后再加1,最终值也就是1

    172.16.12.3:6379> get k2
    "14"
    172.16.12.3:6379> incr k2
    (integer) 15
    172.16.12.3:6379> get k2
    "15"
    172.16.12.3:6379> incr k5
    (error) ERR value is not an integer or out of range
    172.16.12.3:6379> incr k6
    (integer) 1
    172.16.12.3:6379> get k6
    "1"
    

    incrby

    和incr命令相似,只是可以指定步,使用方式如下:

    172.16.12.3:6379> get k6
    "1"
    172.16.12.3:6379> incrby k6 10
    (integer) 11
    172.16.12.3:6379> get k6
    "11"
    

    incrbyfloat

    incrbyfloat命令,用来增长浮点数,如下:

    172.16.12.3:6379> get k6
    "11"
    172.16.12.3:6379> incrbyfloat k6 0.5
    "11.5"
    172.16.12.3:6379> incrbyfloat k6 0.11
    "11.61"
    

    mget与mset

    批量操作命令,用来批量设置值和批量获取值,如下:

    172.16.12.3:6379> mset k1 v1 k2 v2 k3 v3
    OK
    172.16.12.3:6379> mget k1 k2 k3
    1) "v1"
    2) "v2"
    3) "v3"
    

    setex

    setex命令可以给key同时设置value和过期时间,相当于先给key设置value然后再设置一个有效时间,使用方式如下:

    172.16.12.3:6379> setex k1 30 v1
    OK
    172.16.12.3:6379> ttl k1
    (integer) 25
    172.16.12.3:6379> get k1
    "v1"
    

    psetex

    psetex命令和setex类似,只不过设置的时间单位是毫秒,如下:

    172.16.12.3:6379> psetex k1 100000 v1
    OK
    172.16.12.3:6379> pttl k1
    (integer) 96942
    

    setnx

    setnx是 set if not exists, 我们在使用set命令的时候,对于已经存在的key,就会新值覆盖掉旧值

    而setnx命令就是说,如果key是存在的,那就不进行任何操作,如果key不存在,那效果跟set命令是一样的,具体使用如下:

    172.16.12.3:6379> get k2
    "v2"
    172.16.12.3:6379> get k1
    (nil)
    172.16.12.3:6379> get k2
    "v2"
    172.16.12.3:6379> setnx k1 v1
    (integer) 1
    172.16.12.3:6379> setnx k2 test
    (integer) 0
    172.16.12.3:6379> get k1
    "v1"
    172.16.12.3:6379> get k2
    "v2"
    

    msetnx

    msetnx具备了setnx和mset的特性, 这里有需要注意的一点,如果有一个key存在,那所有的都不会执行,如下:

    172.16.12.3:6379> get k6
    "11.61"
    172.16.12.3:6379> get k7
    (nil)
    172.16.12.3:6379> msetnx k6 v6 k7 v7
    (integer) 0
    172.16.12.3:6379> get k6
    "11.61"
    172.16.12.3:6379> get k7
    (nil)
    

    因为k6是存在的,所以k7也没执行成功

    setrange

    setrange命令,用来覆盖一个已经存在的key的value,使用方式如下:

    172.16.12.3:6379> set k1 helloworld
    OK
    172.16.12.3:6379> get k1
    "helloworld"
    172.16.12.3:6379> setrange k1 5 redis
    (integer) 10
    172.16.12.3:6379> get k1
    "helloredis"
    

    如果已经存在的key的value长度小于offset,则不足的地方用0补齐,如下:

    172.16.12.3:6379> setrange k1 20 --java
    (integer) 26
    172.16.12.3:6379> get k1
    "helloredis\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00--java"
    

    strlen

    strlen命令用来计算指定key对应的value的长度,如下:

    172.16.12.3:6379> strlen k1
    (integer) 26
    

    关于string类型的常用命令,就先写这么多,如果需要用到其他的命令,可以去官方文档中查找

    相关文章

      网友评论

        本文标题:Redis-3-针对String数据类型的一些操作

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