Redis命令

本文详细介绍了Redis的常用命令,包括连接管理、数据类型操作如字符串、列表、集合和有序集合,以及HyperLogLog和地理位置等特殊数据类型。通过实例演示了各种操作,如设置、获取、删除键值,以及集合的添加、删除和查询等,帮助读者快速掌握Redis的基本使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本章整理一下Redis常用命令。
Redis命令十分丰富,包括的命令组有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions一共14个redis命令组两百多个redis命令。
这些命令运用在不同的场景下,本章只介绍其中常用的一部分,剩下的命令在用到的时候可以去查询字典。
这里罗列了两个官方地址,也可以作为参考。
redis官方命令文档地址:https://redis.io/commands
redis中文官方文档地址:http://www.redis.cn/commands.html

五大基本数据类型

基础操作命令

PING
如果后面没有参数时返回PONG,否则会返回后面带的参数。
这个命令经常用来测试一个连接是否还是可用的,或者用来测试一个连接的延时。

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> ping hello
"hello"

SELECT index
选择一个数据库,下标值从0开始,一个新连接默认连接的数据库是DB0。注意:redis默认16个数据库。

127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> select 0
OK

SHUTDOWN [NOSAVE] [SAVE]
停止所有客户端.
如果配置了save 策略 则执行一个阻塞的save命令.
如果开启了AOF,则刷新aof文件…
关闭redis服务进程(redis-server).
[NOSAVE] [SAVE] 退出时是否持久化存储

127.0.0.1:6379> shutdown
not connected> 

exit
退出

not connected> exit
[root@zhangdl bin]# 

FLUSHDB
删除当前数据库里面的所有数据。

127.0.0.1:6379> flushdb
OK

FLUSHALL
删除所有数据库里面的所有数据,注意不是当前数据库,而是所有数据库。

127.0.0.1:6379> flushAll
OK

TIME
TIME 命令返回当前Unix时间戳和这一秒已经过去的微秒数

127.0.0.1:6379> time
1) "1617849342"
2) "212874"

TYPE key
返回key所存储的value的数据结构类型,它可以返回string, list, set, zset 和 hash等不同的类型。

127.0.0.1:6379[3]> type arr1
list
127.0.0.1:6379[3]> type age
string

EXISTS key
返回key是否存在。

127.0.0.1:6379> EXISTS name
(integer) 1

一、String(字符串)

SET key value
将键key设定为指定的“字符串”值。
如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。

127.0.0.1:6379> set age 18
OK

GET key
返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。

127.0.0.1:6379> get name
"zs"

DEL key
删除指定的一批keys,如果删除中的某些key不存在,则直接忽略。

127.0.0.1:6379[3]> get name
"sss"
127.0.0.1:6379[3]> del name
(integer) 1
127.0.0.1:6379[3]> get name
(nil)

keys [正则表达式]
查找所有符合给定模式pattern(正则表达式)的 key 。

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> keys n?me
1) "name"

DBSIZE
返回当前数据里面keys的数量。

127.0.0.1:6379> dbsize
(integer) 2

APPEND key value
如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

127.0.0.1:6379> get name2
"ls"
127.0.0.1:6379> append name2 123 #返回追加后的字符长度
(integer) 5
127.0.0.1:6379> get name2
"ls123"

STRLEN key
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。

127.0.0.1:6379> get name2
"ls123"
127.0.0.1:6379> strlen name2
(integer) 5

INCR key
对存储在指定key的数值执行原子的加1操作。
如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0。
如果指定的key中存储的值不是字符串类型(fix:)或者存储的字符串类型不能表示为一个整数,
那么执行这个命令时服务器会返回一个错误

127.0.0.1:6379> get name
"zs123"
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incr age
(integer) 19
127.0.0.1:6379> incr a # a不存在
(integer) 1

DECR key
对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。

127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr age
(integer) 18
127.0.0.1:6379> decr b
(integer) -1

INCRBY key increment
将key对应的数字加decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。

127.0.0.1:6379> get age
"18"
127.0.0.1:6379> INCRBY age 10
(integer) 28

DECRBY key decrement
将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。

127.0.0.1:6379> DECRBY age 15
(integer) 13

MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。
如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果

127.0.0.1:6379> move a 3
(integer) 1
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> keys *
1) "a"

EXPIRE key seconds
设置key的过期时间,超过时间后,将会自动删除该key。
TTL key
返回key剩余的过期时间。

