Redis数据结构应用场景及持久化原理

Redis原理redis核心数据结构与场景,及常见面试题 Redis作为高性能内存数据库,其核心原理包括:单线程模型(避免竞争)、I/O多路复用、高效数据结构(哈希表/跳跃表等)和混合持久化机制(RDB快照+AOF日志)。提供丰富的数据结构如String、Hash、List、Set等,支持缓存、队列、排行榜等场景。高可用方案包括主从复制、哨兵和集群模式,通过分片槽位实现数据分布。内存淘汰策略涵盖LRU、LFU等算法,防止内存溢出。典型问题如缓存穿透/雪崩可通过布隆过滤器、随机过期时间等方案解决。 阅读详情

基础数据类型

String

计数器

通过incrc, decrcincrcby 指令控制数字变化。通过计数和过期机制,可以限制用户的访问频率,达到限流的目的。

共享Session

同一个用户多次登录时,可能被不同的服务器负载。这时可以通过Redis的String数据类型保存分布式服务器共享的Session。

 
Hash

存储对象类型数据

比如MySQL的一行数据,里面的列名可以用Hash的key记录

在这里插入图片描述

hmset album:2 name LANY pub_year 2017

 

List

查询列表

List类型不仅支持双向插入,同时还可以通过索引查询数据。

 
Set

用户标签

由于Set支持集合的各类操作,可以聚类用户的操作,通过标签提高用户黏度

 

Zset

排行榜

根据score对数据做排序,是Zset最典型的应用场景

 

Bitmap

大数据量的统计

由于是通过位信息记录,Bitmap能够节省更多的内存空间,因此很适合记录大数据统计信息,例如活跃用户数等。

 

基于数据结构的过滤算法

下面两种并非是数据结构,而是在Redis中通过数据结构实现的算法。

布隆过滤器

在这里插入图片描述

建立黑名单

当名单较长时,布隆过滤器能以较小的失误率识别黑名单(会错杀,但不会漏判)

防止缓存穿透

当Redis作为其他数据库的缓存时,可以用布隆过滤器判断数据请求是否为一个合理的范围,防止恶意请求

 

HyperLogLog
在这里插入图片描述

去重计数,误差0.81%

HyperLogLog是通过哈希数据为64位,压缩数据的同时保证数据分布均匀。然后取前50位数据,做统计并记录。统计的方式可以为:记录连续为0的序列的最大长度。

在需要计数时,会分别从后14位索引的数据桶中取调和平均值(harmoic mean),再根据概率反推出数据量的大小。

这种方式能极大减少存储空间,尤其适合海量数据的统计。

 

持久化方式

  1. RDB(Redis DB)

将数据库全量保存为一个快照文件dump.rdb

  • 通过指令手动触发

savebgsave命令,其中bgsave会fork一个子进程,不会阻塞Reids响应客户端的请求(save命令实际中不会被用到)

  • 自动触发保存

使用shut down命令时,Redis会自动保存当前数据,再关闭数据库

根据配置文件,n秒触发了m次写操作后,会自动进行一次保存(配置文件中可以配多个保存频率)

主从复制时,会生成RDB文件用于迁移数据

如果在保存过程中,主进程在写一个数据,Reids会利用写时复制操作(copy on write)

 

  1. AOF(Append Only File)

记录每一条写操作,按记录执行操作以恢复数据
在这里插入图片描述

AOF流程如图。为了保证不阻塞主流程,Fsync由子线程完成,重写操作由子进程完成。

重写是指当AOF文件超过配置大小或百分比时,Redis会自动对里面记录进程优化(包括合并操作记录,直接用内存数据记录)。

 

耗时操作

  1. Rehash

Redis本质上是在内存上的一张大的哈希表,出现哈希碰撞后,会通过链表在同一个索引上不断追加数据。当链表长度过长时,就需要开辟新的空间,把原来的索引迁移过去。

