我室友打了一把王者时间我学会了Redis的入门指南

编程飞哥 发表于 2022/06/13 15:30:39 2022/06/13
【摘要】 Day1、我妹打一把QQ飞车学会了Redis的入门知识 一、字符串(String)字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。划重点:一个字符串类型健可以存储的数据的最大容量是512MB.字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种角度来说只是组织字符串的形式不同。例...

Day1、我妹打一把QQ飞车学会了Redis的入门知识

一、字符串(String)

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。

划重点:一个字符串类型健可以存储的数据的最大容量是512MB.

字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种角度来说只是组织字符串的形式不同。例如,列表类型是以列表的形式组织字符串,而集合类型是以集合的形式组织字符串。

SET和GET是Redis中最简单的两个命令,它们实现的功能和编程语言中的读写变量相似,还有一点大小写都可以,一般习惯大写。

  • 设置指定key的值

SET key value

  • 获取指定key的值

GET key

例如我们设置索引为k2,值为v2的键值对数据

127.0.0.1:6379> SET K2 V2
OK
127.0.0.1:6379> GET K2
"V2"

当键不存在时会返回空结果。

127.0.0.1:6379> GET K3
(nil)
  • 返回key中字符串值的子字符
  • key为索引,start为截取的起始下标,end为截取的终止下标

GETRANGE key start end

例如创建索引“mykey”,值为“feiniao”的键值对。

127.0.0.1:6379> SET mykey feiniao
OK
127.0.0.1:6379> GET mykey
"feiniao"
127.0.0.1:6379> GETRANGE mykey 2 3
"in"

2是起始下标,从f为0下标开始数,截取2取i,终止3取n,这样是不是很好理解。

  • 获取所有(一个或多个)给定key的值

MGET key1 [key2…]

创建两个键值对,索引分别是“mykey1”和“mykey2”,值为v1,v2,然后索引为mykey3的结果空的

127.0.0.1:6379> SET mykey1 v1
OK
127.0.0.1:6379> SET mykey2 v2
OK
127.0.0.1:6379> MGET mykey1 mykey2 mykey3
1) "v1"
2) "v2"
3) (nil)

这时你有没有发现一个一个创建会不会麻烦,对了,我们还能同时创建多个键值对。

  • 同时设置多个键值对

MSET key1 value1 [key2 value2…]

同时创建两个键值对,索引为“mykey3”和“mykey4”,值为v3,v4

127.0.0.1:6379> MSET mykey3 v3 mykey4 v4
OK
127.0.0.1:6379> MGET mykey3 mykey4
1) "v3"
2) "v4"
  • 返回key所存储的字符串值的长度

STRLEN key

索引为mykey5,值为feiniao,数一下正好7个字母。

127.0.0.1:6379> SET mykey5 feiniao
OK
127.0.0.1:6379> STRLEN mykey5
(integer) 7
  • 将key中存储的数字值增一

INCR key

127.0.0.1:6379> SET mykey6 7
OK
127.0.0.1:6379> INCR mykey6
(integer) 8
  • 将key中的存储数字值减一

DECR key

127.0.0.1:6379> SET mykey7 6
OK
127.0.0.1:6379> DECR mykey7
(integer) 5
  • 将key所存储的值加上给定的增量值

INCRBY key increment

值增加5,很简单的。

127.0.0.1:6379> SET mykey7 20
OK
127.0.0.1:6379> INCRBY mykey7 5
(integer) 25
  • 如果key已经存在并且是一个字符串,APPEND命令将指定的value追加到该key原来值的末尾

APPEND key value

127.0.0.1:6379> SET mykey8 feiniao
OK
127.0.0.1:6379> APPEND mykey8 YYDS
(integer) 11
127.0.0.1:6379> GET mykey8
"feiniaoYYDS"

好了,字符串基本命令就到这,当然不止这些命令,只是指出常用的命令。
在这里插入图片描述

二、散列类型(Hash)

我们现在已经知道Redis是采用字典结构以键值对的形式存储数据的,而hash的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。

划重点:一个散列类型键可以包含至多2^32-1个字段

设置Hash数据所使用的命令不是SET,而是HMSET,你可以理解为H代表Hash的意思,M代表Map的意思,该命令的格式如下:

  • 同时将多个field-value(域-值)对设置到哈希表key中

HMSET key field1 value1 [field2 value2…]

Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

字段field为f1,f2,值为v1,v2

在这里插入图片描述

127.0.0.1:6379> HMSET mykey9 f1 v1 f2 v2
OK
127.0.0.1:6379> HGET mykey9 f1
"v1"
127.0.0.1:6379> HGET mykey9 f2
"v2"
127.0.0.1:6379> HGET mykey9 f3
(nil)
127.0.0.1:6379>
  • KEY为对应着这个Hash数据的索引

HGETALL key

当所有字段和字段值却不知道键中有哪些字段时,应该使用HGETALL命令查找所有数据