127.0.0.1:6379[3]> get a
"1"
127.0.0.1:6379[3]> expire a 10
(integer) 1
127.0.0.1:6379[3]> ttl a
(integer) 6
127.0.0.1:6379[3]> ttl a
(integer) -2
127.0.0.1:6379[3]> ttl a
(integer) -2
127.0.0.1:6379[3]> get a
(nil)

GETSET key value
返回key的值,并给key设置新的value值

127.0.0.1:6379[3]> get name
"zs"
127.0.0.1:6379[3]> getset name ls
"zs"
127.0.0.1:6379[3]> get name
"ls"

GETRANGE key start end
返回key的字串,start和end为下标,0为第一个,1为第二个,-1为倒数第一个,以此类推。

127.0.0.1:6379[3]> get s
"abcdefg"
127.0.0.1:6379[3]> getrange s 0 2
"abc"
127.0.0.1:6379[3]> getrange s -3 -1
"efg"

SETRANGE key offset value
这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度

127.0.0.1:6379[3]> get s
"abcdefg"
127.0.0.1:6379[3]> setrange s 3 hi
(integer) 7
127.0.0.1:6379[3]> get s
"abchifg"
127.0.0.1:6379[3]> setrange s 5 hello
(integer) 10
127.0.0.1:6379[3]> get s
"abchihello"

MSET key value [key value …]
对应给定的keys到他们相应的values上。
MGET key [key …]
返回所有指定的key的value。对于每个不对应string或者不存在的key,都返回特殊值nil

127.0.0.1:6379[3]> mset k1 zs k2 ls
OK
127.0.0.1:6379[3]> mget k1 k2
1) "zs"
2) "ls"

SETNX/SETEX
SETNX key 当key不存在时,setkey,存在不操作。
SETEX key seconds value 给key设置过期时间
这两个方法可以使用set代替,此处不举例说明了。

二、List(链表)

List默认为一个字符串链表,左右都可插入元素,默认左边为头部,索引小,右边为尾部,索引大。
LPUSH key value [value …]
将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。
RPUSH key value [value …]
向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是一个列表,那么会返回一个错误。
LRANGE key start stop
返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。

127.0.0.1:6379[3]> lrange name 0 -1
(empty array)
127.0.0.1:6379[3]> lpush name zs
(integer) 1
127.0.0.1:6379[3]> lpush name ls ws
(integer) 3
127.0.0.1:6379[3]> lrange name 0 -1
1) "ws"
2) "ls"
3) "zs"
127.0.0.1:6379[3]> rpush name xx
(integer) 4
127.0.0.1:6379[3]> lrange name 0 -1
1) "ws"
2) "ls"
3) "zs"
4) "xx"

LPOP key
移除并且返回 key 对应的 list 的第一个元素。
RPOP key
移除并返回存于 key 的 list 的最后一个元素。

127.0.0.1:6379[3]> lpop name
"ws"
127.0.0.1:6379[3]> lrange name 0 -1
1) "ls"
2) "zs"
3) "xx"
127.0.0.1:6379[3]> rpop name 2 # 从尾部移除两个并返回移除的值
1) "xx"
2) "zs"
127.0.0.1:6379[3]> lrange name 0 -1
1) "ls"

LINDEX key index
127.0.0.1:6379[3]> lrange name 0 -1

  1. “zhaoliu”
  2. “wangwu”
  3. “lisi”
  4. “zhangsan”
    127.0.0.1:6379[3]> lindex name 1
    “wangwu”
    127.0.0.1:6379[3]> lindex name 0
    “zhaoliu”

LLEN key
返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key 里的值不是一个list的话,会返回error。

127.0.0.1:6379[3]> llen name
(integer) 4

LINSERT key BEFORE|AFTER pivot value
把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。
当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。
当 key 存在,但保存的不是一个list的时候,会返回error。

127.0.0.1:6379[3]> linsert name before zhangsan aa  #zhangsan在尾部,它的前面就是lisi后面
(integer) 5
127.0.0.1:6379[3]> lrange name 0 -1
1) "zhaoliu"
2) "wangwu"
3) "lisi"
4) "aa"
5) "zhangsan"

LREM key count value
从存于 key 的列表里移除前 count 次出现的值为 value 的元素。

