外观
Redis常用命令
连接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 --versionredis-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 60ex参数设置过期时间60秒
get
读取string类型,读取成功返回值,读取失败返回(nil)
get user:namegetset
一个key - value,然后把设置之前的值返回.
set user:name "lxxilyd"
getset user:myname "lxxilyd1"
# 返回lxxilyd,注意取回来的是本次设置之前的值,因为get在前,set在后。incr
自增类型,自增1,返回自增后的值
incr countdecr
自减类型,自减1,返回自减后的值
decr countincrby
按某个长度自增,返回自增后的值
incrby count 2decrby
按某个长度自减,返回自减后的值
decrby count 2mset
同时设置多个字符串key
mset id 1 name test age 20mget
同时获取多个key的值
mget id name ageexists
判断key是否存在,存在返回1,不存在返回0
exists iddel
删除key,删除成功返回1,删除失败返回0
del test同时删除多个key,返回实际删除成功的数值
del name age emailexpire
设置某个key的过期时间 格式:expire key 时间(秒)
# 设置name键的过期时间为10秒
expire name 10ttl
查看某个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 listrpop
从List右侧取出并删除一个元素,返回取出元素的值,如果list不存在,则返回null
rpop list当lpop或rpop弹出最后一个元素时, 这个list键同时会被删除
ltrim
可以从右边开始对Listf元素进行裁剪,格式为 ltrim listKey start end,返回结果是OK
格式: ltrim list-key start end
# 裁前掉右边3个元素
ltrim list 0 3brpop和blpop
这两个命令与rpop和lpop类似,如果元素有值,则立即返回最左边或最右边的值,但是当List里没有元素的时候,它可以等待一定的时间,如果这段时间有新元素添加到了List里,那么就会停止等待并返回该元素,否则就会一直等待直到设定的时间结束,然后返回null
brpop listKey #等待时间(秒)
blpop listKey #等待时间(秒)
brpop list 5
blpop list 5
# 例子里表示等待5秒。如果等待时间为0,则会永远等待,要慎用。llen
返回List的长度
格式:llen list-key
llen listSet类型(无序集合类型)
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元素自动删除,返回5smembers
获取set所有元素,返回的元素列表是无序的。
smembers setsismember
判断某个元素是否在set里,存在则返回1,不存在则返回0.
sismember set csinter
返回交集,可以返回两个或两个以上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
# 返回: 5sinterstore
返回交集,可以返回两个或两个以上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的元素为: 5sunion
返回并集,返回多个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 9sunionstore
对多个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 3sdiffstore
返回差集,返回第一个集合里面有,而第二个,并且第三个,并且第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 3spop
随机从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 3Sorted 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 59zremrangebyscore
按分数范围删除元素,返回删除元素的个数
格式: zremrangebyscore key startScore endScore
zremrangebyscore zset 30 40zrank
按分数从低到高获得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 18hsetnx
如果hash里存在某个field,则不会添加field并返回0,如果不存在field,则添加新的field并返回1。
格式:hsetnx hash-key field value
hsetnx user:test age 20hget
获取hash key里单个field的值,如果key或filed不存在,则返回null
格式 :hget hash-key field
hget user:test namehmget
获取hash key里多个field的值。如果field不存在则返回null。
格式:hmget hash-key field1 [field2 ...]
hmget user:test name age addrhgetall
获取某个hash-key中的所有field名称及值,field与value都返回
格式:hgetall hash-key
hgetall user:testhincrby
如果hash里某个field值的类型可以转换成数值,可以用来做自增或自减操作,返回自增或自减后的值。
格式: hincrby hash-key field incrment
# incrment为正数表示自增,为负数表示自减,如果field不存在,新增一个field。
hincrby user:test count 1
hincrby user:test count -1hincrbyfloat
如果hash里某个field值的类型可以转换成数值,可以用来自增或自减少数,返回自增或自减后的值。如果 field不存在,则新增field。
格式: hincrbyfloat hash-key field increment
hincrby user:test count 3.2
hincrby user:test count -2.1hdel
删除某个hash里的字段,可以同时删除多个field,返回删除field的个数,如果field不存在,就忽略删除,并且不计入删除个数。
格式: hdel hash-key field [field ...]
hdel user:test addr counthexists
判断hash某个field是否存在,存在返回1,不存在返回0。
格式:hexists hash-key field
hexists user:test namehkeys
返回某个hash里的所有field的名称数组。
格式:hkeys hash-key
hkeys user:testhvals
返回某个hash里所有field的值数值
格式:hvals hash-key
hvals user:testhlen
返回某个hash里所有field的总个数。
格式:hlen hash-key
hlen user:test其它
flushall
清理所有key,全部删除