这个Rehash的过程时相当耗时的,Redis通过“渐进式Rehash”,把迁移过程分解到每一次操作执行中(每执行一个操作,就迁移一个索引),做了一个平均化的过程。

  1. Rewrite

重写过程中,子进程和父进程需要共享同一片内存区域。当Redis数据量过大时,复制内存页签耗时明显,会阻塞主进程一段时间;这种情况在开启子进程写RDB文件时同样会发生。

所以尽量控制Redis内数据key的大小,一般在百万级就差不多。

事件相机数据处理实战:从原始事件流到视觉表征的三种核心方法 本文深入探讨了事件相机数据处理的核心环节,即如何将异步、稀疏的原始事件流转换为深度学习模型可处理的视觉表征。文章重点解析了三种核心方法:逐通道累积、体素网格双线性插值和对称累积事件表示,详细阐述了其原理、代码实现、可视化效果及各自的适用场景,为事件相机在目标识别、光流估计等视觉任务中的高效应用提供了实战指南。 阅读详情

相关推荐

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2838

redis的安装与应用

redis的安装与应用

weixin_48112109的博客 947

(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf

(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf(完整版)数据库原理和应用教程第4版习题参考答案与解析.pdf

标题:【Redis 全方位解析】五大数据结构应用场景、AOF/RDB 持久化原理及 Java 代码实战

Redis 作为高性能的内存数据库,在现代架构中扮演着至关重要的角色。本文将深入探讨 Redis 的五大核心数据结构及其典型应用场景,详细解析 AOF 和 RDB 两种持久化机制的实现原理,并通过完整的 Java/Spring Boot 代码示例,展示如何在实际项目中使用 Redis 解决高并发问题。Redis 的强大之处在于它的"简单",这种简单让它在解决特定问题时异常高效。Redis数据结构持久化、AOF、RDB、Java、Spring Boot、缓存、高并发。Redis 使用操作系统的。

sxh010228的博客 662

Redis底层原理】之数据结构持久化机制

Redis 是一个开源的、基于内存的高性能键值存储数据库,它支持多种类型的数据结构Redis数据结构类型和它们的底层实现是 Redis 强大功能和高效性能的基础。

林木森的博客 1165

redis数据结构持久化机制,过期策略详细解析

文章目录问题1:为啥Redis那么快么?问题2:为啥要用redis?问题3:Redis有哪些数据结构呀?问题4:redis的pub/sub有什么缺点?问题5:Redis如何实现延时队列?问题5:redis持久化?5.1 有两种持久化机制5.2 那这两种机制各自优缺点是啥?5.3 两种持久化机制如何选择?问题6: Redis还有其他保证集群高可用的方式么?问题7:redis cluster这种主从同步的原理是啥?问题8:redis 的内存淘汰机制是啥?8.1 redis的过期策略:过期删除+惰性删除8.1

m0_37900506的博客 366

Redis学习之Redis概述及原理、基本操作及持久化

Redis是单进程单线程运行,因此不存在线程切换造成的资源浪费(但是也是缺点,如果命令执行缓慢就会造成阻塞);Redis数据是是安装在硬盘上,但是运行数据是在内存中,访问速度远大于硬盘,避免大量IO。Redis服务器是基于高效的IO多路复用,效率高。Redis服务器是一个事件驱动程序,服务器处理的事件分为时间事件和文件事件两类。文件事件Redis主进程中,主要处理客户端的连接请求与相应。时间事件fork出的子进程中,处理如AOF持久化任务等。。...

m0_72885838的博客 561

redis原理

高速缓存系统,类似于memcached 1.key value store 2.memory cache.是一个把数据存储在内存中的高速缓存,用来在应用和数据库间提供缓冲,替代memcachd。 3.data structrue server.把它支持对复杂数据结构的高速操作作为卖点,提供某些特殊业务场景的计算和展现需求。比如排行榜应用,Top 10之类的。 我们可以总结一下,传统的关系型

selfimpr 818

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

stark张宇 3379

面试专题——Redis

文章目录一、Redis总结1、Redis数据结构1.1、Redis 基本特性1.2、Redis应用场景1.3、Redis有哪几种数据结构原理应用场景?1.3.1、String1.3.1.1、原理1.3.1.2、常用API1.3.1.3、应用场景1.3.2、List1.3.2.1、原理:1.3.2.2、常用API1.3.2.3、应用场景1.2、zset用过吗,底层数据结构是什么?1.3、为什么使用跳表?跟B+树怎么比?查找的时间复杂度是多少?1.4、GEO是干嘛的?举个场景?1.5、HyperLogLog

zhouhengzhe的博客 3114

Redis—《Redis 深度历险:核心原理与应用实践》学习

Redis

lercent的博客 1263

redis总结

redis 简介 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。 为什么要用 redis/为什么要用缓存...

liuerchong的博客 277

redis中有key但是删不掉_redis

1、什么是RedisRedis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数...

weixin_28937075的博客 1365

Redis面试专题:数据结构持久化深度解析

在当今的高并发、大数据时代,Redis作为高性能的内存数据库,已成为后端开发工程师必须掌握的核心技术之一。无论是缓存设计、会话管理、消息队列还是实时排行榜,Redis都发挥着不可替代的作用。本文将深入剖析Redis数据结构持久化机制,帮助你在技术面试中游刃有余。 ## ???? Redis核心数据结构详解 ### 1. String(字符串) - 最基础的数据类型 String是Redis最...

gitblog_01200的博客 305

Redis数据结构以及RDB、AOF原理介绍

1. redis (核心数据结构应用场景,AOF) 在我们安装了redis之后,所有的配置都是在redis.conf文件中,里面保存了RDB和AOF两种持久化机制的各种配置 数据结构 字符串(string): 二进制安全的,最大存储512M数据 redis 127.0.0.1:6379> SET runoob "菜鸟教程" OK redis 127.0.0.1:6379> G...

lijiafa的博客 636

Redis List数据结构详解

在当今大数据时代,Redis作为一款高性能的内存数据库,被广泛应用于缓存、消息队列等领域。其中,List(列表)作为Redis中的一种数据结构,具有极高的实用性和灵活性。本文将围绕Redis知识点之List进行概述,旨在帮助读者了解List的基本概念和数据结构,为后续深入探讨打下基础。在实际应用中,我们常常会遇到需要存储和操作有序数据的需求。例如,在电商系统中,我们需要记录用户的购物车信息,这些信息通常以有序的形式存储,以便于后续的查询和处理。此时,Redis的List数据结构便派上了用场。

我是Java程序员廖志伟,感谢朋友们的支持! 1537

Redis之1-基本目录

概念       redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样

GNU'S Not Unix 5564

Redis详解

基础 1.说说什么是Redis? Redis图标 Redis是一种基于键值对(key-value)的NoSQL数据库。 比一般键值对数据库强大的地方,Redis中的value支持string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、 HyperLogLog、GEO(地理信息定位)等多种数据结构,因此 Redis可以满足很多的应用场景。 而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常出色。 不仅如此,Re

sjian1990的博客 2622

精选(54) 子弹短信内部技术分享:Redis

子弹短信内部技术分享:Redis 原理 Redis 是一个内存型「数据库」,除存储之外,它还有许多强大的命令,使之远远超出了数据库的定义,所以官方称之为「data structure store」,数据结构存储系统。 通过 Redis 提供的指令,我们可以实现缓存、消息队列、事件通知、排行榜、库存管理、分布式锁等功能。 基础结构 Redis 核心是单进程单线程服务,通过 epoll、select ...

cowbin2012的专栏 1万+

Redis设计思路结构原理集群原理应用场景

1.1. 技术说明Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作...

Hiqingtian的博客 604
上一篇: 基于索引的SQL调优
下一篇: Redis主从复制
split_second
博客等级 码龄12年 0粉丝 · 20原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值