127.0.0.1:6379[3]> lrange hiarr 0 -1
1) "hello"
2) "hi"
3) "hello"
4) "hi"
5) "hello"
6) "hello"
127.0.0.1:6379[3]> lrem hiarr 1 hi
(integer) 1
127.0.0.1:6379[3]> lrange hiarr 0 -1
1) "hello"
2) "hello"
3) "hi"
4) "hello"
5) "hello"
127.0.0.1:6379[3]> lrem hiarr -2 hello
(integer) 2
127.0.0.1:6379[3]> lrange hiarr 0 -1
1) "hello"
2) "hello"
3) "hi"
127.0.0.1:6379[3]> lrem hiarr 0 hello
(integer) 2
127.0.0.1:6379[3]> lrange hiarr 0 -1
1) "hi"

LTRIM key start stop
修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素,取子list,原list会改变。

127.0.0.1:6379[3]> lrange name 0 -1
1) "zhaoliu"
2) "wangwu"
3) "lisi"
4) "aa"
5) "zhangsan"
127.0.0.1:6379[3]> ltrim name 1 -1 # zhaoliu为0,因此不在范围内
OK
127.0.0.1:6379[3]> lrange name 0 -1
1) "wangwu"
2) "lisi"
3) "aa"
4) "zhangsan"

LSET key index value
设置 index 位置的list元素的值为 value。

127.0.0.1:6379[3]> lrange numarr 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379[3]> lset numarr 0 four
OK
127.0.0.1:6379[3]> lset numarr -2 five
OK
127.0.0.1:6379[3]> lrange numarr 0 -1
1) "four"
2) "five"
3) "three"

RPOPLPUSH source destination
原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)。

127.0.0.1:6379[3]> lrange arr1 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379[3]> lrange arr2 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379[3]> rpoplpush arr1 arr2
"3"
127.0.0.1:6379[3]> lrange arr1 0 -1
1) "1"
2) "2"
127.0.0.1:6379[3]> lrange arr2 0 -1
1) "3"
2) "one"
3) "two"
4) "three"

三、Set(无序集合)

SADD key member [member …]
添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.

127.0.0.1:6379[3]> sadd name zs
(integer) 1
127.0.0.1:6379[3]> sadd name ls ww
(integer) 2

SMEMBERS key
返回key集合所有的元素.

127.0.0.1:6379[3]> smembers name
1) "zs"
2) "ww"
3) "ls"

SISMEMBER key member
返回成员 member 是否是存储的集合 key的成员.

127.0.0.1:6379[3]> SISMEMBER name zs
(integer) 1
127.0.0.1:6379[3]> SISMEMBER name zl
(integer) 0

SCARD key
返回集合存储的key的基数 (集合元素的数量).

127.0.0.1:6379[3]> SCARD name
(integer) 3

SPOP key [count]
从存储在key的集合中移除并返回一个或多个随机元素。

127.0.0.1:6379[3]> spop name 1
1) "ww"

SRANDMEMBER key [count]
仅提供key参数,那么随机返回key集合中的一个元素.(不移除,只返回)

127.0.0.1:6379[3]> SRANDMEMBER name 1
1) "ls"
127.0.0.1:6379[3]> SRANDMEMBER name 1
1) "zs"

SREM key member [member …]
在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0.
如果key的类型不是一个集合,则返回错误.

127.0.0.1:6379[3]> SMEMBERS name
1) "zs"
2) "ls"
127.0.0.1:6379[3]> srem name zs
(integer) 1
127.0.0.1:6379[3]> SMEMBERS name
1) "ls"

SMOVE source destination member
将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现.

127.0.0.1:6379[3]> smove name name2 ls
(integer) 1
127.0.0.1:6379[3]> smembers name2
1) "ls"

SDIFF key [key …] 差集
SINTER key [key …]交集
SUNIONkey [key …]并集

127.0.0.1:6379[3]> sadd name1 1 2 3
(integer) 3
127.0.0.1:6379[3]> sadd name2 2
(integer) 1
127.0.0.1:6379[3]> sdiff name1 name2
1) "1"
2) "3"
127.0.0.1:6379[3]> sinter name1 name2
1) "2"
127.0.0.1:6379[3]> sunion name1 name2
1) "1"
2) "2"
3) "3"

四、sorted set(有序集合)

ZADD key [NX|XX] [CH] [INCR] score member [score member …]
将所有指定成员添加到键为key有序集合(sorted set)里面
ZRANGE key start stop [WITHSCORES]
返回存储在有序集合key中的指定范围的元素。

