Redis5.x五种数据类型常见命令(redis五种基本数据类型)

网友投稿 271 2022-06-21


第三章 · 命令

按照第一章 准备工作中的步骤,我们通过redis-cli命令进入redis命令行交互。

本章节将围绕上一章节的数据类型,针对不同的数据类型操作不同的Redis命令。

字符串(string)

读/写/删简单命令

写命令通过set关键字实现,set [key] [value]。

127.0.0.1:6379> set hello world

OK

读命令通过get关键字实现,get [key]。

127.0.0.1:6379> get hello

"world"

删除命令通过del关键字实现(删除命令可以适用于所有的数据类型),del [key]。

127.0.0.1:6379> del hello

(integer) 1

字符串数据类型还有一个mset表示同时写入一个或多个字符串值,mset [key1] [value1] [key2] [value2]。

127.0.0.1:6379> mset key1 value1 key2 value2

OK

自增/自减命令

自增+1命令通过incr关键字实现,incr [key]。

127.0.0.1:6379> set hello 1 #写入key为hello的值为1

OK

127.0.0.1:6379> get hello#读取key为hello的值

"1"

127.0.0.1:6379> incr hello #将key为hello的值自增+1

(integer) 2

127.0.0.1:6379> get hello#读取key为hello的值

"2"

自减-1命令通过decr关键字实现,decr [key]。

127.0.0.1:6379> set world 1 #写入key为world的值为1

OK

127.0.0.1:6379> get world#读取key为world的值

"1"

127.0.0.1:6379> decr world #将key为world的值自减-1

(integer) 0

127.0.0.1:6379> get world#读取key为world的值

"0"

自增任意整数通过incrby实现,incrby [key] [number]。

127.0.0.1:6379> set coderbuff 1 #写入key为coderbuff的值为1

OK

127.0.0.1:6379> get coderbuff #读取key为coderbuff的值

"1"

127.0.0.1:6379> incrby coderbuff 10 #将key为coderbuff的值自增+10

(integer) 11

127.0.0.1:6379> get coderbuff #读取key为coderbuff的值

"11"

自减任意整数通过decrby实现,decrby [key] [number]。

127.0.0.1:6379> set coderbook 1 #写入key为coderbook的值为1

OK

127.0.0.1:6379> get coderbook #读取key为coderbook的值

"1"

127.0.0.1:6379> decrby coderbook 10 #将key为coderbook的值自增-10

(integer) -9

127.0.0.1:6379> get coderbook #读取key为coderbook的值

"-9"

自增任意浮点数通过incrbyfloat,incrbyfloat [key] [float]。

127.0.0.1:6379> set coderchat 1 #写入key为coderchat的值为1

OK

127.0.0.1:6379> get coderchat #读取key为coderchat的值

"1"

127.0.0.1:6379> incrbyfloat coderchat 1.1 #将key为coderchat的值自增+1.1

"2.1"

127.0.0.1:6379> get coderchat #读取key为coderchat的值

"2.1"

字符串操作命令

redis中对字符串类型的数据类型不仅可以使用上述命令,它甚至还能像Java一样进行值得追加、获取子串等。

追加value值给指定key到末尾通过append,apppend [key] [append_string]。

127.0.0.1:6379> set say hello #写入key为say的值为hello

OK

127.0.0.1:6379> get say#读取key为say的值

"hello"

127.0.0.1:6379> append say world #在key为say的value值末尾追加world

(integer) 10#返回key当前value值得长度

127.0.0.1:6379> get say#读取key为say的值

"helloworld"

接着这个示例,通过命令getrange获取子字符串,getrange [key] [start] [end]。

127.0.0.1:6379> getrange say 1 10 #获取位于位置1到10的子字符串

"elloworld"

127.0.0.1:6379> get say #可以看到,尽管我们上面获取了子字符串,但并未修改原字符串

"helloworld"

同样是这个示例,我们通过命令setrange替换子字符串为给定值,我们会给出两个关键参数,第一个参数是[start]表示从哪里开始替换,第二个参数是[value]表示替换的内容,setrange [key] [start] [value]。

127.0.0.1:6379> setrange say 1 i

(integer) 10

127.0.0.1:6379> get say

"hilloworld"

二进制位命令

任何数据在操作系统中都是以二进制位形式存储的,字符串类型中redis提供了对其进行二进制位操作。通常情况下运用可能不多,但可以通过它实现一些“巧妙”的设计。

例如,在钉钉消息中,我们发送一条消息会显示“已读”和“未读”的人,我们需要将这两个信息存储在redis中,应该怎么设计?

我们设计一条消息的key值结构为“[user_id]:[msg_id]”,所以key=“1:100”就表示“用户ID为1发送的消息ID为100”。注意,此时如果用户ID=2的人读了这条消息,就通过命令setbit 1:100 2 1写入,如果用户ID=100的人读了这条消息,就通过setbit 1:100 10 1。这条命令的含义表示对key=1:100的二进制第2位写入1,对key=1:100的二进制第10位写入1,1表示已读,0则表示未读。

127.0.0.1:6379> set 1:100 0#定义key=1:100,表示用户ID为1发出的消息ID为100的消息

OK

127.0.0.1:6379> setbit 1:100 0 0 #初始化1:100的第0位到第10位的二进制为0,表示刚发出来都是未读。

(integer) 0

127.0.0.1:6379> setbit 1:100 1 0

(integer) 0

127.0.0.1:6379> setbit 1:100 2 0

(integer) 1

127.0.0.1:6379> setbit 1:100 3 0

