• redis常用命令


    Redis常用命令操作

    1. 数据类型

    • string

    • hash

    • list

    • set

    • sortedset/zset

    2. 操作命令

    2.1 操作 string

    2.1.1 string 基础操作

    添加/修改数据

    语法:
    set key value
    示例:
    127.0.0.1:6379> set username zhangsan
    OK

    获取数据

    语法:
    get key
    示例:
    127.0.0.1:6379> get username
    "zhangsan"    

    删除数据

    语法:
    del key
    示例:
    127.0.0.1:6379> del username
    (integer) 1

    判定性添加数据(key不存在才添加)

    语法:
    setnx key value
    示例:
    127.0.0.1:6379> setnx username zhangsan
    (integer) 1
    127.0.0.1:6379> setnx username lisi
    (integer) 0

    添加/修改多个数据

    语法:
    mset key1 value1 key2 value2 …
    示例:
    127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
    OK

    获取多个数据

    语法:
    mget key1 key2 …
    示例:
    127.0.0.1:6379> mget k1 k2 k3
    1) "v1"
    2) "v2"
    3) "v3"

    获取数据的字符个数(字符串长度)

    语法:
    strlen key
    示例:
    127.0.0.1:6379> strlen username
    (integer) 8127.0.0.1:6379> strlen k1
    (integer) 2

    追加字符到原始字符串后面(如果原始字符串存在就追加,否则新建)

    语法:
    append key value
    示例:
    127.0.0.1:6379> append username 1
    (integer) 9
    127.0.0.1:6379> get username
    "zhangsan1"127.0.0.1:6379> append password 123
    (integer) 3
    127.0.0.1:6379> get password
    "123"

    2.1.2 string 扩展操作

    设置整形数值数据自增(默认自增1)

    语法:
    incr key
    示例:
    127.0.0.1:6379> set num 1
    OK
    127.0.0.1:6379> incr num
    (integer) 2
    127.0.0.1:6379> incr num
    (integer) 3

    设置整形数值数据增加指定整数值

    语法:
    incrby key increment
    示例:
    127.0.0.1:6379> incrby num 10
    (integer) 13

    设置数据数据增加指定小数值

    语法:
    incrbyfloat key increment
    示例:
    127.0.0.1:6379> incrbyfloat num 1.5
    "14.5"

    设置整形数值数据自减(默认自减1)

    语法:
    decr key
    示例:
    127.0.0.1:6379> set num2 10
    OK
    127.0.0.1:6379> decr num2
    (integer) 9

    设置设置整形数值数据减小指定值

    语法:
    decrby key decrement
    示例:
    127.0.0.1:6379> decrby num2 2
    (integer) 7

    设置数据的有效时长(支持自动过期)

    1.单位为秒
    语法: 
    setex key seconds value
    示例:
    127.0.0.1:6379> setex code 10 abcd
    OK
    10秒内获取
    127.0.0.1:6379> get code
    "abcd"
    10秒后获取
    127.0.0.1:6379> get code
    (nil)
    ​
    2.单位为毫秒
    语法: 
    psetex key milliseconds value
    使用方式一致,不再演示

    2.2 操作 hash

    2.2.1 hash 基础操作

    添加、修改数据

    语法1-添加单个:
    hset key field value
    示例:
    127.0.0.1:6379> hset user:001 name zhangsan
    (integer) 1
    ​
    语法2-批量添加:
    hmset key field1 value1 field2 value2 …
    示例:
    127.0.0.1:6379> hmset user:001 password 123 age 18
    OK
    ​
    语法3-判定性设置field的值,如果该field存在则不做任何操作:
    hsetnx key field value
    示例:
    127.0.0.1:6379> hsetnx user:001 name lisi
    (integer) 0

    根据key和field获取单个vlaue

    语法:
    hget key field
    示例:
    127.0.0.1:6379> hget user:001 name
    "zhangsan"

    根据key获取所有的field和value

    语法:
    hgetall key
    示例:
    127.0.0.1:6379> hgetall user:001
    1) "name"
    2) "zhangsan"
    3) "password"
    4) "123"
    5) "age"
    6) "18"

    删除数据

    语法:
    hdel key field1 [field2 field3...]
    示例:
    127.0.0.1:6379> hdel user:001 name
    (integer) 1127.0.0.1:6379> hdel user:001 password age
    (integer) 2

    根据key获取field的数量

    语法:
    hlen key
    示例:
    127.0.0.1:6379> hmset user:001 name zhangsan password 123 age 18
    OK
    127.0.0.1:6379> hlen user:001
    (integer) 3

    判断指定field是否存在

    语法:
    hexists key field
    示例:
    127.0.0.1:6379> hexists user:001 name
    (integer) 1
    127.0.0.1:6379> hexists user:001 name111
    (integer) 0

    2.2.2 hash 扩展操作

    根据key获取所有的字段名field

    语法:
    hkeys key
    示例:
    127.0.0.1:6379> hkeys user:001
    1) "name"
    2) "password"
    3) "age"

    根据key获取所有的字段值value

    语法:
    hvals key
    示例:
    127.0.0.1:6379> hvals user:001
    1) "zhangsan"
    2) "123"
    3) "18"

    设置指定字段的数值数据增加指定范围的值

    语法:
    hincrby key field increment
    hincrbyfloat key field increment
    示例:
    127.0.0.1:6379> hget user:001 age
    "18"
    127.0.0.1:6379> hincrby user:001 age 1
    (integer) 19
    127.0.0.1:6379> hincrby user:001 age -2
    (integer) 17

    2.3 操作list

    2.3.1 list 基础操作

    添加数据

    • 从左侧添加

    语法:
    lpush key value1 [value2 value3...]
    示例:
    127.0.0.1:6379> lpush list1 a b c
    (integer) 3

    当前数据为: c b a

    • 从右侧添加

    语法:
    rpush key value1 [value2 value3...]
    示例:
    127.0.0.1:6379> rpush list1 d e f
    (integer) 6

    当前数据为: c b a d e f

    获取数据

    • 范围获取

    语法:
    lrange key start stop
    示例1:
    127.0.0.1:6379> lrange list1 0 -1
    1) "c"
    2) "b"
    3) "a"
    4) "d"
    5) "e"
    6) "f"
    示例2:
    127.0.0.1:6379> lrange list1 0 2
    1) "c"
    2) "b"
    3) "a"
    示例3:
    127.0.0.1:6379> lrange list1 -3 -1
    1) "d"
    2) "e"
    3) "f"

    索引规则

    1. 从左到右,索引分别为0、1、2、3、4...

      如:c(0) b(1) a(2) d(3) e(4) f(5)

    2. 从右到左,索引分别为 -1、-2、-3、-4...

      如:c(-6) b(-5) a(-4) d(-3) e(-2) f(-1)

    • 获取指定索引的value

    语法:
    lindex key index
    示例:
    127.0.0.1:6379> lindex list1 0
    "c"
    127.0.0.1:6379> lindex list1 1
    "b"
    127.0.0.1:6379> lindex list1 -1
    "f"
    • 移除并返回最左侧或最右侧的元素

    语法:
    lpop key
    rpop key
    示例:
    127.0.0.1:6379> lpop list1
    "c"
    127.0.0.1:6379> rpop list1
    "f"
    • 根据key获取value的个数

    语法:
    llen key
    示例:
    127.0.0.1:6379> llen list1
    (integer) 4

    2.3.2 list 扩展操作

    删除指定key中指定数量的field

    语法:
    lrem key count value
    示例:
    127.0.0.1:6379> rpush list2 a b b b b c d d d d
    (integer) 10
    127.0.0.1:6379> lrem list2 4 b
    (integer) 4
    127.0.0.1:6379> lrange list2 0 -1
    1) "a"
    2) "c"
    3) "d"
    4) "d"
    5) "d"
    6) "d"
    127.0.0.1:6379> lrem list2 5 d
    (integer) 4
    127.0.0.1:6379> lrange list2 0 -1
    1) "a"
    2) "c"

    规定时间内获取并移除数据

    语法:
    blpop key1 [key2 key3...] timeout
    brpop key1 [key2 key3...] timeout
    示例:
    127.0.0.1:6379> lpush a a1
    (integer) 1
    127.0.0.1:6379> lpush b b1
    (integer) 1
    127.0.0.1:6379> lpush c c1
    (integer) 1
    127.0.0.1:6379> blpop a b c 5
    1) "a"
    2) "a1"
    127.0.0.1:6379> blpop a b c 5
    1) "b"
    2) "b1"
    127.0.0.1:6379> blpop a b c 5
    1) "c"
    2) "c1"
    127.0.0.1:6379> blpop a b c 5
    (nil)
    (5.76s)

    最后一次没有获取到数据,但是如果在等待的5秒中之内,另一个连接向 a b c 任意一个key中存入了value,则可以获取到数据,操作如下:

    1. 在当前连接窗口中执行指定时间内获取命令,命令会处于等待状态

    127.0.0.1:6379> blpop a b c 20
    |
    1. 打开一个新的客户端窗口,20秒之内在新连接窗口中向a或b或c中存入数据

    127.0.0.1:6379> lpush a a1
    (integer) 1
    1. 窗口1会立马获取到最新存入的数据

    127.0.0.1:6379> blpop a b c 20
    1) "a"
    2) "a1"
    (3.05s)

    规定时间内取出一个list的尾部元素并添加到另一个list的头部

    语法:
    brpoplpush source destination timeout
    source:被移除的list
    destination:要添加的list
    示例:
    127.0.0.1:6379> rpush list3 a b c
    (integer) 3
    127.0.0.1:6379> lrange list3 0 -1
    1) "a"
    2) "b"
    3) "c"
    127.0.0.1:6379> rpush list4 aa bb cc
    (integer) 3
    127.0.0.1:6379> lrange list4 0 -1
    1) "aa"
    2) "bb"
    3) "cc"
    127.0.0.1:6379> brpoplpush list3 list4 10
    "c"
    127.0.0.1:6379> lrange list3 0 -1
    1) "a"
    2) "b"
    127.0.0.1:6379> lrange list4 0 -1
    1) "c"
    2) "aa"
    3) "bb"
    4) "cc"

    2.4 操作 set

    2.4.1 set 基础操作

    添加数据

    语法:
    sadd key member1 [member2...]
    示例:
    127.0.0.1:6379> sadd set1 a a b c d
    (integer) 4

    获取全部数据

    语法:
    smembers key
    示例:
    127.0.0.1:6379> smembers set1
    1) "a"
    2) "d"
    3) "c"
    4) "b"

    删除数据

    语法:
    srem key member1 [member2...]
    示例:
    127.0.0.1:6379> srem set1 a b
    (integer) 2
    127.0.0.1:6379> smembers set1
    1) "d"
    2) "c"

    获取member元素的个数

    语法:
    scard key
    示例:
    127.0.0.1:6379> scard set1
    (integer) 2

    判断集合中是否包含指定数据

    语法:
    sismember key member
    示例:
    127.0.0.1:6379> sismember set1 d
    (integer) 1
    127.0.0.1:6379> sismember set1 ddd
    (integer) 0

    随机获取集合中[指定数量]的数据

    语法:
    srandmember key [count]
    示例:
    127.0.0.1:6379> sadd set2 a b c d e f g h i
    (integer) 9
    127.0.0.1:6379> srandmember set2
    "b"
    127.0.0.1:6379> srandmember set2
    "b"
    127.0.0.1:6379> srandmember set2
    "h"
    127.0.0.1:6379> srandmember set2
    "e"
    127.0.0.1:6379>  
    127.0.0.1:6379> srandmember set2 3
    1) "f"
    2) "e"
    3) "h"
    127.0.0.1:6379> srandmember set2 3
    1) "d"
    2) "c"
    3) "i"
    127.0.0.1:6379> srandmember set2 3
    1) "e"
    2) "h"
    3) "g"

    随机移除并返回集合中的某个数据

    语法:
    spop key
    示例:
    127.0.0.1:6379> spop set2
    "i"
    127.0.0.1:6379> spop set2
    "d"
    127.0.0.1:6379> smembers set2
    1) "a"
    2) "h"
    3) "f"
    4) "b"
    5) "e"
    6) "g"
    7) "c"

    2.4.1 set 扩展操作

    求多个集合的交、并、差集

    • 交集

    语法:
    sinter key1 [key2 …]  
    示例:
    127.0.0.1:6379> sadd s1 a b c d e f
    (integer) 6
    127.0.0.1:6379> sadd s2 a bb c dd e ff
    (integer) 6
    127.0.0.1:6379> sinter s1 s2
    1) "c"
    2) "a"
    3) "e"
    • 并集

    语法:
    sunion key1 [key2 …]  
    示例:
    127.0.0.1:6379> sunion s1 s2
    1) "f"
    2) "dd"
    3) "b"
    4) "a"
    5) "d"
    6) "bb"
    7) "e"
    8) "c"
    9) "ff"
    • 差集

    语法:
    sdiff key1 [key2 …]
    示例:
    127.0.0.1:6379> sdiff s1 s2
    1) "f"
    2) "d"
    3) "b"
    127.0.0.1:6379> sdiff s2 s1
    1) "ff"
    2) "dd"
    3) "bb"

    求多个集合的交、并、差集并存储到指定集合中

    语法:
    交集: sinterstore destination key1 [key2 …]  
    并集: sunionstore destination key1 [key2 …]  
    差集: sdiffstore destination key1 [key2 …]
    示例(以交集为例,将s1和s2的交集存储到s3中):
    127.0.0.1:6379> smembers s3
    (empty list or set)
    127.0.0.1:6379> sinter s1 s2
    1) "a"
    2) "e"
    3) "c"
    127.0.0.1:6379> sinterstore s3 s1 s2
    (integer) 3
    127.0.0.1:6379> smembers s3
    1) "e"
    2) "a"
    3) "c"

    将指定数据从原始集合中移动到目标集合中

    语法:
    smove source destination member
    示例(将s1中的a元素移动到s4中):
    127.0.0.1:6379> smembers s4
    (empty list or set)
    127.0.0.1:6379> smove s1 s4 a
    (integer) 1
    127.0.0.1:6379> smembers s4
    1) "a"
    127.0.0.1:6379> smembers s1
    1) "e"
    2) "d"
    3) "c"
    4) "f"
    5) "b"

    2.5 key 的操作

    2.5.1 key 的基本操作

    删除指定key(根据key删除任意类型数据)

    语法:
    del key
    示例1-删除string:
    127.0.0.1:6379> set aa bb
    OK
    127.0.0.1:6379> get aa
    "bb"
    127.0.0.1:6379> del aa
    (integer) 1
    127.0.0.1:6379> get aa
    (nil)
    示例2-删除hash:
    127.0.0.1:6379> hset hash1 k1 v1
    (integer) 1
    127.0.0.1:6379> hgetall hash1
    1) "k1"
    2) "v1"
    127.0.0.1:6379> del hash1
    (integer) 1
    127.0.0.1:6379> hgetall hash1
    (empty list or set)
    
    ...其它数据类型同理...

    判断key是否存在

    语法:
    exists key
    示例:
    127.0.0.1:6379> set aaa bbb
    OK
    127.0.0.1:6379> exists aaa
    (integer) 1
    127.0.0.1:6379> exists bbb
    (integer) 0

    获取key的类型

    语法:
    type key
    示例:
    127.0.0.1:6379> set mystring hellostring
    OK
    127.0.0.1:6379> hset myhash k1 v1
    (integer) 1
    127.0.0.1:6379> type mystring
    string
    127.0.0.1:6379> type myhash
    hash

    对list、set中的数值数据进行排序

    语法:
    sort key         #升序
    sort key desc    #降序
    示例:
    127.0.0.1:6379> del list1
    (integer) 0
    127.0.0.1:6379> lpush list1 11 2 33 7 5 18
    (integer) 6
    127.0.0.1:6379> sort list1
    1) "2"
    2) "5"
    3) "7"
    4) "11"
    5) "18"
    6) "33"
    127.0.0.1:6379> sort list1 desc
    1) "33"
    2) "18"
    3) "11"
    4) "7"
    5) "5"
    6) "2"

    对list、set中的字符串数据进行排序

    语法:
    sort key alpha
    sort key desc alpha
    示例:
    127.0.0.1:6379> del list2
    (integer) 0
    127.0.0.1:6379> lpush list2 a b c d
    (integer) 4
    127.0.0.1:6379> sort list2
    (error) ERR One or more scores can't be converted into double
    127.0.0.1:6379> sort list2 alpha
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    127.0.0.1:6379> sort list2 desc alpha
    1) "d"
    2) "c"
    3) "b"
    4) "a"

    重命名key

    语法1-如果新的key已存在会先删除新key然后在重命名:
    rename key newkey
    示例:
    127.0.0.1:6379> del username
    (integer) 0
    127.0.0.1:6379> set username zhangsan
    OK
    127.0.0.1:6379> set username2 lisi
    OK
    127.0.0.1:6379> rename username username2
    OK
    127.0.0.1:6379> get username
    (nil)
    127.0.0.1:6379> get username2
    "zhangsan"
    
    语法2-如果新的key不存在则重命名:
    renamenx key newkey
    示例:
    127.0.0.1:6379> set username3 wangwu
    OK
    127.0.0.1:6379> renamenx username2 username3
    (integer) 0
    127.0.0.1:6379> renamenx username2 username4
    (integer) 1
    127.0.0.1:6379> get username4
    "zhangsan"

    2.5.2 key 的扩展操作

    获取key的有效时间

    语法1-获取秒为单位的时效:
    ttl key
    语法2-获取毫秒为单位的时效:
    pttl key
    示例:
    127.0.0.1:6379> del username
    (integer) 0
    127.0.0.1:6379> set username zhangsan
    OK
    127.0.0.1:6379> ttl username
    (integer) -1
    127.0.0.1:6379> ttl username2
    (integer) -2
    127.0.0.1:6379> setex username3 30 wangwu
    OK
    127.0.0.1:6379> ttl username3
    (integer) 21
    127.0.0.1:6379> pttl username3
    (integer) 15840

    返回-1代表key没有设置有效时间,返回-2代表key不存在,返回正数代表剩余有效时长

    为指定key设置有效期

    语法:
    expire key seconds
    pexpire key milliseconds
    示例:
    127.0.0.1:6379> del hash1
    (integer) 0
    127.0.0.1:6379> hset hash1 k1 v1
    (integer) 1
    127.0.0.1:6379> ttl hash1
    (integer) -1
    127.0.0.1:6379> expire hash1 30
    (integer) 1
    127.0.0.1:6379> ttl hash1
    (integer) 20
    
    127.0.0.1:6379> del hash2
    (integer) 1
    127.0.0.1:6379> hset hash2 k2 v2
    (integer) 1
    127.0.0.1:6379> ttl hash2
    (integer) -1
    127.0.0.1:6379> pexpire hash2 30000
    (integer) 1
    127.0.0.1:6379> ttl hash2
    (integer) 26
    127.0.0.1:6379> pttl hash2
    (integer) 21380

    切换key从时效性转换为永久性

    语法:
    persist key
    示例:
    127.0.0.1:6379> del username
    (integer) 0
    127.0.0.1:6379> setex username 60 zhangsan
    OK
    127.0.0.1:6379> ttl username
    (integer) 55
    127.0.0.1:6379> persist username
    (integer) 1
    127.0.0.1:6379> ttl username
    (integer) -1

    查找key

    语法:
    keys pattern
    示例:
    127.0.0.1:6379> del username
    (integer) 1
    127.0.0.1:6379> set username1 zhangsan1
    OK
    127.0.0.1:6379> set username2 zhangsan2
    OK
    127.0.0.1:6379> set username3 zhangsan3
    OK
    127.0.0.1:6379> keys *
    1) "username3"
    2) "username1"
    3) "username2"
    127.0.0.1:6379> keys username*
    1) "username3"
    2) "username1"
    3) "username2"
    127.0.0.1:6379> keys *3
    1) "username3"

    2.6 db 常用指令

    2.6.1 存在的问题

    redis在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的key。这是key重名冲突的几率就比较高。要解决这个问题,除了我们在命名时尽量做到统一和规范以外,redis 自身也提供了一个解决机制。

    2.6.2 解决方式

    redis为每个服务提供有16个数据库,编号从0到15,每个数据库之间是相互独立的。如果没有进行过特殊设置,默认使用的是0号数据库。

     

    2.6.3 db 基础操作

    切换数据库

    语法:
    select index
    示例:
    select 1

    2.6.4 db 扩展操作

    数据移动

    语法:
    move key index
    示例:
    move username 1

    统计当前db中key的数量

    语法:
    dbsize
    示例:
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> dbsize
    (integer) 1

    清除数据

    语法1-清除当前db中所有数据:
    flushdb
    语法2-清除所有db中的数据:
    flushall
  • 相关阅读:
    Selenium RC和WebDriver的实现区别(一)
    布线问题
    C语言播放音乐
    圈水池
    双向BFS
    Asp.net MVC3 Razor中的扩展HtmlHelper的返回类型问题
    使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序
    IoTSharp部署教程Sqlite分表篇
    sql 2005性能调优
    Sql养成一个好习惯是一笔财富
  • 原文地址:https://www.cnblogs.com/yanjy/p/14308833.html
Copyright © 2020-2023  润新知