一、Redis常用命令

目录

通用命令

String类型命令

Hash类型命令 

List类型命令

Set类型命令

SortedSet类型命令


本章仅仅讲述一些常用的命令,下面给出一个链接,大家可以自己查询一下命令。 

​​​​​​Commands | Redis

通用命令

在redis中,有很多数据类型,不同的数据类型有不同的命令,除此之外还有一些通用命令,即针对所有类型的key都有效

通用命令
命令 说明 备注
keys 查看当前redis中的所有的key,后面可以匹配通配符

1、keys *  查看所有key列表

2、keys  a*  查看所有以a开头的key列表

del key1 key2 删除一个或者多个key
exists key 判断当前key是否存在

存在返回1

不存在或者过期返回0

expire key time 设置当前key的过期时间
ttl key 返回当前key 的过期时间

如果当前key不存在,则返回-2

如果key存在,但是没有过期时间,则返回-1

String类型命令

String类型指的是redis中value类型为string。但是在redis中,string类型又可以分为三种形态:

1、string 字符串

2、int 数字

3、float 浮点型

一、Redis常用命令_第1张图片

在底层,String类型都是通过char数组来存储的。

具体的命令如下

命令 说明 备注
set  key value 向redis添加一个key 值为value
get key 获取key中的value

如果key不存在,则返回nil

如果key的类型不是string,则返回错误

mset key1 value1 key2 value2 向redis中添加多个key

mget key1 key2

从redis中获取多个key对应的值
incr key 将对应key进行加1

如果key不存在,则redis会创建一个0,然后再增1

如果key存在,但是不是一个整数,那么就报错

incrby key step 将对应的key进行加step
setnx key value 添加一个key,当key不存在的时候,才添加,如果key存在则不操作

返回一个整数

1-成功

0-失败

setex key seconds value 添加一个key,并设置对应的过期时间

Hash类型命令 

命令 说明 备注
hset key field value 向map中插入一个数据。插入或者更新 如果filed存在,则更新,如果不存在则插入
hget key field 获取map中 field对应的value 如果 myhash 或 field1 不存在,那么返回的结果将是 nil。如果 myhash 和 field1 都存在,那么返回的结果将是 field1 的值。
hmset key field1 value1 field2 value2 批量插入数据
hmget key field1 field2: 批量获取数据
hgetall key 获取当前map中所有key和value

此命令的性能与当前hash表的大小有关

这个命令的时间复杂度是 O(N),其中 N 是哈希表的字段数量。这意味着,如果你有一个非常大的哈希表,使用 HGETALL 命令可能会消耗大量的 CPU 和内存资源,并可能阻塞 Redis 服务器直到命令执行完毕。

如果你需要迭代一个大哈希表的字段和值,考虑使用 HSCAN 命令,它可以在不阻塞服务器的情况下逐步返回字段和值。

hkeys key 获取当前key中所有的filed
hvalues key
hincrby key field 针对当前key中的field字段的值进行 增加
hsetnx key field value 和setnx类似,先判断当前field是否存在,然后再进行操作
hscan key index

用于迭代哈希表的字段和值。这个命令可以在不阻塞服务器的情况下逐步返回字段和值,这对于处理大哈希表非常有用。

HSCAN myhash 0
我们开始迭代 myhash 哈希表。0 是游标(cursor),它指示了迭代的开始位置。在第一次调用时,游标应该是 0。在后续的调用中,你应该使用上一次调用返回的游标值。

HSCAN 命令返回两个元素的数组。第一个元素是下一次迭代的游标,第二个元素是一个包含字段和值的数组。

请注意,HSCAN 命令可能会返回重复的元素,你需要在客户端处理这种情况。

List类型命令

list数据结构和java中的list基本上没什么区别,大家就可以理解成双向链表,下面是具体的命令:

命令 说明 备注
lpush  key value1 value2 value3 从左边插入。 先插入value1,在插入value2,value3

lpop key

或者 lpop key count

从左边弹出

如果key不存在或者为空列表,则返回nil

