精通Redis 1 - Redis概览 和基础数据结构

【Redis系列 01】从零到精通:Redis五种核心数据结构完全解析 本文通过费曼学习法深度解析Redis五种核心数据结构(String、Hash、List、Set、Sorted Set),结合实际应用场景和代码示例,帮助开发者从零开始掌握Redis的精髓。文章覆盖每种数据结构的特点、使用场景、常用命令和性能特征,是Redis入门和实战必备的完整指南。 阅读详情

一、Redis 概览

1.1 Redis 全称是Remote Dictionary Service

远程字典服务,从名称看,redis 最开始的设计思想,是一个远程的key-value 的存储服务,主要用来解决系统缓存,分布式的数据共享问题。程序员在学生阶段的课程设计往往是单实例(单体的应用),中小型公司起步的时候,往往也是从一个war 包开始,随着业务的发展慢慢的进化成分布式系统。

1.2Redis定位于一个内存数据库

内存保存数据,可以省去读取磁盘的时间,明显提高数据读取速度,redis之前,如果需要把数据放入内存,解决方法往往需要依赖 J2EE 平台,或者Mysql 的内部缓存。

使用J2EE 把常用数据载入到一个数据结构如 List、Map中,长驻JVM ,单这样做的缺点是 受制于JVM垃圾回收机制,长时间未使用的对象会被清除,也不利于架构扩展,对于分布式系统,你必须自己实现一个内存服务,否则各个示例不会共享缓存,这点和session 共享类似

redis的出现很好的解决这个问题。

后边随着redis的发展壮大,依托自己多样的数据结构,发展更多的应用场景,个人认为,其最核心的使用场景,远程内存存储服务。
其他的如分布式锁、队列、订阅发布等功能,都有其他产品的成熟方案,对于中小公司,在资源紧张或者系统简单的情况下,可以利用redis 实现多种场景,但业务复杂,或者

1.3 Redis 常用场景

缓存

使用 String 结构 缓存 常用信息,注意保持缓存和数据库的数据一致性,一般使用双删策略,可以对比 mysql binlog 和redo log

理解使用 。

分布式锁

Redis 的分布式锁,使用 setnx 命令实现,建议加上过期时间,锁被意外情况长期占用,redis 分布式锁的实现原理简单,也足够高效,适用一般场景,如果涉及特殊场景,例如 付款,账单 谨慎使用。

Redis 官方提供的RedLock 使用集群提高了可用性,但仍未解决网络分区导致的锁异常。

计数器

这个比较容易理解

共享Session

共享session的其中一种解决方案。

限流

使用Zset 维护一个时间窗口,理论是滑动窗口限流,如果应用单实例,Java可以使用Dqueue

实现,redis 可以实现分布式限流,这种限流仍旧是局限访问次数不能过大,如果是每分钟一百万次限流则不适用。

二、Redis 基本数据结构

2.1 String

redis 最简单的数据结构,内部用一个字符数组表示

常见存储用户信息,用户json 信息保存在redis 字符串中,redis 字符串是动态可以修改,预先分配冗余的内存空间减少内存的频繁分配。

当capacity<len 时 扩容,当len <1MB 时 每次翻倍,当len >1MB 时,每次增加1MB
那么 1MB 可以存储多少个字符。

字符串最大的长度512MB

因为一个汉字是2个字节,而1Kb=1024个字节,1M=1024Kb
那么计算公式应该是:1M=1024 × 1024/2=524288(个汉字)

命令:

GET name
SET name  andy
DEL name
EXISTS name
redis-cluster-12(192.168.5.13:6380)>del user:1:2
"0"

删除成功返回1:key 不存在,删除失败返回 0

设置过期:

redis-cluster-12(192.168.5.11:6379)>expire user:{4}:3 6537
已连接到集群。
redis-cluster-12(192.168.5.11:6379)>
redis-cluster-12(192.168.5.13:6380)>
"1"

计数功能,准确的计数,redis hyperloglog 统计访问数量,比较准确的计数

set num 30
incr num 
31
incrby num 5
36
incrby num -5
31

计数的范围在signed long的最大值和最小值

2.2 Hash

hash 相当于 Java中的hashMap

无序字典

底层组成和Java一样,数组和链表

jdk1,8 中 链表和在长度变大时做了转换

redis 字典的值只能是字符串,这点可以通过自己实现序列化或者使用redisson 封装的数据结构存储
DTO 和BO

java 的rehash 一次性全部rehash

redis 追求高性能 采用渐进的rehash
在rehash 的同时 保留新旧两个hash 结构 ,查询时会同时查询两个hash ,在后续的定时任务和hash操作中 旧 hash 的内容会一点点迁移到新的hash 中,迁移完毕 新的hash 会取代旧hash

2.3 Set

