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
原文地址:https://www.cnblogs.com/yanjy/p/14308833.html