如果你想要移除并返回列表的多个元素,你可以多次执行 LPOP 命令。

如果你使用的是 Redis 6.2 或更高版本,你可以使用 LPOP key count 命令,其中 count 是你想要移除并返回的元素数量。

lrange key start end 返回start和end区间的数据。属于闭区间

start是要获取的元素的起始位置。在Redis中,列表的位置是从0开始的。也就是说,第一个元素的位置是0,第二个元素的位置是1,依此类推。

end是你要获取的元素的结束位置。你也可以使用负数来从列表的末尾开始计数。例如,-1表示最后一个元素,-2表示倒数第二个元素,依此类推。

LRANGE mylist 0 -1

返回当前列表的所有数据。

Set类型命令

set命令主要关注两个集合的交并差。这些功能可以适用于社交软件中的共同点赞,共同好友等等需求。

命令 说明 备注
sadd key value1 value2 添加元素 如果 myset 不存在,它将被创建,然后执行 SADD 操作。如果 myset 不是集合类型,将返回一个错误。
srem key value1 value2 移除对应的value 会返回被成功移除的元素的数量
scard key 获取当前集合中的元素个数 如果当前key不存在,则返回0
sismember key value 判断value是否为集合中的元素 时间复杂度为O(1)
smembers key 获取当前集合中的所有元素 这个命令的时间复杂度为O(n)。即需要遍历每个元素。
sscan key

扫描当前集合所有元素

SSCAN 命令返回两个元素的数组。第一个元素是下一次迭代的游标,第二个元素是一个包含元素的数组。

SSCAN myset 0

我们开始迭代 myset 集合。0 是游标(cursor),它指示了迭代的开始位置。在第一次调用时,游标应该是 0。在后续的调用中,你应该使用上一次调用返回的游标值。

sinter key1 key2

获取多个集合的交集。如果键不存在,将被视为一个空集合

 计算共同好友

时间复杂度:O(N*M) 其中 N 是第一个集合的大小,M 是集合的数量

sdiff key1 key2 用于获取两个集合的差集。也就是说,它返回存在于第一个集合,但不存在于其他集合的元素。

如果 key1 存在但 key2 不存在,那么 SDIFF key1 key2 的结果将是 key1 的所有元素。

工作流程:

1. 遍历第一个集合的每个元素。

2. 对于第一个集合中的每个元素,检查它是否存在于其他集合中。

3. 如果元素不存在于其他集合中,则将其添加到结果集中。 

sunion key1 key2 用于获取两个集合的并集

SortedSet类型命令

命令 说明 备注
zadd key score member 向redis中添加元素和分数

如果member已经存在,则更新分数,重新排序

如果不存在在真正插入

zrem key member 删除member元素
zscore key member 获取member的分数
zrank key member 获取member的排名

排名以 0 为底

ZRANK 命令的时间复杂度为 O(log(N))

在 Redis 的有序集合(ZSet)中,虽然跳表没有直接根据元素(member)进行排序,但是每个元素都与一个分数(score)关联,而跳表是根据这个分数进行排序的。因此,当我们查找一个元素时,实际上是在查找与该元素关联的分数。

zcard key 返回set的元素个数
zcount key min max 返回指定分数范围的元素个数 zcount命令其实也是通过min去找到起始位置,复杂度也为O(log(N))
zincrby key step member 步长自增
zrange key min max 返回排名区间的元素,包括 min 和 max

ZRANGE 命令的排名是从 0 开始的,也就是说,分数最小的成员排名为 0。此外,你可以使用负数来指定位置,-1 表示最后一个成员,-2 表示倒数第二个成员,以此类推。

zrange需要遍历跳表的底层链表。

要找到指定排名的元素,需要从跳表的头部开始,按照链表的顺序逐个遍历节点。这个过程的时间复杂度是 O(N)

zrangebyscore key min max 返回指定分数区间元素
zinter 交集
zdiff 差集
zunion 并集

你可能感兴趣的:(redis,redis,数据库,缓存)