相当于 Java中的HashSet,内部键值对 无序,唯一。 内部相当于一个特殊的字典,所有的value都是null

,当集合中的最后一个元素被移除之后,数据结构被自动删除,内存被回收。

SET 可以存储中奖用户Id 可以去重,或者存储抢票队列,保证同一个用户不会中奖两次。

2.4 Zset

常见考察点

类似Java中的sortedSet 和HashMap
的结合体。

内部是一个hash 但是value 是一个score

代表这个value 的排序权重,内部实现是一个跳跃表

2.5 List

redis 的列表相当于Java语言的LinkedList 链表不是数组
redis list的插入和删除操作非常快,时间复杂度 O(1)
但是定位索引很慢。

常用来做异步队列使用,需要处理的BO 序列化成字符串保存在redis LIST

LIST 通过命令可以实现 队列和栈

redis 的list 底层不是一个linkedList 是一个 quickList 结构

,在元素较少的时候会使用一个连续的内存存储, zipList 压缩列表。所有的元素彼此挨在一起存储。分配的是一块连续的内存。
数据量较多的时候改成 quicklist

链表+ziplist 结合组成quicklist

双向指针串起来。

此处 redis的是分配内存,内存的需要的时候 向操作系统申请。
memcached 内存是初始化申请, 的自己管理内存。

Redis 学习指南:从零基础到实战精通 《Redis学习指南:从入门到精通实战》 Redis作为高性能内存数据库,广泛应用于缓存、消息队列和实时统计等场景。本文将带你系统掌握Redis的核心技术:首先介绍Redis的内存存储、持久化和丰富数据结构等特性;然后详细讲解字符串、哈希、列表等数据结构的操作和应用场景;接着深入高级功能如持久化、事务和发布订阅;最后探讨集群部署、性能优化和实战应用。通过学习,你将能够运用Redis提升系统性能,解决分布式环境下的缓存、锁等关键问题,为现代应用开发提供有力支持。 阅读详情

相关推荐

从Mate到Mate40 Pro+:华为旗舰核心配置演进与选购避坑指南

本文回顾了华为Mate系列从初代到Mate40 Pro+的核心配置演进历程,重点分析了处理器性能、影像系统、屏幕设计及续航快充的技术突破。针对选购需求,提供了区分版本、5G选择及存储配置的实用避坑建议,帮助消费者明智选择华为旗舰机型。

weixin_30015371的博客 493

Redis精通系列——LFU算法详述(Least Frequently Used - 最不经常使用)

LRU有一个明显的缺点,它无法正确的表示一个Key的热度,如果一个key从未被访问过,仅仅发生内存淘汰的前一会儿被用户访问了一下,在LRU算法中这会被认为是一个热key。例如如下图,keyA与keyB同时被set到Redis中,在内存淘汰发生之前,keyA被频繁的访问,而keyB只被访问了一次,但是这次访问的时间比keyA的任意一次访问时间都更接近内存淘汰触发的时间,如果keyA与keyB均被Redis选中进行淘汰,keyA将被优先淘汰。

qq_39093474的博客 1182

使用Dify搭建音频文件转文本工作流

使用Dify搭建音频文件转文本工作流

zyx_bx的博客 5622

Redis一文从入门到精通

NoSQL,即“Not Only SQL”,泛指非关系型数据库。NoSQL不依赖业务逻辑方式存储,而是以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。即不遵循SQL标准,不支持ACID,远超于SQL的性能(查询效率更高)。对数据高并发的读写海量数据的读写对数据高扩展性的Redis就是一个开源的key-value存储系统,它支持存储的value类型相对更多,包括String、list、set、zset(有序集合)和hash;

喜欢喝椰奶的博客 1107

Cherry Studio 新手必看:5分钟搞定MCP服务器配置(附常见问题解决)

本文为Cherry Studio新手提供了详细的MCP服务器配置指南。文章从核心概念入手,解释了Cherry Studio作为MCP客户端如何通过MCP协议安全、标准化地扩展AI助手能力。重点讲解了uv和Bun环境的安装与常见网络问题的解决方案,并演示了如何添加首个MCP服务器(如mcp-server-fetch),助你快速构建可扩展的智能工作流。

corn8的博客 595

高速信号设计中的关键测试项目与测试仪器详解

高速信号设计是一个多维度协同优化的系统工程。时域分析如同外科手术刀般精准定位物理缺陷,频域分析提供传输通道的频谱指纹,信号质量评估量化系统鲁棒性,接收端容限测试验证极端工况下的可靠性,协议一致性确保生态互操作性,而电源完整性则直指诸多信号问题的根源。

u014344410的博客 217

【进阶篇】2.15 Redis 高可用集群(Redis Cluster)详解

