Skip to content

Redis常用命令

3536字约12分钟

redis

2025-03-18

连接Redis服务器

方案一:在docker环境启动redis-cli

docker exec -it redisname redis-cli 如果redis服务器有密码,需要带-a参数 docker exec -it redisname redis-cli -a "your password" redisname表示redis容器名称 -a 密码

方案二:使用windows版redis-cli.exe客户端启动redis-cli

redis-cli.exe -h 127.0.0.1 -p 6379 如果redis服务器有密码,需要带-a参数 redis-cli.exe -h 127.0.0.1 -p 6379 -a "xxx" -h 服务器地址 -p 端口 -a 密码

查看Redis服务器与客户端版本

#查看服务器版本
redis-server -v
redis-server --version

#查看客户端版本
redis-cli -v
redis-cli --version

redis-cli常用命令及用法

String类型

set

设置string类型,设置成功返回 OK

格式:set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]

Redis里的key中可以使用冒号(😃,这样可以做出命名空间的效果。

set user:name "lxxilyd"
set user:name "lxxilyd" ex 60

ex参数设置过期时间60秒

get

读取string类型,读取成功返回值,读取失败返回(nil)

get user:name

getset

一个key - value,然后把设置之前的值返回.

set user:name "lxxilyd"
getset user:myname "lxxilyd1"
# 返回lxxilyd,注意取回来的是本次设置之前的值,因为get在前,set在后。

incr

自增类型,自增1,返回自增后的值

incr count

decr

自减类型,自减1,返回自减后的值

decr count

incrby

按某个长度自增,返回自增后的值

incrby count 2

decrby

按某个长度自减,返回自减后的值

decrby count 2

mset

同时设置多个字符串key

mset id 1 name test age 20

mget

同时获取多个key的值

mget id name age

exists

判断key是否存在,存在返回1,不存在返回0

exists id

del

删除key,删除成功返回1,删除失败返回0

del test

同时删除多个key,返回实际删除成功的数值

del name age email

expire

设置某个key的过期时间 格式:expire key 时间(秒)

# 设置name键的过期时间为10秒
expire name 10

ttl

查看某个key的离过期时间还剩余多少秒

ttl name

查看name这个缓存key离过期时间还剩余多少秒,返回-1表示未设置过期时间,返回-2表示已经过期了,返回0或正数表示剩余的过期时间

List类型

lpush

向List的左侧(头部)添加一个新元素,可以一次性添加多个元素,返回List的总长度

格式: lpush key member [member 2] [member n]

lpush list "a"
lpush list "b" "c" "d"

rpush

向List的右侧(尾部)添加一个新元素,可以一次性添加多个元素,返回List的总长度

格式: rpush key member [member 2] [member n]

rpush list "1"
rpush list "2" "3" "4"

lrange

可以按索引下标范围取出一个List类型某段范围的值

格式: lrange list-key 起始索引 结束索引

如果想获取整个list,起始索引用0,结束索引用-1,-1表示最后一个元素

lrange list 0 3
lrange list 0 -1

起始索引为List的起始索引位置,结束索引为List的结束索引位置,结束索引为-1的时候,取出从0索引到后面所有索引范围的值

lpop

从LIst左侧取出并删除一个元素,返回取出元素的值,如果list不存在,则返回null

lpop list

rpop

从List右侧取出并删除一个元素,返回取出元素的值,如果list不存在,则返回null

rpop list

当lpop或rpop弹出最后一个元素时, 这个list键同时会被删除

ltrim

可以从右边开始对Listf元素进行裁剪,格式为 ltrim listKey start end,返回结果是OK

格式: ltrim list-key start end

# 裁前掉右边3个元素
ltrim list 0 3

brpop和blpop

这两个命令与rpop和lpop类似,如果元素有值,则立即返回最左边或最右边的值,但是当List里没有元素的时候,它可以等待一定的时间,如果这段时间有新元素添加到了List里,那么就会停止等待并返回该元素,否则就会一直等待直到设定的时间结束,然后返回null

brpop listKey #等待时间(秒)

blpop listKey #等待时间(秒)

brpop list 5
blpop list 5
# 例子里表示等待5秒。如果等待时间为0,则会永远等待,要慎用。

llen

返回List的长度

格式:llen list-key

llen list

Set类型(无序集合类型)

sadd

添加新元素到set,可以同时添加多个元素,如果添加了重复元素,会删除重复的元素,它的元素顺序是无序的,不会按先来后到的顺序显示。返回添加成功的元素个数

格式:sadd set-key member [member 2] [member n]

sadd set 789 # 给set添加789这个元素,返回1
sadd set a b c d e e e
# 这个例子会给set添加a b c d e 五个元素,多余的e元素自动删除,返回5

smembers

获取set所有元素,返回的元素列表是无序的。

smembers set

sismember

判断某个元素是否在set里,存在则返回1,不存在则返回0.

sismember set c

sinter

返回交集,可以返回两个或两个以上set的交集,返回每个set集合共同存在的元素。

格式:sinter key1 [key2] [key3]

del set1 set2 set3
sadd set1 1 2 3 4 5
sadd set2 3 4 5 6 7
sadd set3 5 6 7 8 9

sinter set1 set2
# 返回: 3 4 5

sinter set1 set2 set3
# 返回: 5

sinterstore

返回交集,可以返回两个或两个以上set的交集,返回每个set集合共同存在的元素。然后将交集结果保存到目标set。如果只有一个set需要合并的话,那么就相当于是复制。

格式:sinterstore 目标set-key key1 [key2] [key3]

del set1 set2 set3
sadd set1 1 2 3 4 5
sadd set2 3 4 5 6 7
sadd set3 5 6 7 8 9
sinter set set1 set2 set3
# 这个例子,set的元素为: 5

sunion

返回并集,返回多个set之间的并集,并去掉重复的元素

格式: sunion key1 [key2] [key3]

del set1 set2 set3
sadd set1 1 2 3 4 5
sadd set2 3 4 5 6 7
sadd set3 5 6 7 8 9

sunion set1 set2
# 返回 1 2 3 4 5 6 7

sunion set1 set2 set3
# 返回 1 2 3 4 5 6 7 8 9

sunionstore

对多个set集合的元素进行合并,并去掉重复的元素,然后保存到目标set中

格式:sunionstore 目标set-key key1 [key2] [key3]

del set1 set2 set3
sadd set1 1 2 3 4 5
sadd set2 3 4 5 6 7
sadd set3 5 6 7 8 9
sunionstore set set1 set2 set3
# 这个例子,set的元素为 1 2 3 4 5 6 7 8 9,set以前的值被覆盖

sdiff

返回差集,返回第一个集合里面有,而第二个,并且第三个,并且第n个集合里面没有的元素,只要后面任意一个集合有第一个集合的元素,都不返回。

格式: sdiff key1 [key2] [key3]

del set1 set2 set3
sadd set1 1 2 3 4 5
sadd set2 4 5 6 7 8
sadd set3 1 7 8 9 10

sdiff set1 set2
# 返回 1 2 3

sdiff set1 set3
# 返回 2 3 4 5

sdiff set1 set2 set3
# 返回 2 3

sdiffstore

返回差集,返回第一个集合里面有,而第二个,并且第三个,并且第n个集合里面没有的元素,只要后面任意一个集合有第一个集合的元素。然后将结果保存到目标set集合

格式: sdiffstore 目标set-key key1 [key2] [key3]

del set1 set2 set3
sadd set1 1 2 3 4 5
sadd set2 4 5 6 7 8
sadd set3 1 7 8 9 10
sdiffstore set set1 set2 set3
# 这个例子,set的元素为 2 3

spop

随机从set中移除一个或多个元素并返回,格式:spop setKey [返回元数个数],返回元素个数可写可不写,不写则随机返回1个元素,否则随机返回指定个元素如果[返回元素个数]超过set元素的总个数,则返回全部元素

spop set # 表示随机返回一个
spop set 3 #表示随机返回三个

scard

返回set元素的总个数,如果set不存在,返回0

scard set

如果set不存在则返回0,存在则返回set元素总个数

srandmember

可以随机获取set里面的一个或多个元素,但不会移除他们。当获取的set元素的key不存在时,返回null。当指定的元数个数大于set里元素的总个数时,返回所有。

格式: srandmember setKey [number]

srandmember set
srandmember set 3

Sorted SET(ZSET) 有序集合类型

Sorted Set有点像Set和Hash的结合体,和Set一样,它里面的元素是唯一的,类型是String,所以它可以理解为就是一个Set。

但是Set里面的元素是无序的,而Sorted Set里面的元素都带有一个浮点值,叫做分数(score),所以这一点和Hash有点像,因为每个元素都映射到了一个值。 Sorted Set是有序的,规则如下: 如果A.score > B.score,那么A > B 如果A.score == B.score,那么A和B的大小就通过比较字符串来决定,而A和B的字符串是不会相等的,因为Sorted Set里面的值都是唯一的。

zadd

可以添加元素到Sorted Set,可以同时添加多个元素,分数(score)可以重复,但值不能重复,重复的值不会被添加进去,返回本次成功添加元素的个数。

格式:zadd sortedSetKey score value [score value] [score value]

zadd zset 10 "Li 1"
zadd zset 20 "Li 2"
# 可以同时用zadd添加多个元素
zadd zset 30 "Li 3" 40 "Li 4" 40 "Li 5"

zrange

按分数由低到高把Sorted Set的所有元素显示出来

格式: zrange key startScore endScore [withscores]

zrange zset 0 -1
zrange zset 0 -1 withscores
# withscores参数把对应的分数显示出来

zrevrange

按分数由高到低把Sorted Set的所有元素显示出来,与zrange反序显示

格式: zrevrange key startScore endScore [withscores]

zrevrange zset 0 -1
zrevrange zset 0 -1 withscores
# withscores参数把对应的分数显示出来

zrangebyScore

可以按分数范围显示sorted set的部分元素,只显示在范围内的元素

格式:zrangebyscore key 分数下限 分数上限

zrangebyscore zset 0 59

zremrangebyscore

按分数范围删除元素,返回删除元素的个数

格式: zremrangebyscore key startScore endScore

zremrangebyscore zset 30 40

zrank

按分数从低到高获得sorted set里面某个元素值的排名,如果该元素不存在,返回空。排名从0开始,0表示排第一,1表示排第二,2表示排第三。

格式: zrank key member

zrank zset "test 2"

返回排名

zrevrank

按分数从高到低获得sorted set里面某个元素值的排名,如果该元素不存在,返回空。排名从0开始,0表示排第一,1表示排第二,2表示排第三。

格式: zrevrank key member

zrevrank zset "test 2"

返回排名

Hash类型

hash有点像javascript里面的object对象,一个hash里面可以存储多个field-value,每个field相当于一个二级key。

hash里面的值作为string类型存储,但是如果filed里面的值可以解释为数字,也可以对其进行自增或自减操作。

hset命令

设置hash里面的值,返回设置field的个数,但是当某个field已经存在时,这个field的值不会覆盖,会hset失败。

格式:hset hash-key field1 value1 [field2 value2 ...]

# hash中的key也可以使用冒号(:),这样可以做出命名空间的效果。
hset user:test name "test name"
# 可以同时设置多个field及值,返回filed的个数。
hset user:test name "test name"
hset user:test age 20 born "2025-03-18" addr "shang hai"

hmset

设置hash里多个field,如果被设置的field已经存在,就更新field的值,不存在则添加一个新的 field。

格式 hmset hash-key field1 value1 [field2 value2 ...]

hmset user:test name "test name" age 18

hsetnx

如果hash里存在某个field,则不会添加field并返回0,如果不存在field,则添加新的field并返回1。

格式:hsetnx hash-key field value

hsetnx user:test age 20

hget

获取hash key里单个field的值,如果key或filed不存在,则返回null

格式 :hget hash-key field

hget user:test name

hmget

获取hash key里多个field的值。如果field不存在则返回null。

格式:hmget hash-key field1 [field2 ...]

hmget user:test name age addr

hgetall

获取某个hash-key中的所有field名称及值,field与value都返回

格式:hgetall hash-key

hgetall user:test

hincrby

如果hash里某个field值的类型可以转换成数值,可以用来做自增或自减操作,返回自增或自减后的值。

格式: hincrby hash-key field incrment

# incrment为正数表示自增,为负数表示自减,如果field不存在,新增一个field。
hincrby user:test count 1
hincrby user:test count -1

hincrbyfloat

如果hash里某个field值的类型可以转换成数值,可以用来自增或自减少数,返回自增或自减后的值。如果 field不存在,则新增field。

格式: hincrbyfloat hash-key field increment

hincrby user:test count 3.2
hincrby user:test count -2.1

hdel

删除某个hash里的字段,可以同时删除多个field,返回删除field的个数,如果field不存在,就忽略删除,并且不计入删除个数。

格式: hdel hash-key field [field ...]

hdel user:test addr count

hexists

判断hash某个field是否存在,存在返回1,不存在返回0。

格式:hexists hash-key field

hexists user:test name

hkeys

返回某个hash里的所有field的名称数组。

格式:hkeys hash-key

hkeys user:test

hvals

返回某个hash里所有field的值数值

格式:hvals hash-key

hvals user:test

hlen

返回某个hash里所有field的总个数。

格式:hlen hash-key

hlen user:test

其它

flushall

清理所有key,全部删除

Powered by Vuepress and Cloudflare Pages