rodert单排学习redis入门【黑铁】2

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: rodert单排学习redis入门【黑铁】

rodert单排学习redis入门【黑铁】1:https://developer.aliyun.com/article/1536246

6.五类数据结构

6.0.说明

类型中会涉及到很多的 Redis 操作命令,一定耐心看完,优化的基础是要了解。

6.1.介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。


redis是非常优秀的缓存工具,熟练使用redis,可以让我们的开发进一步。


对于下面操作,可以通过 redis-cli 工具连接使用


6.2.Redis keys

关于key的几条规则,一定不要以为它们不重要,了解一些对你排查问题至关重要。


Redis key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个 JPEG 文件的内容都可以。空字符串也是有效 key 值。


关于key的几条规则:


太长的键值不是个好主意,例如1024字节的键值就不是个好主意,不仅因为消耗内存,而且在数据中查找这类键值的计算成本很高。

太短的键值通常也不是好主意,如果你要用”u:1000:pwd”来代替”user:1000:password”,这没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于**key object和value object**本身来说很小。当然,没人阻止您一定要用更短的键值节省一丁点儿空间。

最好坚持一种模式。例如:”object-type:uid:field”就是个不错的注意,像这样”user:1000:password”。我喜欢对多单词的字段名中加上一个点,就像这样:”comment:q1234:reply.to”。

6.2.字符串(strings)

二进制安全的字符串


字符串方式是redis最简单的数据类型,redis就像一个可以持久化的memcached服务器。


基本的操作方式**get 和 set **方式

> set mykey somevalue
OK
> get mykey
"somevalue"

例如:当key存在时,set会失败。值的长度不能超过512MB。

  • 一个有趣的操作,原子递增,
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152

INCR 命令将字符串解析成整型,将其加一,再将结果保存成新的字符串,类似的命令还有 INCRBY , DECRDECRBY

还有一个有趣的命令, GETSET 命令:设置新值,返回原值。这个操作有什么用?在我们需要保证原子性操作时MSET 和 MGET 是批量操作

> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"

MGET 命令返回由值组成的数组。

  • 修改和查询存在操作

exists:判断键是否存在,del:删除指定键

> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0

TYPE 命令返回key对应的存储类型

> set mykey x
OK
> type mykey
string
> del mykey
(integer) 1
> type mykey
none


  • Redis超时

key 设置**超时**。精度可以使用毫秒或秒。

> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)

使用了 EXPIRE 来设置超时时间(也可以再次调用这个命令来改变超时时间,使用 PERSIST 命令去除超时时间 )。我们也可以在创建值的时候设置超时时间:

> set key 100 ex 10
OK
> ttl key
(integer) 9

TTL 命令用来查看key对应的值剩余存活时间。

6.3.列表(Lists)

值得注意的:Redis lists 基于 Linked Lists 实现。

**Redis 列表**是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

  • Redis Lists 入门
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"

从右边(尾部)插入俩个元素,左边(头部)插入一个元素,**LRANGE **打印所有(0,-1)元素。


**Redis Lists**常用指令

BLPOP key1 [key2 ] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。


BRPOP key1 [key2 ] timeout

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。


BRPOPLPUSH source destination timeout

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。


LINDEX key index

通过索引获取列表中的元素


LINSERT key BEFORE|AFTER pivot value

在列表的元素前或者后插入元素


说明:Redis Linsert 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果 key 不是列表类型,返回一个错误。


实例:

redis> RPUSH mylist "Hello"
(integer) 1
redis> RPUSH mylist "World"
(integer) 2
redis> LINSERT mylist BEFORE "World" "There"
(integer) 3
redis> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
redis> 

LLEN key

获取列表长度

LPOP key

移出并获取列表的第一个元素

LPUSH key value1 [value2]

将一个或多个值插入到列表头部

LPUSHX key value

将一个值插入到已存在的列表头部

LRANGE key start stop

获取列表指定范围内的元素

LREM key count value

移除列表元素

count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。

LSET key index value

通过索引设置列表元素的值

LTRIM key start stop

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

注意:下标从0开始

RPOP key

移除列表的最后一个元素,返回值为移除的元素。


RPOPLPUSH source destination

移除列表的最后一个元素,并将该元素添加到另一个列表并返回。


RPUSH key value1 [value2]

在列表中添加一个或多个值


RPUSHX key value

为已存在的列表添加值

6.4.哈希(Hash)

Redis hash 是一个 string 类型的 field value 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

序号  命令及描述
1 HDEL key field1 [field2] 
删除一个或多个哈希表字段
2 HEXISTS key field 
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 
获取存储在哈希表中指定字段的值。
4 HGETALL key 
获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 
为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment 
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7 HKEYS key 
获取所有哈希表中的字段
8 HLEN key 
获取哈希表中字段的数量
9 HMGET key field1 [field2] 
获取所有给定字段的值
10  HMSET key field1 value1 [field2 value2 ] 
同时将多个 field-value (域-值)对设置到哈希表 key 中。
11  HSET key field value 
将哈希表 key 中的字段 field 的值设为 value 。
12  HSETNX key field value 
只有在字段 field 不存在时,设置哈希表字段的值。
13  HVALS key 
获取哈希表中所有值。
14  HSCAN key cursor [MATCH pattern] [COUNT count] 
迭代哈希表中的键值对。