前面两个章节我们学习关于Redis 中的高可用 Redis主从复制. 以及Redis的哨兵模式(sentinel)。我们能够发现上面两种方式主要解决读写分离,备份冗余,以及故障恢复,故障转移。但是无法解决redis的性能问题,我们如果做过测试会发现 redis在单节点的情况下,只能将CPU的一个核心跑满。这主要是因为由于Redis是单线程的,无法充分利用多核CPU的优势,因此在高并发场景下可能会出现性能瓶颈。为了解决这个问题,Redis提供了集群技术,可以将数据分布在多个节点上,实现分布式存储和高并发读写。

日拱一卒无有尽,功不唐捐终入海 1594

软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)

软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级

片言可决讼,半纸能缚龙 7342

Redis入门到精通超详细熬夜吐血之作

RedisKey基本命令 启动服务端:redis-server 连接客户端:redis-cli 切换数据库(默认16个数据库):select 2 数据库大小:dbsize 当前数据库所有key:keys * 清空当前库:flushdb 清空所有库:flushall 是否存在key(1存在0不存在):exists key 移动一个key到另一个数据库:move key db 设置一个key过期的秒数:expire key seconds 获取key的有效时间(秒):ttl key 获取key的存储类型:typ

〆、挽风的博客 1228

Unity零基础到入门 ☀️| 基础知识入门篇章,看完就可以做游戏啦! | 寻找C站宝藏

Unity入门基础知识。本篇文章介绍了关于Unity入门的一些基础知识,包括基本概念和使用实例。简单易上手,轻松实现Unity入门操作!

努力前行,总会成为自己心中的那道光 1万+

vue2/3 - [超详细] 实现企业微信扫码登录完整流程及代码,vue项目接入企业微信扫码登录功能教程,支持新跳页显示二维码或div容器里内嵌登录二维码(详细代码注释,一键复制开箱即用)

vue企业微信扫码登录,vue网页网站企业微信扫码登录教程,vue如何实现企业微信扫码登录功能,vue详细企业微信扫码登录功能实现,vue2实现企业微信扫码登录,前端vue企业微信扫码登录教程,vue pc电脑端企业微信扫码登录详细教程,vue项目中怎么做企业微信扫码注册登录,vue实现网站接入企业微信扫码登录,vue2做企业微信扫码登录的优质文章教程,vue网站对接企业微信扫码登录,vue企业微信扫码登录如何新开一页全屏显示登录二维码,vue企业微信登录二维码 内嵌在div容器里/跳页显示登录二维码,vu

✅ 精选推荐文章 5701

Redis 入门到精通

缓存就是数据交换的缓冲区(称作Cache),是临时存贮数据(使用频繁的数据)的地方。当用户查询数据,首先在缓存中寻找,如果找到了则直接执行,如果找不到则去数据库中查找。

yy139926的博客 1445

KNN算法

其原理是在给定的数据集中,根据某个距离度量方法,将测试数据与已知数据集中的所有数据进行距离计算,然后选取K个距离最近的数据作为测试数据的邻居,根据邻居的类别进行投票,将测试数据分类到得票最多的类别中。总之,KNN算法是一种简单而有效的分类方法,它不需要对数据进行训练,可以适用于多种数据类型和应用场景,并且可以通过调整K值或距离阈值等参数来控制算法的复杂度和性能。,KNN算法需要找到K个距离测试样本最近的训练样本,计算它们的类别,并将测试样本归入到得票最多的类别中。则取值为1,否则为0,表示邻居中属于类别。

优快云XXCQ的博客 2628

Redis从入门到精通【redis基础】

​ 这个Redis的初心,最初就是用来作为一个“消息中间件”的(消息队列),作为一种分布式系统下的生产者消费者模型。但是当前很少人会直接使用Redis作为消息中间件了(因为业界有更多更专业的消息中间件使用)单机架构(应用程序+数据库服务器)数据库和应用分离应用程序和数据库服务器,分别放到了不同主机上部署了引入负载均衡优化应用服务器 => 集群通过负载均衡器,把请求比较均匀的分发给集群中的每个应用服务器,并且当集群中的某个主机挂了,其他主机仍然可以承担服务,提高了整个系统的可用性。

qq_55317476的博客 2126

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Redis基础指令全解析:从入门到精通

《Redis基础指令高效操作指南》介绍了Redis核心数据操作指令及应用场景。主要内容包括:字符串、哈希、列表等数据结构的常用命令(如SET、HSET、LPUSH等);系统管理指令(KEYS、SAVE、INFO等);以及管道、事务等进阶技巧。文章还涵盖安全配置、性能优化等最佳实践,并提供了指令速查表和学习路径建议。通过分类讲解核心命令配合实用示例,帮助开发者系统掌握Redis数据操作,适用于缓存、会话管理等典型应用场景。

dragonroar 1214

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Redis 从入门到精通:redis的数据结构、redis指令大全、SpringBoot整合redis、redis面试问题详解