127.0.0.1:6379[3]> zadd name 1 zs
(integer) 1
127.0.0.1:6379[3]> zadd name 2 zs2
(integer) 1
127.0.0.1:6379[3]> zadd name 3 zs3
(integer) 1
127.0.0.1:6379[3]> zrange name 0 -1
1) "zs"
2) "zs2"
3) "zs3"

ZRANK key member
返回有序集key中成员member的排名

127.0.0.1:6379[3]> zrank name zs
(integer) 0
127.0.0.1:6379[3]> zrank name zs2
(integer) 1

ZREVRANGE key start stop
返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。

127.0.0.1:6379[3]> zrevrange name 0 -1
1) "zs3"
2) "zs2"
3) "zs"

ZSCORE key member
返回有序集key中,成员member的score值。

127.0.0.1:6379[3]> zscore name zs
"1"
127.0.0.1:6379[3]> zscore name zs2
"2"

ZCARD key
返回key的有序集元素个数。

127.0.0.1:6379[3]> zcard name
(integer) 3

ZCOUNT key min max
返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员

127.0.0.1:6379[3]> zcount name 2 3
(integer) 2

五、Hash

hash和String的语法类似,此处就少记录一些。
HSET key field value
设置 key 指定的哈希集中指定字段的值。
如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。
如果字段在哈希集中存在,它将被重写。
HGET key field
返回 key 指定的哈希集中该字段所关联的值

127.0.0.1:6379[3]> hset stu name zs age 18 weight 60
(integer) 3
127.0.0.1:6379[3]> hget stu name
"zs"

ZCOUNT
ZCOUNT

三种特殊数据类型

一、Geo(地理位置)

127.0.0.1:6379> geoadd city 116.408 39.904 beijing # 新增地理位置(经度、纬度、名称)到key中
(integer) 1
127.0.0.1:6379> geoadd city 121.445 31.213 shanghai
(integer) 1
127.0.0.1:6379> geoadd city 117.246 39.117 tianjin
(integer) 1
127.0.0.1:6379> geoadd city 104.071 30.67 chengdu
(integer) 1
127.0.0.1:6379> GEODIST city beijing chengdu km # 查询两个成员的直线距离
"1516.9099"
127.0.0.1:6379> GEORADIUS city 116.408 39.904 500 km # 查询给定位置指定半径内的城市
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUSBYMEMBER city beijing 500 km withdist # 查询给定城市指定半径内的程时及直线距离
1) 1) "tianjin"
   2) "113.2837"
2) 1) "beijing"
   2) "0.0000"
127.0.0.1:6379> geopos city beijing shanghai # 查询key中指定城市的经纬度
1) 1) "116.40800267457962036"
   2) "39.90399988166036138"
2) 1) "121.44499808549880981"
   2) "31.213001199663303"
127.0.0.1:6379> geohash city beijing shanghai # 查询key中指定城市的11位hash值
1) "wx4g0bm9xh0"
2) "wtw3ed1sct0"

二、HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。
缺点:pfcount 存在0.81%的误差

127.0.0.1:6379> pfadd name zs ls # 新增HyperLogLog结构的key与值
(integer) 1
127.0.0.1:6379> pfadd name zs ww
(integer) 1
127.0.0.1:6379> pfadd name ww zl
(integer) 1
127.0.0.1:6379> pfcount name # 统计key中的参数数量
(integer) 4
127.0.0.1:6379> pfadd city beijing shanghai chengdu
(integer) 1
127.0.0.1:6379> pfcount name city # 统计name和city中一共的数量
(integer) 7
127.0.0.1:6379> pfmerge coll name city # 合并name和city到coll中,coll不存在则先创建
OK
127.0.0.1:6379> pfcount coll
(integer) 7

三、Bitmap(位)

如是否、正确/不正确、打卡/未打卡等非黑即白的场景可使用。

127.0.0.1:6379> setbit sure 1 1
(integer) 0
127.0.0.1:6379> setbit sure 2 0
(integer) 0
127.0.0.1:6379> getbit sure 1
(integer) 1
127.0.0.1:6379> getbit sure 2
(integer) 0

其他

上面的类型并没有涵盖redis所有的命令类型。如官网的介绍
在这里插入图片描述
可见还有很多没有讲到,这部分的,大家在使用的时候就查一查官方字典,其实,上面说到的一些命令都掌握了,很多场景就够了,不够的查查字典也能搞定。

那这一篇就说到这里吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值