Redis 基础命令

前言

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的基础命令使用就到这了,其他命令大家可以去官网了解下。


欢迎关注,学习不迷路!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容