`

浅谈redis数据结构

阅读更多

1. redis安装

       正式的redis是安装在linux操作系统上的,但是考虑到很多小伙伴对windows是比较熟悉的。因此,redis windows安装的版本如下:https://github.com/MicrosoftArchive/redis/releases。从这个github上选择对应的release版本,比如,我这里安装的是3.0.504,下载msi或zip都可以,如下图所示:

 

       我这里选择的是msi,后面的安装就不在累述。本地安装好以后,打开redis的安装路径,例如:我本地安装在D:\Program Files\Redis,如下图所示:

 

       如图中标出来的两个exe文件:redis-server.exe和redis-cli.exe,分别是redis的服务端和redis的客户端。

下面我们启动redis服务,这里启动redis服务的方式有很多种,篇幅所限,我这里就介绍下,利用git客户端,启动redis服务,如下图所示:

 

       redis服务启动成功后,我们再启动redis客户端,如下图所示:

 

2. 数据结构

       熟悉redis的小伙伴都知道,redis存储的整体结构是(K,V)结构,即键-值结构。对于键(K),有一些通用的全局命令,这里只做几个简单的说明:

命令 描述
keys * 查看所有键
dbsize 键总数
exists key 检查键是否存在
del key 删除键
expire key seconds 键过期
type key 键的数据结构类型

 

对于值(V),redis中有五种数据结构。这五种数据结构分别是:

数据结构 描述
string 字符串
hash 哈希
list 列表
set 集合
zset 有序集合

 

这种键-值结构,只是redis对外的数据结构,如下图所示:

 

       这种对外的数据结构,其中每种数据结构实际上都有自己底层的内部编码实现,而且是多种实现。这样Redis会在合适的 场景 选择合适的 内部编码,如下图所示:

 

       可以看到,每种数据结构都有两种以上的内部编码实现。例如:list数据结构包含了linkedlist和ziplist两种内部编码。同时有些内部编码,例如:ziplist,可以作为多种外部数据结构的内部实现,可以通过object encoding命令查询内部编码,如下图所示:

       

        Redis这样设计有两点好处,其一:可以改进内部编码,而对外的数据结构和命令没有影响。例如:Redis3.2提供的quicklist,结合了ziplist和linkedlist 两者的优势,为列表类型提供了一种更加高效的内部编码实现;其二:不同内部编码可以在不同场景下发挥各自的优势。例如:ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候Redis会根据配置,将列表类型的内部实现转换为linkedlist。

 

3. 后续

       由于篇幅限制,后续的文章中,会分别对redis的五种数据结构分别做研究。关于字符串数据结构的,请阅读:浅谈redis数据结构之字符串

分享到:
评论

相关推荐

    浅谈redis在项目中的应用

    5. 数据结构操作:Redis支持多种数据结构操作,包括字符串、列表、集合、有序集合和哈希表。在插入信息和获取信息的示例中,演示了如何使用列表数据结构存储和读取数据。 6. 数据持久化:Redis支持RDB和AOF两种持久...

    浅谈Redis数据库的键值设计

    Redis作为一个高性能的键值存储系统,其丰富的数据结构(如字符串、哈希、列表、集合、有序集合等)为开发者提供了极大的灵活性。与关系型数据库不同,Redis允许开发者直接操作数据结构,从而在设计键值时需要更深入...

    浅谈Redis在分布式系统中的协调性运用

    Redis,作为一个高性能的键值存储系统,因其丰富的数据结构和高效的内存操作,常被用于实现分布式环境下的协调任务。本文将深入探讨Redis如何在分布式系统中发挥协调作用,尤其是在进程调度、线程管理和消息队列中的...

    Redis基础笔记总结

    #### 三、Redis迭代演化和Redis7新特性浅谈 - **时间推移与版本升级**: - 官方博客: - 版本迭代历程中的一些重要里程碑。 - **Redis7.0新特性**: - **Redis Functions**: 提供函数调用的能力,扩展Redis的功能...

    浅谈python处理json和redis hash的坑

    文章标题是“浅谈Python处理JSON和Redis Hash的坑”,而描述中提到,这篇文章将介绍在使用Python处理JSON和Redis hash时遇到的坑,并希望这些内容能为读者提供参考价值。同时,文章涉及的主要技术标签为Python、JSON...

    缓存技术浅谈

    7. **源码分析**:文章可能深入到具体缓存库的源码层面,如分析Guava Cache的工作原理,或者Redis的数据结构和操作命令实现。 8. **工具应用**:可能介绍了一些用于缓存管理、监控的工具,例如JMX监控缓存命中率,...

    浅谈分布式锁

    2. 基于缓存实现:常见的缓存组件有Redis,利用Redis提供的数据结构(如setnx命令)和特性(如过期时间设置)来实现分布式锁。但要注意Redis的复制是异步的,且单点故障可能会导致锁失效。 3. 基于ZooKeeper实现:...

    浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)

    Redis是一个内存数据结构存储系统,其速度非常快,适合实现锁。使用Redis实现分布式锁通常有两种方法:`SETNX`命令和`lua`脚本。`SETNX`命令在键不存在时设置键值,实现互斥锁。为了防止锁不能被释放(例如,客户端...

    缓存技术浅谈PPT简介

    此外,缓存大小的设定、缓存的数据结构选择、并发控制等也是重要环节。 总的来说,缓存技术通过智能地存储和检索常用数据,显著提高了系统效率,降低了延迟。正确理解和运用缓存技术,是构建高性能系统不可或缺的一...

    架构革新高效可控_浅谈数据库服务和架构演讲V7.pdf

    【标题】:“架构革新高效可控_浅谈数据库服务和架构演讲V7.pdf”主要探讨了数据库服务和架构的演进,以及如何通过技术创新解决开发者在实际工作中遇到的问题。该演讲内容涉及关系型数据库、分析型数据库、图数据库...

    【ASP.NET编程知识】浅谈ASP.NET Core中间件实现分布式 Session.docx

    为了解决这个问题,ASP.NET Core 提供了分布式 Session 支持,它可以将 Session 数据存储在分布式缓存中,如 Redis 或 SQL Server,确保在集群环境中数据的一致性。实现分布式 Session 首先需要安装相应的包,例如...

    算法文档无代码浅谈跳跃表的相关操作及其应用

    跳跃表是一种可以用来替代平衡树的数据结构,它通过在基本链表的基础上增加了多层索引以加快搜索、插入和删除操作的速度。跳跃表不仅能够提供与平衡树类似的查询性能,而且实现起来相对简单,维护成本较低。 在详细...

    浅谈电商支撑系统中分布式缓存管理技术的研究与实现.pdf

    它支持多种数据结构,如字符串、哈希、列表、集合等,适用于不同的应用场景。分布式缓存的主要配置方式有主从模式、哨兵模式和集束模式。 主从模式允许数据有备份,可通过从节点查询操作来完成,提供数据的高可用性...

    nosql数据库的应用探讨

    Redis是一个开源的内存数据结构存储系统,它可以作为数据库、缓存或消息中间件使用。Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。由于数据存储在内存中,因此Redis具有非常高的读写速度。...

    浅谈Laravel队列实现原理解决问题记录

    队列实现原理的核心在于Redis的list数据结构,其中队列操作类`Illuminate\Queue\RedisQueue.php`中的`pushRaw()`方法是关键。该方法通过调用Redis的`rpush()`函数将任务(一个包含任务数据的字符串)推入队列。队列...

    缓存应用的实践分享,项目中实际使用

    科云平台主要使用Redis提供的数据结构,如key-value、hash、zSets和list。key-value适用于简单的键值对存储;hash适合存储单个实体数据和查询索引;zSets用于范围查询索引;而list则常作为消息队列使用。 ### 缓存...

    浅谈MySQL索引优化分析

    在MySQL中,索引是一种特殊的数据结构,用于加速数据检索。当正确地设计和使用时,索引能够显著提高查询速度,尤其是在处理大量数据时。 首先,我们需要理解为什么SQL查询可能会变慢。这通常与查询语句的编写方式、...

    浅谈ASP.NET Core中间件实现分布式 Session

    分布式 Session 利用了 ASP.NET Core 中的中间件体系结构,中间件负责拦截请求,处理 Session 数据,并将其存储在分布式缓存中。当请求到达时,中间件会检查请求头中的 Session ID,如果存在,则从缓存中检索 ...

    浅谈php serialize()与unserialize()的用法

    总的来说,`serialize()` 和 `unserialize()` 是PHP中用于数据持久化和传输的重要工具,它们允许开发者将复杂的数据结构转化为字符串,方便存储和传输,然后再恢复为原始形式,这对于数据管理和程序间的通信有着至关...

Global site tag (gtag.js) - Google Analytics