目录 一、Redis基础简介 1、Redis官方介绍 2、redis的数据结构及应用场景 2.1数据结构 2.2应用场景 二、redis在Linux中的操作 1、常规操作 2、redis的指令 2.1 value为String类型 2.2 value为hash类型 2.3 value为list类型 2.4value为set类型 2.5value为zs...

方才coding 3510

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精通redis:一篇文章了解 Redis 的数据结构

​ 也就是说扩容和收缩操作不是一次性、集中式完成的,而是分多次、渐进式完成的。如果保存在 Redis 中的键值对只有几个几十个,那么 rehash 操作可以瞬间完成,但是如果键值对有几百万,几千万甚至几亿,那么要一次性的进行 rehash,势必会造成 Redis 一段时间内不能进行别的操作。所以 Redis 采用渐进式 rehash。​ 这样在进行渐进式 rehash 期间,字典的删除查找更新等操作可能会在两个哈希表上进行,第一个哈希表没有找到,就会去第二个哈希表上进行查找。

蓝鲸鱼计算机软件开发工作室 1003

Redis入门到精通【基础篇】【三】

Redis是一个使用C语言写成的,开源的高性能key-value非关系缓存数据库

m0_74114518的博客 1173

Redis 基础详解:从入门到精通

Redis 由 Salvatore Sanfilippo 开发,目前由 Redis Labs 维护。它以内存作为数据的主要存储介质,使得数据的读写操作极为迅速,特别适合对性能要求极高的场景。Redis 作为高性能的内存数据库,在现代应用开发中扮演着重要角色。掌握 Redis 的基础知识和核心功能,能够帮助开发者构建更高效、更可靠的系统。本文系统介绍了 Redis 的基础知识,涵盖数据结构、持久化、事务、发布订阅等核心功能,以及 Java 客户端的使用、应用场景、性能优化建议和高可用方案。

2202_75601845的博客 1738

Redis入门到精通【基础篇】【一】

Redis是一个使用C语言写成的,开源的高性能key-value非关系缓存数据库

m0_74114518的博客 1390

基础篇Redis

键值型NoSql其中键值型,是指Redis中存储的数据都是以key.value对的形式存储,而value的形式多种多样,可以是字符串.数值.甚至json:而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。对于存储的数据,没有类似Mysql那么严格的约束,比如唯一性,是否可以为null等等,所以我们把这种松散结构的数据库,称之为NoSQL数据库。除了上述四点以外,在存储方式.扩展性.查询性能上关系型与非关系型也都有着显著差异,总结如下:存储方式。

ngczx的博客 2169

Redis入门到精通【第二课:Redis的使用与数据结构】

本章详细讲述了redis客户端怎么连接,具体包括单次操作以及redis客户端常见的使用错误,后面又讲述了基于命令行模式下,五大基本数据结构的API使用以及其使用的场景,最后又讲述了Redis常用的全局命令。但是请记得自己一定要多去操作,去试,尤其是五大数据结构的常用API,只有自己去操作了,才会深入的理解它的使用场景。

qq_41191331的博客 1022

Redis全面指南:从入门到精通

Redis是一个高性能的开源内存键值数据库,支持字符串、哈希、列表等丰富数据结构,广泛应用于缓存、会话存储等场景。文章详细介绍了Redis的核心特性、安装配置步骤(包括yum安装、服务启动、防火墙设置等)、配置文件解析(网络、持久化、安全等关键参数)、基础操作命令(键值、数据类型、事务等)以及主从复制配置方法。特别强调了RDB和AOF两种持久化机制的特点与配置建议,并提供了主从环境搭建和故障处理方案。全文涵盖Redis从入门到生产的核心知识点,适合开发者快速掌握Redis的部署与运维。

qq_62839871的博客 1497

Redis从入门到精通1:Redis简介和安装配置

(1)Redis简介Redis,全称是Remote Dictionary Server,即远程字典服务器,是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个完全开源且免费、使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的Key-Value数据库,并提供多种语言的API。

qq_24428851的博客 1162

【精通Redis】Redis入门介绍

Redis入门介绍,介绍了来历和基本数据类型

卓越之识论道,平常之识论事,狭隘之识论人 1606

Redis: 从入门到精通

Redis 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合、位图、HyperLogLogs 和地理空间索引。本文将全面介绍 Redis 的基础知识、高级功能及其在实际项目中的应用。Redis 是一个强大的内存数据存储系统,适用于各种高性能和实时应用场景。通过学习和掌握 Redis 的基础知识、高级功能和实战技巧,可以在实际项目中充分利用其优势,提高系统性能和可靠性。希望本文能帮助你快速入门并深入了解 Redis。参考资料。

m0_46543935的博客 3632
上一篇: HashTable源码简析
下一篇: 常见软件项目开发模式思考
hamish-wu
博客等级 码龄15年 2814粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值