Code前端首页关于Code前端联系我们

Redis通用教程:数据结构类型、与其他数据库和缓存系统的比较

terry 2年前 (2023-09-26) 阅读数 45 #数据库

Redis通用教程旨在让大家对Redis有一个概念性和总体性的了解,为快速上手并为深入了解Redis奠定基础。

文章摘要:

  1. Redis简介
  2. Redis与其他数据库的对比
  3. Redisin♶数据♶缓存实现类型对比Redis命令功能多种数据types
  4. Spring Data Redis 使用多种数据类型
  5. ZSet(有序集) 保证顺序
  6. 集(Set) 我得到随机元素

断开到redis

redis 是一个非降级数据库(非放置数据库称为 nosql)。

Redis 是一个远程内存数据库。 Redis 客户端可以通过 TCP 协议向服务器请求。

Redis性能强劲,支持持久化和复制,可以轻松存储和读取海量数据。

Redis 有多快? Redis 附带了一个名为 redis-benchmark 的工具来模拟 N 个客户端同时发送 M 个请求。可以通过redis-benchmark -h命令查看参数。

下面测试了百万次SET和GET操作的性能:

$ redis-benchmark -n 1000000 -t set,get -P 16 –q
SET: 198098.27 requests per second
GET: 351988.72 requests per second
复制代码

Redis与其他数据库的比较

如果局限于一处,很容易“只见森林”而不见森林树。 ,或者“你手里的那个”拿着锤子,一切看起来都像钉子。

所以我们先和市场上常用的数据库系统进行横向比较,以便大家更直观地感受到Redis的特点。 Redis通识教程:数据结构类型、与其他数据库及缓存系统的对比

Redis与其他缓存实现的比较

同时Redis是一种常用的缓存实现。我们还比较了常用缓存实现的优缺点。 Redis通识教程:数据结构类型、与其他数据库及缓存系统的对比

Redis 数据类型

Redis 5 引入了新的流数据类型(Stream data type)。在此之前,Redis 可以存储键和 5 种不同数据结构类型之间的映射。这五种数据结构类型分别是STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合)。

Redis 中 5 种数据类型概述

数字 结构类型 结构体 STRING 中存储的值 字符串、整数、浮点数 执行以下操作整个字符串或它的一部分;对整数和浮点数进行加法或减法运算
2LIST 链表,链表的每个节点都包含一个字符串 从链表两端推送或弹出元素;按偏移量修剪链表;读取单个或多个元素;按值查找或删除元素
3SET包含字符串和不可重复项的无序集合插入、获取和删除单个元素;检查数组中是否存在元素;计算交集、并集和分离;从集合中随机获取元素
4HASH包含键值对的无序哈希表插入、获取、删除一个键值对;获取所有键值
5ZSET字符串成员(成员)和浮点(计数)之间的有序映射。元素的顺序由点的大小决定添加、获取和删除单个元素;通过

获取分数(范围)或会员元 Redis 命令使用 5 种数据类型

STRING 命令

字符串函数

SETs 最基本的 获取DEL功能。它还支持许多复杂的功能,下面简单介绍一下。

数字命令描述
1设置键值设置指定键值G❙❙❙指定键的值
3DEL键删除该键及其对应的值。命令可用于五种数据类型
4GETRANGE 键开始 结束返回
5w 键值的小写字符以及SETRANGE 键的溢出值。 value 参数 设置从偏移量 offset
6STRLEN 开始存储在键中的字符串的值 key 返回存储在键

中的字符串的值。这里简单介绍一下命令函数字符串:SETEX和SETNX

SETEX和SETNX对于做分布式锁非常有用。

数字命令描述
1SETEX 键秒值将结束值附加到第二个键 (s) (s) SETNX 键值 仅当没有键时才设置键值存在

数字功能

对于数字,支持以下功能: ❙❙ 描述

1INCR 键 将是键放大2INCRBY键添加以给定的增加值(增量)3INCRBYFLOATddddd 增加存储在键值中。吃点递增值(递增) 4DECR 键 将键中存储的数值减一 5DECRBY 键递减键 这里简单介绍一下命令:
127.0.0.1:6379> SET key-num 0
OK
127.0.0.1:6379> INCR key-num
(integer) 1
127.0.0.1:6379> GET key-num
"1"
127.0.0.1:6379> INCR key-num
(integer) 2
127.0.0.1:6379> GET key-num
"2"
127.0.0.1:6379> INCR key-num
(integer) 3
127.0.0.1:6379> GET key-num
"3"
127.0.0.1:6379> INCRBY key-num 100
(integer) 103
127.0.0.1:6379> GET key-num
"103"
127.0.0.1:6379> INCRBY key-num 100
(integer) 203
127.0.0.1:6379> DECR key-num
(integer) 202
127.0.0.1:6379> DECRBY key-num 100
(integer) 102
127.0.0.1:6379> DECRBY key-num 100
(integer) 2
127.0.0.1:6379> DECRBY key-num 100
(integer) -98
复制代码

