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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Day2、我室友打了一把王者时间我学会了Redis的入门指南


大家好,我是飞鸟,上次学习Redis的总结没有写,今天补上,如果文章对你有帮助,点赞,关注支持一下小编🤞

推荐阅读:

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


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

今天的学习暂时到这里。

赠人玫瑰,手有余香



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
121 1
springboot的缓存和redis缓存,入门级别教程
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
66 8
|
4月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
4月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
4月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
4月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
4月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
4月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。