127.0.0.1:6379> HGETALL mykey9
1) "f1"
2) "v1"
3) "f2"
4) "v2"
  • 获取存储在哈希表中指定字段的值

HGET key field

127.0.0.1:6379> HGET mykey9 f1
"v1"
  • 删除一个或多个哈希表字段

HDEL key field1 [field2]

127.0.0.1:6379> HDEL mykey9 f1
(integer) 1
127.0.0.1:6379> HGETALL mykey9
1) "f2"
2) "v2"
  • 获取所有哈希表中的字段数量

HLEN key

127.0.0.1:6379> HLEN mykey9
(integer) 1
  • 获取所有哈希表中的字段,也就是获取field

HKEYS key

返回哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。

127.0.0.1:6379> HKEYS mykey9
1) "f2"
  • 有获取字段就有获取值,所有值

HVALS key

127.0.0.1:6379> HVALS mykey9
1) "v2"

三、list类型

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端增加元素,或者获得列表的某一个片段,在Redis中可以指定是在列表的头部或者尾部插入。所以你也可以把它看作是一个LinkedList结构。

  • 将一个或多个元素插入列表表头

LPUSH key value1 [value2]

127.0.0.1:6379> LPUSH mylist fn1 fn2 fn3
(integer) 3
  • 将一个或多个元素插入列表尾部

RPUSH key value1 [value2…]

127.0.0.1:6379> LPUSH mylist fn1 fn2 fn3
(integer) 3
127.0.0.1:6379> RPUSH mylist fn4 fn5 fn6
(integer) 6

经过两轮插入,列表是这样的:[fn3,fn2,fn1,fn4,fn5,fn6]

  • 获取列表长度,key为要查询长度的列表的索引

LLEN key

127.0.0.1:6379> LLEN mylist
(integer) 6
  • 通过索引获取列表中的元素

LINDEX key index

127.0.0.1:6379> LINDEX mylist 2
"fn1"
127.0.0.1:6379> LINDEX mylist 5
"fn6"
  • 移除并获取列表第一个元素,key返回第一个元素的列表的索引

LPOP key

127.0.0.1:6379> LPOP mylist
"fn3"
  • 移除并获取列表最后一个元素,返回移除最后一个元素

RPOP key

127.0.0.1:6379> RPOP mylist
"fn6"

四、set集合

集合的概念相信大家以前的数学课就了解过,在集合中的每个元素都是不同的,没有顺序。

划重点:一个集合类型set键可以存储至多2^32-1个字符串

集合类型和列表类型对比:

集合类型 列表类型
存储内容 至多2^32-1个字符串 至多2^32-1个字符串
有序性
唯一性
  • 向集合添加一个或多个成员,返回值是插入的成员的个数

SADD key member1 [member2…]

127.0.0.1:6379> SADD myset m1 m2
(integer) 2
  • 获取集合中成员的个数,返回成员个数

SCARD key

127.0.0.1:6379> SCARD myset
(integer) 2
  • 返回第一个集合与其他集合之间的差异

SDIFF key1 [key2…]

myset1相对于myset2之间的差异,"m3"和“m4”

127.0.0.1:6379> SADD myset1 m3 m4 m5
(integer) 3
127.0.0.1:6379> SADD myset2 m5 feiniao feiniao1
(integer) 3
127.0.0.1:6379> SDIFF myset1 myset2
1) "m3"
2) "m4"
  • 返回所给定所有集合的交集

SINTER key1 [key2…]

127.0.0.1:6379> SADD myset1 m3 m4 m5
(integer) 3
127.0.0.1:6379> SADD myset2 m5 feiniao feiniao1
(integer) 3
127.0.0.1:6379> SINTER myset1 myset2
1) "m5"
  • 返回集合中的所有元素

SMEMBERS key

127.0.0.1:6379> SMEMBERS myset2
1) "m5"
2) "feiniao1"
3) "feiniao"

五、有序集合类型(Zset)

有序集合类型的特点从他的名字中就可以猜到,与集合类型的区别就是“有序”二字,有序集合中的每一个元素都会关联一个double类型的分数(也可以理解为权重),redis也正是通过分数来为集合中的成员进行从小到大排序的。所以有序集合的成员是虽然唯一的,但是分数(score)却是可以重复的。

  • 向有序集合中添加一个或多个成员

ZADD key score1 member1 [score2 menber2]

127.0.0.1:6379> ZADD myzset 1 z1 2 z2 3 z3
(integer) 3
  • 获取有序集合的成员数

ZCARD key

127.0.0.1:6379> ZCARD myzset
(integer) 3
  • 计算有序集合中指定区间分数的成员数

ZCOUNT key min max

127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 3
  • 移除有序集合中的一个或多个元素

ZREM key member1 [member2…]

127.0.0.1:6379> ZREM myzset z1
(integer) 1

今天的学习暂时到这里。

赠人玫瑰,手有余香

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。