- 博客(712)
- 资源 (30)
- 收藏
- 关注
原创 【redis】redis实现红锁
红锁通过多节点投票机制,显著提升了分布式锁的可靠性,但需权衡其实现复杂度与运维成本。建议在以下场景选择红锁:• 需要跨机房/地域部署• 业务对数据一致性要求极高• 已具备独立Redis节点运维能力对于大多数场景,可优先使用Redisson等成熟框架,避免重复造轮子。若对一致性有极致要求,可考虑ZooKeeper/etcd等基于共识算法的方案。
2025-04-02 16:25:26
913
原创 【redis】redis实现分布式锁
在分布式系统中,协调多个节点对共享资源的访问是一个经典难题。分布式锁作为解决这类问题的关键组件,需要满足**互斥性**、**容错性**、**超时释放**等核心特性。本文基于Redis的原子操作特性,详细讲解如何用Java实现企业级分布式锁。
2025-04-02 16:20:48
995
原创 【redis】持久化之RDB与AOF
在数字世界的脉搏中,数据是流淌的血液,而持久化则是保障系统生命力的核心机制。作为内存数据库的标杆,Redis凭借其高性能特性成为互联网架构的基石,但其「易失性」的天然属性也催生了关键命题:如何在服务重启或故障时保障数据安全?从RDB快照的瞬时记忆到AOF日志的精准回放,再到混合持久化的智慧融合,Redis用三种递进式的方案回答了这一问题。RDB以二进制快照实现高效备份,AOF以日志追加构筑数据保险,而混合模式则通过「全量快照+增量日志」的架构,在恢复效率与数据安全之间找到黄金平衡点。
2025-03-27 09:48:13
39633
原创 【redis】数据类型之Stream
Redis Stream是Redis 5.0版本引入的一种新的数据类型,它提供了一种持久化的、可查询的、可扩展的消息队列服务。与传统的PUB/SUB模式相比,Stream提供了消息持久化和可靠性投递机制;与专业消息中间件(如Kafka)相比,它更加轻量且完全兼容Redis生态系统。
2025-03-27 09:46:26
29220
原创 【redis】发布订阅
Redis的发布订阅(Pub/Sub)是一种基于的通信机制,它允许消息的**发布者(Publisher)订阅者(Subscriber)**通过订阅频道或模式来接收消息。:无需额外组件,直接通过Redis服务实现:消息即时推送,无轮询延迟:一个消息可被多个订阅者同时接收:不存储历史消息,订阅者只能接收订阅后的消息。
2025-03-13 17:38:08
16918
原创 【redis】lua脚本
在分布式系统与高并发架构的战场中,开发者们始终在与两个永恒的命题博弈:**数据一致性**与**系统性能**。当我们试图用Redis构建高速缓存、实现分布式锁或设计秒杀系统时,往往会陷入这样的困境——如何在保证原子性的同时,避免网络往返带来的性能损耗?如何让复杂的多命令操作像单一指令般高效执行?这正是**Redis Lua脚本**闪耀的舞台。作为Redis的"核武器级"特性,Lua脚本不仅实现了**原子性、隔离性**的操作保障,更能将复杂的业务逻辑压缩成服务端的高性能执行单元。
2025-03-13 17:37:12
11867
原创 【redis】pipeline管道
Redis Pipeline(管道)是一种将多个命令批量发送到服务器的技术。与逐个发送命令的传统方式不同,Pipeline允许客户端一次性打包多条命令,通过完成批量操作。
2025-03-10 15:53:16
39567
原创 【redis】事务
简单地说,事务表示一组动作,要么全部执行,要么全部不执行。Redis事务是一组命令的集合,通过MULTIEXEC等命令实现批量操作的原子性执行。
2025-03-10 15:51:50
42735
原创 【redis】慢查询分析与优化
指在Redis中执行时间超过预设阈值的命令,其日志记录是排查性能瓶颈的核心工具。Redis采用单线程模型,任何耗时操作都可能阻塞后续请求,导致整体性能下降。
2025-03-09 12:29:54
38577
原创 【redis】数据类型之geo
Redis的GEO数据类型用于存储地理位置信息(如经纬度),并提供高效的地理位置查询功能(如计算两地距离、搜索附近地点等)。其底层基于Sorted Set(有序集合)实现,通过Geohash编码将经纬度转换为分数(score)进行存储。有关hyperloglog类型的命令可以通过help @geo命令来查看。有关命令的使用可以通过help 命令来查看,例如。
2025-03-09 12:28:53
18159
原创 【redis】布隆过滤器的Java实现
在Java中,要实现布隆过滤器(Bloom Filter)的方式有很多种,除了上一节中通过jedis包调用安装了布隆过滤器的redis外,还有以下几种常见的实现方式:手写布隆过滤器基于guava包实现通过redis的bitmaps实现基于redisson包实现。
2025-03-08 18:50:31
10684
原创 【redis】数据类型之布隆过滤器
布隆过滤器(Bloom Filter)的算法是由Burton Howard Bloom(伯顿·霍华德·布隆)在1970年提出的。它是一种空间效率很高的概率型数据结构,通常用于判断一个元素是否在集合中。这种数据结构的核心思想是通过一个很长的二进制向量(位数组)和一系列哈希函数来实现快速且近似的存在性查询。
2025-03-08 18:48:16
13779
原创 【python】PyMuPDF操作pdf
PyMuPDF,也被称为fitz(这是其导入时的常用别名),是一个功能强大的Python库,用于处理PDF和其他文档格式。与 PyPDF2相比,PyMuPDF提供了更多的功能和更好的性能,特别是在处理复杂的PDF文件时。
2025-02-28 09:36:14
14115
原创 【python】PyPDF2操作pdf
PyPDF2是一个用于处理PDF文件的Python库,可以读取、合并、拆分、裁剪和修改PDF文件。以下是一些使用PyPDF2的基本示例,包括如何安装该库以及执行一些常见的PDF操作。
2025-02-28 09:30:18
11414
原创 【redis】数据类型之hyperloglog
Redis的HyperLogLog(HLL)是一种高效的概率数据结构,也是一种基于字符串的数据结构,用于估计大数据集的唯一元素数量(基数统计)。它通过极低的内存占用(约 12KB)实现接近线性的时间复杂度,适用于海量数据去重计数场景(如统计独立访客数),但需容忍约0.81%的标准误差。有关hyperloglog类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help pfadd。
2025-02-25 16:10:46
9260
原创 【redis】数据类型之Bitfields
Redis的Bitfields(位域)与Bitmaps一样,在Redis中并不是一种独立的数据类型,而是一种基于字符串的数据结构,用于处理位级别的操作。允许用户将一个Redis字符串视作由一系列二进制位组成的数组,并对这些位进行高效的访问和操作。通过Bitfield,开发者可以将多个小的整数存储到一个较大的位图中,或者将一个庞大的键分割为多个较小的键进行存储,从而极大地提高了内存的使用效率。
2025-02-25 15:59:44
9302
原创 【redis】数据类型之bitmaps
Redis的Bitmaps是一种基于字符串的数据结构,用于处理位级别的操作。虽然Bitmaps在Redis中并不是一种独立的数据类型,而是基于字符串实现的,但它们提供了高效的位操作功能,适用于需要处理大量布尔值或二进制数据的场景。
2025-02-13 10:17:04
12720
原创 【redis】数据类型之sorted_set
sorted_set:有序集合,在set的基础上增加score属性用来排序,在redis中,数据类型对应的命令一般以数据类型的首字母开头,但是单词s已经被string类型使用了,所以sorted_set类型的相关命令只能使用26个英文字母中的最后一个字母z来开头,所以有些人也把sorted_set称为zset。有关sorted_set类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help zadd。
2025-02-13 10:15:24
8254
原创 【redis】数据类型之set
Redis中的SET数据类型是一种无序的集合,它允许你存储不重复的元素。SET类型提供了许多有用的操作,比如添加元素、删除元素、检查元素是否存在、计算集合的交集、并集和差集等。set(集合):其实就是数学中的集合,集合中元素要具备三个特性:确定性、无序性、互异性。确定性:一个元素要么属于集合,要么不属于集合。无序性:集合中每个元素的地位相当,没有顺序。互异性:集合中的元素都是不同,也就是一个元素在一个集合中只能出现一次。有关set类型的命令可以通过help @set命令来查看。
2025-02-08 15:08:32
10165
原创 【redis】数据类型之hash
Redis中的Hash数据类型是一种用于存储键值对集合的数据结构。与Redis的String类型不同,Hash类型允许你将多个字段(field)和值(value)存储在一个单独的key下,从而避免了将多个相关数据存储为多个独立的key。这样做的好处是减少了key的数量,使得数据的管理和操作更加高效。hash这个数据类型类似java中的HashMap,都由key-value键值对组成。有关hash类型的命令可以通过help @hash命令来查看。有关命令的使用可以通过help 命令来查看,例如。
2025-02-08 15:06:56
8582
原创 【redis】数据类型之list
Redis的List数据类型是一个双向链表,支持在链表的头部(left)和尾部(right)进行元素的插入(push)和弹出(pop)操作。这使得List既可以用作栈(stack),也可以用作队列(queue)。有关list类型的命令可以通过help @list命令来查看。有关命令的使用可以通过help 命令来查看,例如help lpush。
2025-02-06 16:08:52
18993
原创 【redis】数据类型之string
字符串类型是Redis最基础的数据结构。首先key都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习打下基础。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。有关string类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help set。
2025-02-06 16:06:37
10022
原创 【redis】redis-cli命令行工具的使用
redis-cli命令行工具是一个功能强大的Redis客户端,它允许用户与Redis数据库进行交互和管理。
2025-01-15 10:32:19
14094
原创 【redis】ubuntu18安装redis7
在Ubuntu 18下安装Redis7可以通过以下两种方法实现:手动编译安装和使用APT进行安装。
2025-01-10 15:54:48
1045
原创 【redis】centos7下安装redis7
在CentOS 7下安装Redis7可以通过以下两种方法实现:手动编译安装和使用YUM进行安装。
2025-01-10 15:49:27
1619
原创 【python】requests库发起HTTP请求
requests是Python中一个非常流行的用于发送HTTP请求的第三方库。它提供了简洁的API,使得发送各种HTTP请求(如GET、POST、PUT、DELETE等)变得非常容易。
2025-01-03 16:43:24
9859
原创 【python】json库处理JSON数据
Python的json库用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json库提供了函数来编码(将Python对象转换为JSON字符串)和解码(将JSON 字符串转换为Python对象)JSON数据。
2025-01-03 15:58:30
3690
原创 【python】命名空间与作用域
在Python中,命名空间和作用域是两个密切相关的概念,它们帮助Python解释器管理变量、函数和其他对象的可见性和生命周期。理解这些概念对于编写清晰、可维护的Python代码至关重要。
2024-12-31 10:48:03
4718
原创 【python】错误与异常
Python允许你定义自己的异常类,通过继承内置的BaseException类来实现。try:raise CustomException("这是一个自定义异常!")print(e)这是一个自定义异常!
2024-12-31 10:46:35
12776
原创 【python】面向对象
在Python中,类的定义是通过使用class关键字来实现的。类是一个模板,它定义了对象的属性和方法(即函数)。通过类,我们可以创建具有相同属性和方法的对象(实例)。class Dog:# 类属性(通常是静态的,不依赖于任何实例)# 初始化方法(构造器),在创建实例时自动调用self.name = name # 实例属性,每个实例都有自己的值self.age = age # 实例属性# 实例方法,可以访问实例属性和其他实例方法return f"
2024-12-30 10:24:08
11255
原创 【python】模块与包
你可以创建一个Python文件,并在其中定义函数、类和变量,然后将其作为一个模块导入到其他Python脚本中。在另一个新的.py文件中通过模块名访问上面自定义模块my_module.py包含的函数、类和变量。
2024-12-30 10:22:26
8492
原创 【python】数据结构之栈与队列
在Python3中,列表(list)是一种非常灵活的数据结构,可以用来实现多种其他数据结构,包括栈(Stack)、队列(Queue)。虽然Python的内置列表已经提供了很多强大的功能,但有时候为了实现特定的数据操作行为(如LIFO、FIFO或动态大小),我们可能会选择用列表来模拟这些数据结构。
2024-12-20 11:08:37
26489
原创 【python】装饰器
在Python中,装饰器(decorators)是一种高级功能,它允许你在不修改原有函数或方法代码的情况下,给函数或方法添加新的功能。装饰器本质上是一个返回函数的函数,它接受一个函数作为参数,并返回一个新的函数(有时是对原函数的封装或修改)。
2024-12-20 10:51:19
19164
原创 【python】lambda匿名函数
在Python中,lambda是一个关键字,用于创建小型匿名函数。匿名函数意味着函数没有具体的名称。lambda函数可以接受任意数量的参数,但只能有一个表达式。表达式的结果就是这个函数的返回值。由于lambda函数的简洁性,它们通常用于需要将函数作为参数传递或需要在代码中进行简单计算的场合。
2024-12-18 14:39:38
23821
原创 【python】函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。
2024-12-18 14:29:50
23200
原创 【python】迭代器与生成器
在Python中,迭代器(Iterator)是一种对象,它表示一个数据流,允许你按顺序逐个访问数据元素,而无需一次性将所有数据加载到内存中。
2024-12-17 15:12:20
19538
原创 【python】推导式
Python推导式(comprehensions)是一种简洁且高效地从可迭代对象创建新列表、集合、字典或元组的方法。它们提供了一种优雅的方式来表达循环和条件逻辑,同时避免了冗长的循环代码。Python推导式主要分为列表推导式(list comprehensions)、集合推导式(set comprehensions)、字典推导式(dict comprehensions)以及元组推导式(虽然元组推导式不常见,因为元组是不可变的,但可以通过生成器表达式配合tuple()函数来实现)。
2024-12-17 14:56:06
18466
原创 【python】循环语句
在Python中,循环语句用于重复执行一段代码块,直到满足某个条件为止。Python提供了两种主要的循环结构:for循环和while循环。
2024-12-12 15:54:53
14448
原创 【python】match和case语句
在Python 3.10及更高版本中引入的match和case语句提供了一种新的结构化模式匹配机制。这种机制允许开发者根据值的类型或结构来执行不同的代码块,使代码更加清晰和易于理解,类似于其他编程语言中的switch语句,但功能更为强大和灵活。
2024-12-12 15:32:30
10918
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人