(integer) 1

127.0.0.1:6379> setbit 1:100 4 0

(integer) 0

127.0.0.1:6379> setbit 1:100 5 0

(integer) 0

127.0.0.1:6379> setbit 1:100 6 0

(integer) 0

127.0.0.1:6379> setbit 1:100 7 0

(integer) 0

127.0.0.1:6379> setbit 1:100 8 0

(integer) 0

127.0.0.1:6379> setbit 1:100 9 0

(integer) 0

127.0.0.1:6379> setbit 1:100 10 0

上面我们就初始化好了一个bitmap(位图)。接下来,当用户ID=2和用户ID=10读了这条消息。

127.0.0.1:6379> setbit 1:100 1 1 #实际上,发出消息的同时,自己也已读了

(integer) 0

127.0.0.1:6379> setbit 1:100 2 1 #用户ID=2读了这条消息

(integer) 0

127.0.0.1:6379> setbit 1:100 10 1 #用户ID=10读了这条消息

(integer) 0

我们通过getbit命令可以判断出哪些用户是否已读这条消息,例如,我们判断用户ID=3是否已读这条消息。

127.0.0.1:6379> getbit 1:100 3 #读取key为1:100的二进制位第3位二进制值

(integer) 0 #返回0,表示未读

判断用户ID=10是否已读这条消息。

127.0.0.1:6379> getbit 1:100 10 #读取key为1:100的二进制位第10位二进制值

(integer) 1 #返回1,表示已读

我们还可以通过bitcount统计值为1的数量,也就是有多少人已读这条消息。

127.0.0.1:6379> bitcount 1:100 #统计二进制位为1的数量

(integer) 3 #只有3个,和我们上面的假定一致,用户自己(用户ID=1)和用户ID=2、用户ID=10的用户读了这条消息

最后还有一个关于二进制位的命令bittop [operation] [result] [key1] [key2],可以对多个key值的二进制位进行二进制运算,包括并AND、或OR、异或XOR、非NOT,计算结果保存在[result]中。

列表(list)

推入/弹出常用命令

通过rpush、lpush,将一个或多个值向右或向左推入。

rpush [key] [value1] [value2],将value值推入到列表的右端。

lpush [key] [value1] [value2],将value值推入到列表的左端。

127.0.0.1:6379> rpush books java #向列表key值为books的右侧推入value值java

(integer) 1

127.0.0.1:6379> lpush books c #向列表key值为books的左侧推入value值c

(integer) 2

127.0.0.1:6379> rpush books python #向列表key值为books的右侧推入value值python

(integer) 3

127.0.0.1:6379> lrange books 0 -1 #查看列表key值为books的值

1) "c"

2) "java"

3) "python"

接着上面的示例,通过rpop、lpop,移除并返回列表中最后端、最左端的元素。

rpop [key],移除列表最后端的元素。

lpop [key],移除列表最左端的元素。

127.0.0.1:6379> rpop books#移除列表key值为books最右端的元素并返回

"python"

127.0.0.1:6379> lrange books 0 -1 #查看列表key为books的所有元素

1) "c"

2) "java"

127.0.0.1:6379> lpop books#移除列表key值为books最左端的元素并返回

"c"

127.0.0.1:6379> lrange books 0 -1 #查看列表key为books的所有元素

1) "java"

在介绍完推入和弹出命令后,接下来将介绍与列表范围查看的命令。

lrange [key] [start] [end]命令用于返回列表从[start]到[end]位置范围内的所有元素,注意,位于[start]、[end]的元素也会被返回,上面的例子已经出现过该命令。

127.0.0.1:6379> rpush level A B C D #对列表key为level的右侧连续推入value:A B C D

(integer) 4

127.0.0.1:6379> lrange level 0 1 #返回key为level的位置0~1的元素

1) "A"

2) "B"

127.0.0.1:6379> lrange level 0 -1 #查看列表key为level的所有元素

1) "A"

2) "B"

2) "C"

2) "D"

lindex [key] [index]命令用于返回指定位置[index]的元素,仍然使用上述示例。

127.0.0.1:6379> lindex level 3

"D"

lrange和lindex均不会修改原本的列表值,但ltrim则用于“修建”列表值。

ltrim [key] [start] [end]表示只保留列表从[start]到[end]范围的所有元素,注意,包含位于[start]、[end]的元素,同样采用上述示例。

127.0.0.1:6379> lrange level 0 -1 #查看列表key为level的所有元素

1) "A"

2) "B"

2) "C"

2) "D"

127.0.0.1:6379> ltrim level 1 2 #保留列表位置为1~2的元素

OK

127.0.0.1:6379> lrange level 0 -1 #查看列表key为level的所有元素

1) "B"

2) "C"

列表基本的命令就是上面这些,还有一些比较“高级”的命令:将元素从一个队列移动到另外一个队列,或者阻塞式的执行弹出命令知道有新元素新加入到列表中。在这里就不再介绍,后面章节在介绍到redis的一些应用时再讲。

哈希(hash)

hmset命令可写入hash类型的值,hmset [key] [field1] [value1] [field2] [value2]。

127.0.0.1:6379> hmset okevin name kevin sex male

OK

hmget命令可读取hash类型的值,hmget [key] [field]。

127.0.0.1:6379> hmget okevin name

1) "kevin"

hlen返回hash包含的键值对数量,hlen [key]。

127.0.0.1


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:第一章 · 准备工作(第一章疯皇子)
下一篇:Jedis客户端以及redis中的pipeline批量操作(redisson pipeline)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~