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

Redis 数据结构和全局命令概述

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

Redis 提供 5 数据结构。了解各个数据结构的特点对于Redis 的开发、运维非常重要,同时对于❓❓单机来说非常重要- 线程化命令处理机制,数据结构命令使选择更加高效,事半功倍。 Redis数据结构与全局命令概述

接下来的几篇文章将按照以下几个方面来介绍Redis的众多数据结构、命令用法以及应用场景。

  • 先验知识:许多简单的全局命令数据结构内部和编码、单一线程指令处理机制分析。
  • 数据结构特征5数据结构特征、、、命令应用场景.
  • 数据管理按键管理遍历按键

文本

1 。先决条件

在介绍5一个数据结构之前,你需要了解

G❙man,的一些内部编码 数据结构 和 、单线程命令处理机制。数百个

  1. Redis命令数百个。如果你熟悉Redis的一些机制,你会发现这些命令的强大通用性
  2. Redis 不是万能药。一些数据结构命令必须在特定场景中使用。错误使用。

2。全局命令

Redis 5类型数据结构其中值因为有一些常用命令 键。

2.1。查看所有键

键 *

在下面插入3字符串类型键值对:

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set java jedis
OK
127.0.0.1:6379> set python redis-py
OK
复制代码

该命令将列出所有键:

127.0.0.1:6379> keys *
1) "python"
2) "java"
3) "hello"
复制代码

2.2。键总数

dbsize

在 键值对 ) 下插入 列表类型 : dbsize当前的命令数据库返回键的总数。当命令

127.0.0.1:6379> dbsize
(integer) 4
复制代码

dbsize计算中的key总数时,不会遍历♶中的所有key 内置-输入键计数变量 ,所以 的时间复杂度为 dbsize 。而keys命令会遍历的所有key,所以的时间复杂度为 当时Redis 如果 有大量密钥。被保存,在线环境禁止使用

2.3。检查key是否存在

key存在

如果存在则返回1,如果不存在则返回0

127.0.0.1:6379> exists java
(integer) 1
127.0.0.1:6379> exists not_exist_key
(integer) 0
复制代码

2.4。删除键

del键

del 是一个通用命令无论什么值❝数据结构del都可以删除命令

127.0.0.1:6379> del java
(integer) 1
127.0.0.1:6379> exists java
(integer) 0
127.0.0.1:6379> del not_exist_key
(integer) 0
127.0.0.1:6379> exists not_exist_key
(integer) 0
复制代码

返回结果:成功删除的个数。如果删除没有 键,则返回 。 。

2.5。密钥过期

expirekey秒

Redis支持添加过期时间到自动删除按钮例如你好设置第二个过期时间:

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> expire hello 10 
(integer) 0
复制代码

ttlttl ttl剩余过期时间,包含3返回值:

  • 大于等于0的整数:密钥的剩余过期时间表示。
  • 返回-1未设置过期♶。
  • 返回-2不存在。

可以使用ttl命令来观察Redis数据结构与全局命令概述

# 还剩7秒
127.0.0.1:6379> ttl hello(integer) 
(integer) 7
...
# 还剩1秒
127.0.0.1:6379> ttl hello(integer) 
(integer) 1
# 返回结果为-2,说明键hello已经被删除
127.0.0.1:6379> ttl hello(integer) 
(integer) -2
127.0.0.1:6379> get hello
(nil)
复制代码

2.6。键数据结构类型

type key

例如键hello是字符串类型的值,返回结果❙ 。键mylist的值为listtype,返回结果为list。如果密钥不存在,则返回none

127.0.0.1:6379> set a b
OK
127.0.0.1:6379> type a
string
127.0.0.1:6379> rpush mylist a b c d e f g
(integer) 7
127.0.0.1:6379> type mylist
list
复制代码

3。数据结构和内部编码

type 该命令实际上返回当前 的数据结构类型 。它们是:stringstring),哈希

()) 列表(字符串)列表),设置设置),zset

zset 、 或 但这些只是 Redis 外部数据结构如图所示:Redis数据结构与全局命令概述

对于每一个数据结构,它其实都有自己底层的内部编码 ♿♿♣♓实现也存在,这样,Redis在合适的

中选择合适的内部编码 场景为如图所示: 数据结构

每个有两个或多个

内部编码实现。例如列表数据结构有两个linkedlistlinkedlist
  • 内部编码。然而,一些内部编码(例如ziplist)可以通过各种外部数据结构用作♿的内部实现。 对象编码命令查询内部编码
    127.0.0.1:6379> object encoding hello
    "embstr"
    127.0.0.1:6379> object encoding mylist
    "quicklist"
    复制代码

    可以看出,内部编码对应值 embstr,按钮

    mylist 对应值

    的内部编码为ziplist。 † 和 命令 无效果。例如, Redis3.2 提供了一个快速列表 ,它结合了 ziplist

    、 .

    内部编码实现为由提供。
  • 第二:不同的内部编码给出相应的优势。例如,ziplist比较可以节省内存,但如果列表有更多元素,则性能会有所不同。 主要,当前 Redis 列出类型 内部实现 内部实现 作为内部参考 ed 用于配置

4。单线程架构

Redis 使用单线程架构和I/O❓实现多种建模

高性能内存数据库服务。那么为什么单线程可以这么快,我们来分析一下以下原因:

4.1。纯内存访问纳秒,其中Redis达到每秒1万级访问是重要基础。

4.2。非阻塞 I/O

Redis 使用 epoll I/OI/O 用作 然后添加 Redis 拥有 事件处理模型 加入 epoll 和 ♓❙ 读写 、 关闭 事件,所以您不必在网络上浪费太多时间,如下图所示:4.3。单线程避免了线程变化和竞争条件带来的消耗

使用单线程这样高性能是一个不错的选择。 可以有很多优点:

  • 单线程可以简化数据结构和算法的实现。开发人员不需要了解复杂的并行数据结构
  • 单线程避免了线程更换竞争带来的消耗。在服务器端开发中,锁和线程开关通常是性能杀手。

单线程的问题:每个命令的执行时间有要求。如果命令 运行时间过长 ,它 会阻止其他命令 Redis对于这样一个高性能服务来说是致命的,所以Redis实现是一个数据库。 场景。

总结

本文概述了几种数据结构/Redisglobal以及一些简单的命令❓Redis数据结构与全局命令概述

,数据结构内部编码单线程命令处理机制分析。

作者:灵易技术栈
来源:掘金

版权声明

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

发表评论:

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

热门