批量功能

编号 命令 说明 。 按值键检索所有(一个或多个)
2MSET 键值 [键值...]同时设置一对或多对键值
3MSETNX 键值 [键值...]当且仅当所有给定键都不存在时,同时设置一个或多个键值对
127.0.0.1:6379> MSET a 1 b 2 c 3
OK
127.0.0.1:6379> MGET a b c
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> MSETNX a 1 b 2 c 3
(integer) 0
127.0.0.1:6379> MSETNX a 1 b 2 d 4
(integer) 0
127.0.0.1:6379> MSETNX d 4 e 5
(integer) 1
127.0.0.1:6379>
复制代码

BIT 函数

数字 命令 ❙❙ 描述❝ TB❙ 已存储密钥string value ,获取指定偏移量的位
2SETBIT key offset value对于 key 中存储的字符串值,设置或清除指定 offset 的位
3 BIT COUNT key [start] [end] 字符串中设置的位数
4BITOP 函数 destkey key [key .. .] 在多个键之间执行按位运算(包括字符串值) 应用并将结果存储到目标键中。

LIST 命令

Redis 的独特功能之一是它支持链表结构。以下是使用链表结构的命令。了解这些命令对于掌握Redis链表结构非常重要。

编号 命令 描述
1BLPOP key1 [key2 ] 超时 删除并获取列表的第一个元素。如果列表中没有元素,它会阻塞列表,直到等待时间到期或找到弹出元素。 。
2BRPOP key1 [key2 ] 超时 删除并检索列表的最后一个元素。如果列表中没有元素,它会阻塞列表,直到超时或找到弹出窗口。
3BRPOPLPUSH源项超时从列表中打开一个值,将弹出元素添加到另一个列表中,然后返回;如果列表中没有元素,它会阻塞列表,直到等待时间到期或找到弹出元素。
4LINDEX 键索引按索引查找列表中的元素
5LINSERT 键 BEFOREAFTER 枢轴值
1AFTER 枢轴值
1
7LPOP 键移出并获取列表的第一个元素
8LPUSH key value1 [value2]在列表开头添加一个或多个值
9LPUSHX key value在头部ofert一个值现有列表
10LRANGE -键开始停止查找列表指定范围内包含的元素
11LREM键值删除列表元素
10索引值索引为
13L的列表元素TRIM键启动stop 剪切列表,即让列表只保留指定范围内的元素,不在指定范围内的元素被移除。
14RPOP键删除列表的最后一个元素,所以返回值为被删除的元素。
15RPOPLPUSH 源项目删除列表的最后一个元素,并将该元素添加到另一个列表并返回
16RPUSH 键值 1 [值 2]❝
  • RPUSHX 键值
  • 为现有列表添加价值
    127.0.0.1:6379> LPUSH list1 1
    (integer) 1
    127.0.0.1:6379> RPOP list1
    "1"
    127.0.0.1:6379> RPOP list1
    (nil)
    127.0.0.1:6379> BRPOP list1 10
    (nil)
    (10.10s)
    127.0.0.1:6379>
    127.0.0.1:6379> LPUSH list1 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LSET list1 4 50
    OK
    127.0.0.1:6379> LSET list1 5 50
    (error) ERR index out of range
    复制代码

    其中 BLPOP

    15 BRPOP BRPOPLPUSH 阻塞,通常用在消息队列中间。

    SET命令

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

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

    Redis限制每个key只能存储5.12亿条数据,最大集合成员数为232-1(4294967295,每个集合可以容纳超过40亿个成员)。

    编号命令描述
    1SADD关键成员1 [成员2]将一名或多名成员添加到ARD❀。 检索系列成员的数量
    3SDIFF key1 [key2]返回所有给定集合的差异集
    4SDIFFSTORE目标key1 [key2]返回所有给定集合的差异集和将其存储在 key 2 返回所有给定集合交集的集合
    6SINTERSTORE 目标 key1 [key2] 返回所有给定集合的交集并将其存储在目标中。 set key
    8SMEMBERS key 返回集合中的所有成员
    9MOVE 源目标成员 从源集合中移动成员元素 SP 删除并返回收藏
    11SRANDMEMBER key [count] 从集合中返回一个或多个随机数
    12SREM key member1 [member2] Key COUNT count]迭代集合的元素
    127.0.0.1:6379> SADD set1 a b c d e
    (integer) 5
    127.0.0.1:6379> SCARD set
    (integer) 0
    127.0.0.1:6379> SCARD set1
    (integer) 5
    127.0.0.1:6379> SISMEMBER set1 f
    (integer) 0
    127.0.0.1:6379> SISMEMBER set1 e
    (integer) 1
    127.0.0.1:6379> SMEMBERS set1
    1) "d"
    2) "c"
    3) "a"
    4) "b"
    5) "e"
    127.0.0.1:6379> SPOP set1
    "d"
    127.0.0.1:6379> SPOP set1
    "a"
    127.0.0.1:6379> SMOVE set1 set2 b
    (integer) 1
    127.0.0.1:6379> SMOVE set1 set2 c
    (integer) 1
    127.0.0.1:6379> SMEMBERS set2
    1) "b"
    2) "c"
    复制代码

    SPOP对于随机性来说,可以作为彩票等业务场景的基础实现。

    HASH命令

    Redis哈希是字符串类型字段和值的映射表。它类似于Java语言的map结构。哈希特别适合存储对象。† 查看哈希表键并判断字段是否存在

    3HGET键字段检索哈希表中存储的指定字段的值4HGETALL键检索所有字段和值​​指定调♺ NC♺❙ 在 H 调中。字段增量是哈希表键中指定字段的整数加上增量6HINCRBYFLOAT键字段增量是哈希表中指定字段❙♻HK❙❙❀❀的浮点值。 key 获取所有哈希表字段 8HLEN key 获取哈希表字段数量 9HMGET key field 1 [field2] value 10HMSET key field1 value1 [field2 value2] 同时设置多个字段值(字段值)对为哈希表键 11HSET键字段值字段值设置为值12HSETNX键字段值设置哈希表字段值仅当字段字段不存在时。 HVALS 键
    127.0.0.1:6379> HSET User001 name "Tom"
    (integer) 1
    127.0.0.1:6379> HSET User001 birthday "1990-01-20"
    (integer) 1
    127.0.0.1:6379> HSET User001 gender "Man"
    (integer) 1
    127.0.0.1:6379> HKEYS User001
    1) "name"
    2) "birthday"
    3) "gender"
    127.0.0.1:6379> HGETALL User001
    1) "name"
    2) "Tom"
    3) "birthday"
    4) "1990-01-20"
    5) "gender"
    6) "Man"
    复制代码

    ZSET 命令

    排序数组(例如哈希)用于存储键值对。有序集的键称为成员,每个成员都是不同的;而有序集合的值称为点,该点必须是浮点数。† ZCARD 键

    获取有序集中的成员数量 3ZCOUNT 键 min max 在给定的间隔点计算有序集中的成员数量 4 ZINCRBY 成员有序集加增量5ZINTERSTORE 目标数字键 key [ key ...] 计算一个或多个有序集的交集并将结果集存储在新的有序集 key 中6 Z​​LEXCOUNT key max统计有序集中指定字典范围内的成员数量7ZRANGE key start stop [WITHSCORES]通过索引范围返回有序集,合成指定范围❙❙❙❀ ZRANGEBYLEX key min max [LIMIT offset count]通过字典间隔返回有序集的成员9ZRANGEBYSCORE key min max [WITHSCORE] [LIMIT] 按点重新排序的数组成员10ZRANK key member 返回有序集指定成员的索引 11ZREM key member [member...] ZREMRANGEBYLEX key min max从有序集中删除所有指定的字典范围成员 ZREMRANGEBYRANK 键开始结束从给定订单 GOREZRANC♻GOREZRANCKeyrange 中删除所有成员。 min maxshift 排除给定分数的有序集合中的所有成员 15ZREVRANGE key start stop [WITHSCORES] 返回按索引从高到低按指定间隔排序的集合中的成员 ZREVRANGEBYSCORE键 最大 最小 [WITHSCORES] 返回有序集合中指定分数范围内的成员,分数从高到低排序17ZREVRANK key member 返回指定成员在有序集合中的排名,有序集合中的成员按分数降序排序。值(从高到低)18ZSCORE 键成员返回有序集成员的分数19ZUNIONSTORE 目标数字键 key [key ...] 一个或多个离子 C。给定有序集合并存储在 New key 20ZSCAN key 游标 [MATCH 模式] [COUNT 计数]迭代有序集合的元素(包括元素成员和元素分数)
    127.0.0.1:6379> ZADD Users 1 zhangsan 2 lisi 3 wangwu 4 maliu
    (integer) 4
    127.0.0.1:6379> ZCARD Users
    (integer) 4
    127.0.0.1:6379> ZRANK Users maliu
    (integer) 3
    127.0.0.1:6379> ZSCAN Users 0
    1) "0"
    2) 1) "zhangsan"
       2) "1"
       3) "lisi"
       4) "2"
       5) "wangwu"
       6) "3"
       7) "maliu"
       8) "4"
    127.0.0.1:6379>
    复制代码

    这个这篇文章介绍 Redis ,横向比较可以帮助大家对Redis的特性和功能有一个大概的了解。然后我们交替介绍了Redis的五种基本数据结构及其使用命令。作为Redis的入门指南,本文旨在让大家对Redis有一个概念性和总体性的了解,为彻底了解Redis打下基础。

    作者:李江涛
    来源:掘金

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门