参考:https://www.runoob.com/redis/redis-hashes.html

6.5.集合(Set)

Redis 的 Set String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中**集合 **是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

序号  命令及描述
1 SADD key member1 [member2] 
向集合添加一个或多个成员
2 SCARD key 
获取集合的成员数
3 SDIFF key1 [key2] 
返回给定所有集合的差集
4 SDIFFSTORE destination key1 [key2] 
返回给定所有集合的差集并存储在 destination 中
5 SINTER key1 [key2] 
返回给定所有集合的交集
6 SINTERSTORE destination key1 [key2] 
返回给定所有集合的交集并存储在 destination 中
7 SISMEMBER key member 
判断 member 元素是否是集合 key 的成员
8 SMEMBERS key 
返回集合中的所有成员
9 SMOVE source destination member 
将 member 元素从 source 集合移动到 destination 集合
10  SPOP key 
移除并返回集合中的一个随机元素
11  SRANDMEMBER key [count] 
返回集合中一个或多个随机数
12  SREM key member1 [member2] 
移除集合中一个或多个成员
13  SUNION key1 [key2] 
返回所有给定集合的并集
14  SUNIONSTORE destination key1 [key2] 
所有给定集合的并集存储在 destination 集合中
15  SSCAN key cursor [MATCH pattern] [COUNT count] 
迭代集合中的元素

参考:https://www.runoob.com/redis/redis-sets.html

6.6.有序集合(sorted set)

  1. Redis **有序集合 集合 **一样也是 string 类型元素的集合,且不允许重复的成员。
  2. 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
  1. 有序集合的成员是唯一的,但分数(score)却可以重复。
  2. 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
序号  命令及描述
1 ZADD key score1 member1 [score2 member2] 
向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 
获取有序集合的成员数
3 ZCOUNT key min max 
计算在有序集合中指定区间分数的成员数
4 ZINCRBY key increment member 
有序集合中对指定成员的分数加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
6 ZLEXCOUNT key min max 
在有序集合中计算指定字典区间内成员数量
7 ZRANGE key start stop [WITHSCORES] 
通过索引区间返回有序集合指定区间内的成员
8 ZRANGEBYLEX key min max [LIMIT offset count] 
通过字典区间返回有序集合的成员
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 
通过分数返回有序集合指定区间内的成员
10  ZRANK key member 
返回有序集合中指定成员的索引
11  ZREM key member [member ...] 
移除有序集合中的一个或多个成员
12  ZREMRANGEBYLEX key min max 
移除有序集合中给定的字典区间的所有成员
13  ZREMRANGEBYRANK key start stop 
移除有序集合中给定的排名区间的所有成员
14  ZREMRANGEBYSCORE key min max 
移除有序集合中给定的分数区间的所有成员
15  ZREVRANGE key start stop [WITHSCORES] 
返回有序集中指定区间内的成员,通过索引,分数从高到低
16  ZREVRANGEBYSCORE key max min [WITHSCORES] 
返回有序集中指定分数区间内的成员,分数从高到低排序
17  ZREVRANK key member 
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18  ZSCORE key member 
返回有序集中,成员的分数值
19  ZUNIONSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的并集,并存储在新的 key 中
20  ZSCAN key cursor [MATCH pattern] [COUNT count] 
迭代有序集合中的元素(包括元素成员和元素分值)

7.Redis常用

如果你读到在这里,相信你对 Redis 已经有了一定了解,入门就先简单学到这里,下篇一起上**青铜**。

后面的篇章,还将继续介绍 Redis 的一些高级用法,缓存击穿、缓存雪崩,源码分析等。看后不忘三连,还有需要更多技术博文可以留言催更。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2天前
|
负载均衡 NoSQL 关系型数据库
Redis分布式锁学习总结
Redis分布式锁学习总结
5 0
|
9天前
|
NoSQL 数据可视化 Java
rodert单排学习redis进阶【白银一】
rodert单排学习redis进阶【白银一】
11 0
|
9天前
|
NoSQL Redis 数据库
rodert单排学习redis进阶【青铜】2
rodert单排学习redis进阶【青铜】
13 0
|
9天前
|
缓存 NoSQL Java
rodert单排学习redis进阶【青铜】1
rodert单排学习redis进阶【青铜】
18 0
|
存储 NoSQL Redis
Redis学习一(基础入门).
一、前言     Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、key-Value 的数据库、并提供多种语言的API。     通常,Redis 将数据存储于内存中,或被配置为使用虚拟内存。
2493 0
|
1月前
|
NoSQL Linux 网络安全
Linux安装Redis(详细教程)
Linux安装Redis(详细教程)
98 2
|
30天前
|
NoSQL Linux Redis
Redis -- 安装客户端redis-plus-plus
Redis -- 安装客户端redis-plus-plus
55 0
|
4天前
|
NoSQL Redis Windows
win10下Redis安装、启动教程
win10下Redis安装、启动教程
14 2
|
6天前
|
消息中间件 缓存 NoSQL
Redis单实例安装
Redis单实例安装
16 1
|
9天前
|
NoSQL Linux 网络安全
基于 centOS7 的 redis 安装
基于 centOS7 的 redis 安装
39 1

热门文章

最新文章