前言
Redis的命令也是非常繁多,本文只介绍一些常用的命令,更多命令还得大家从官网学习。
官网命令集地址 https://redis.io/commands/
String
对于字符串通常比较常用的有以下命令
set mset setnx get inrc decr incrby decrby
下面是对这些命令功能的介绍
set key value [expiration] # expiration 过期时间
mset key value [key value ...] # 批量存储字符串键值对
setnx key value # 该key必须是不存在的,通常在是实现Redis分布式锁时比较常用
get key # 获取
mget key [key ...] # 批量获取
del key [key ...] # 删除
expire key seconds # 如果set的时候没有设置过期,可以通过该方式设置一个键的过期时间(秒)
incr key # 给key对应的value + 1 原子操作
decr key # 给key对应的value - 1
incrby key increment # 给key对应的value + increment 原子操作
decrby key decrement # 给key对应的value - increment 原子操作
使用
127.0.0.1:7000> set name wendell
OK
127.0.0.1:7000> get name
"wendell"
127.0.0.1:7000> del name
(integer) 1
# 批量操作,假如要存入是一个对象User,对象里面经常变动的是登录时间,其它都不变,但每次更新时需要替换整个user,为了减少Redis的压力,我们可以这样分开存储,这样修改登录时间而不需要替换name。
127.0.0.1:7000> mset user:1001:name wendell user:1001:loginTime 2022-11-20-21-21-21
OK
127.0.0.1:7000> mset user:1002:name juan user:1002:loginTime 2022-11-20-20-21-21
OK
127.0.0.1:7000> mget user:1001:loginTime
1) "2022-11-20-21-21-21"
127.0.0.1:7000> mget user:1002:loginTime
1) "2022-11-20-20-21-21"
## 原子操作,可以做分布式锁,能够设置成功返回1,失败返回0
127.0.0.1:7000> setnx wendell 1
(integer) 1
127.0.0.1:7000> setnx wendell 1
(integer) 0
## incr 文章的阅读量
127.0.0.1:7000> incr article:readcount
(integer) 1
127.0.0.1:7000> incr article:readcount
(integer) 2
127.0.0.1:7000> incr article:readcount
(integer) 3
127.0.0.1:7000> get article:readcount
"3"
## 分布式序列,一次获取多个,缓存在本地。
127.0.0.1:7000> incrby seq 1000
(integer) 1000
Hash
相信大家都了解过hash结构。可以将某一类型的数据存储起来,相比于string来说更加节省空间,更低的消耗内存与cpu,在string中介绍了使用mset来存储对象。其实也可以使用hash,效果会更好些。
hash常用命令有 hset hsetnx hmset hget hmget hdel hlen hgetall hincrby
hset key filed value # key通过我们设置为某一类型的名字、filed value就与set命令使用是一样了,比如 user 1001:name wendell, user 1001:age 20
hsetnx key filed value # 与setnx类似
hmset key filed value [filed value ...] # 批量操作
hget key filed # 批量操作
hmget key filed [field ...] # 批量操作
hdel key filed # 删除某一类型中的某个filed
hlen key # 返回key有多少个 filed
hgetall key # 返回key中所有的键值对
hincrby key increment
使用
存储user对象集
127.0.0.1:7000> hmset user 1001:name wendell 1001:age 20
OK
127.0.0.1:7000> hmset user 1002:name juan 1002:age 25
OK
127.0.0.1:7000> hmget user 1001:name 1001:age
1) "wendell"
2) "20"
127.0.0.1:7000> hlen user
(integer) 4
127.0.0.1:7000> hgetall user
1) "1001:name"
2) "wendell"
3) "1001:age"
4) "20"
5) "1002:name"
6) "juan"
7) "1002:age"
8) "25"
127.0.0.1:7000> hdel user 1001:name 1001:age
(integer) 2
127.0.0.1:7000> hgetall user
1) "1002:name"
2) "juan"
3) "1002:age"
4) "25"
注意点
过期功能不能使用在filed上,只能用在key上
Redis服务端端集群的架构下不是很适合使用。举个例子,假如有一个bigkey,我们希望的是能在Redis集群中均匀存储。但是由于key只有一个。只会落在一台机器,严重会导致雪崩效应。
List
常用的数据结构
stack 栈 lpush lpop
queue 队列 lpush rpop
blocking mq 阻塞队列 lpush brpop
lpush key value [value ...] # 将value插入到key列表的表头
rpush key value [value ...] # 将插入到key列表的表尾
lpop key value # 将插入到key列表的表尾(最右边)
rpop key value # 移除并返回key列表的尾元素
lrange key start stop # 返回列表key中指定区间内的元素,区间以偏移量start和stop指定
blpop key [key ...] timeout # 从表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待
brpop key [key ...] timeout # 从表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待
使用
127.0.0.1:7000> lpush wendell 1001
(integer) 1
127.0.0.1:7000> lpush wendell 1002
(integer) 2
127.0.0.1:7000> lrange wendell 0 4
1) "1002"
2) "1001"
Set
set的常用命令如下,与java语言的set的功能非常相像。
sadd key member [member ...] # 添加一个成员
srem key member [member ...] # 删除一个成员
smembers key # 列出成员
scard key # 计算个数
sismember key member # 判断是否存在
srandmember key [count] # 从集合中选出count个元素,元素不从key中删除
spop key [count] # 从集合中选出count个元素,元素从key中删除
sinter key [key ...] # 交集运算
sinterstore destination key [key ...] # 将交集结果存入新集合destination中
sunion key [key ...] # 并集运算
sunionstore destination key [key ...] # 将并集结果存入新集合destination中
sdiff key [key ...] # 差集运算
sdissstore destination key [key ...] # 将差集结果存入新集合destination中
抽奖
可以将抽奖key这样定义 cj:10001 cj为抽奖,10001本次抽奖id号,将所有成员录入进去,使用srandmember随机抽奖。
127.0.0.1:7000> sadd cj:10001 wendell juan jaun1 juan2 juan3 juan4 juan6 jaun7
(integer) 8
127.0.0.1:7000> srandmember cj:10001 2
1) "juan4"
2) "juan2"
127.0.0.1:7000> srandmember cj:10001 2
1) "wendell"
2) "jaun1"
获取点赞成员
今天发布了一篇Redis文章,该文章编号为 redis:1001作为redis中的key,value为点赞成员
127.0.0.1:7000> sadd redis:1001 wendell juan
(integer) 2
# 查看点赞人数
127.0.0.1:7000> scard redis:1001
(integer) 2
# 查看点赞成员
127.0.0.1:7000> SMEMBERS redis:1001
1) "wendell"
2) "juan"
微信计算共同好友
假如wendell 的微信有 w1 w2 w3 j1 好友,juan的微信有 j1 j2 j3 w1 好友。
计算 wendell 与 juan 的共同好友
计算 juan可能认识的人
127.0.0.1:7000> sadd wendell w1 w2 w3 j1
(integer) 4
127.0.0.1:7000> sadd juan j1 j2 j3 w1
(integer) 4
# 共同好友
127.0.0.1:7000> sinter wendell juan
1) "j1"
2) "w1"
# juan可能认识的人
127.0.0.1:7000> sdiff wendell juan
1) "w2"
2) "w3"
# wendell可能认识的人
127.0.0.1:7000> sdiff juan wendell
1) "j2"
2) "j3"
zset
zset相比于set多了一个分值 score ,有了这个值我们就能很轻松的做一些排行的功能
常用命令如下
zadd key score member [[score member] ...] # 添加
zrem key member # 删除
zscore key member # 返回有序集合key中元素member的分值
zincrby key increment member # 为有序集合key中元素member的分值加上increment
zcard key # 返回元素个数
zrange key start stop [WITHSCORES] # 正序获取从start下标到stop下标的元素
zrevrange key start stop [WITHSCORES] # 倒序获取从start下标到stop下标的元素
zunionstore destkey numkeys key [key ...] # 并集计算
zinterstore destkey numkeys key [key ...] # 交集计算
热搜排行
比如根据点击量给今天的微博热搜排行,今日微博key命名为 weibo:20221120,每个话题点击一次,该话题的分数就加一,最后使用zrevrange列出排行。
127.0.0.1:7000> zincrby weibo:20221120 1 世界杯
"1"
127.0.0.1:7000> zincrby weibo:20221120 1 世界杯
"2"
127.0.0.1:7000> zincrby weibo:20221120 1 世界杯
"3"
127.0.0.1:7000> zincrby weibo:20221120 1 世界杯
"4"
127.0.0.1:7000> zincrby weibo:20221120 1 EDG
"1"
127.0.0.1:7000> zincrby weibo:20221120 1 EDG
"2"
127.0.0.1:7000> zincrby weibo:20221120 1 EDG
"3"
127.0.0.1:7000> zrevrange weibo:20221120 0 9 withscores
1) "\xe4\xb8\x96\xe7\x95\x8c\xe6\x9d\xaf"
2) "4"
3) "EDG"
4) "3"
Redis的基础命令使用就到这了,其他命令大家可以去官网了解下。
欢迎关注,学习不迷路!