- 博客(720)
- 资源 (30)
- 收藏
- 关注
原创 【redis】lettuce客户端的使用
Lettuce是一款高性能的Java Redis客户端,专为高并发和分布式场景设计,已成为Spring Boot默认的Redis驱动框架。通过非阻塞I/O模型和线程安全性,Lettuce在企业级应用中广泛使用。Spring Boot集成Lettuce时,只需在pom.xml中添加相关依赖,并在application.yml中配置Redis参数,支持单机、哨兵和集群模式。Lettuce自动处理集群拓扑变化,并通过本地缓存优化性能。哨兵模式下,可通过自定义配置实现读写分离,提升系统负载能力。Lettuce的智能
2025-05-14 10:10:39
526
原创 【redis】jedis客户端的使用
Jedis是Redis官方推荐的Java客户端库,支持单机、哨兵及集群模式,API设计与Redis命令高度一致,降低了学习成本。通过Maven引入依赖后,开发者可以轻松进行字符串、哈希、列表等数据类型的操作。Jedis连接池优化了性能,通过复用连接减少网络延迟,并解决多线程安全问题。与Spring Boot结合使用时,需配置Redis服务器地址及连接池参数,并自定义RedisTemplate以避免默认的JDK序列化问题。Jedis的高效性和易用性使其成为Java开发中操作Redis的首选工具。
2025-05-14 10:07:44
414
原创 【redis】CacheAside的数据不一致性问题
缓存的使用虽然提升了系统性能,但也带来了缓存与数据库一致性的挑战。文章分析了四种更新策略:先更新数据库后更新缓存、先更新缓存后更新数据库、先删除缓存后更新数据库、先更新数据库后删除缓存,并指出每种策略可能引发的数据不一致问题。特别是并发写冲突和缓存更新失败是常见问题。文章还探讨了延迟双删策略和通过订阅MySQL binlog来处理缓存的方法,以减少不一致的时间窗口。最终,文章强调了在无法实现强一致性的情况下,通过技术手段尽可能缩短不一致时间窗口的重要性。
2025-05-13 11:03:14
1323
原创 【redis】缓存策略
随着应用程序复杂性的增加,缓存管理成为提升性能和用户体验的关键。不同的缓存策略各有优劣,适用于不同的场景。Cache-Aside策略通过应用程序直接管理缓存,适用于读多写少的场景,但存在短暂数据不一致和缓存击穿的风险。Read/Write Through策略通过缓存层管理数据读写,简化应用逻辑并保证强一致性,但写入性能较低且依赖缓存服务稳定性。Write-Back策略通过异步更新数据库,提升写入性能,但存在数据一致性风险。Write-Through-Back策略结合了Write-Through和Write-
2025-05-13 10:59:40
910
原创 【redis】集群模式
Redis Cluster是Redis官方推出的分布式解决方案,旨在通过数据分片、高可用和动态扩展能力满足大规模数据存储与高并发访问的需求。其核心机制基于,将16384个哈希槽均匀分配给集群中的主节点,每个键通过CRC16哈希算法映射到特定槽位,实现数据的分布式存储与负载均衡。
2025-05-08 15:28:55
6250
原创 【redis】分片方案
Redis分片(Sharding)是解决单机性能瓶颈的核心技术,其本质是将数据分散存储到多个Redis节点(实例)中,每个实例将只是所有键的一个子集,通过水平扩展提升系统容量和性能。
2025-05-08 15:27:17
7363
原创 【redis】哨兵模式
Redis主从模式虽然支持数据备份与读写分离,但存在三大核心缺陷:**1. 故障切换依赖人工**(主节点宕机需手动提升从节点);**2. 监控能力缺失**(无法自动检测节点异常);**3. 脑裂风险**(网络分区可能导致双主数据冲突)。这些缺陷使得系统可用性难以保障,尤其在分布式场景下隐患显著。
2025-04-23 13:54:13
14111
原创 【redis】主从复制
Redis的单机模式仅部署单个实例,一旦节点宕机或网络故障,所有依赖Redis的服务将不可用,这就是所谓的单点故障问题。单节点需承担全部读写请求,并发量高时可能成为性能瓶颈。单节点受限于物理内存容量,无法突破内存物理上限存储海量数据。所有请求都怼到一个实例,磁盘IO、网络IO、带宽、CPU等资源都会成为瓶颈。注意:读写分离并不是Redis自带,需要客户端手动实现。
2025-04-23 13:52:27
16321
原创 【redis】redis实现红锁
红锁通过多节点投票机制,显著提升了分布式锁的可靠性,但需权衡其实现复杂度与运维成本。建议在以下场景选择红锁:• 需要跨机房/地域部署• 业务对数据一致性要求极高• 已具备独立Redis节点运维能力对于大多数场景,可优先使用Redisson等成熟框架,避免重复造轮子。若对一致性有极致要求,可考虑ZooKeeper/etcd等基于共识算法的方案。
2025-04-02 16:25:26
48820
原创 【redis】redis实现分布式锁
在分布式系统中,协调多个节点对共享资源的访问是一个经典难题。分布式锁作为解决这类问题的关键组件,需要满足**互斥性**、**容错性**、**超时释放**等核心特性。本文基于Redis的原子操作特性,详细讲解如何用Java实现企业级分布式锁。
2025-04-02 16:20:48
51428
原创 【redis】持久化之RDB与AOF
在数字世界的脉搏中,数据是流淌的血液,而持久化则是保障系统生命力的核心机制。作为内存数据库的标杆,Redis凭借其高性能特性成为互联网架构的基石,但其「易失性」的天然属性也催生了关键命题:如何在服务重启或故障时保障数据安全?从RDB快照的瞬时记忆到AOF日志的精准回放,再到混合持久化的智慧融合,Redis用三种递进式的方案回答了这一问题。RDB以二进制快照实现高效备份,AOF以日志追加构筑数据保险,而混合模式则通过「全量快照+增量日志」的架构,在恢复效率与数据安全之间找到黄金平衡点。
2025-03-27 09:48:13
45640
原创 【redis】数据类型之Stream
Redis Stream是Redis 5.0版本引入的一种新的数据类型,它提供了一种持久化的、可查询的、可扩展的消息队列服务。与传统的PUB/SUB模式相比,Stream提供了消息持久化和可靠性投递机制;与专业消息中间件(如Kafka)相比,它更加轻量且完全兼容Redis生态系统。
2025-03-27 09:46:26
30255
原创 【redis】发布订阅
Redis的发布订阅(Pub/Sub)是一种基于的通信机制,它允许消息的**发布者(Publisher)订阅者(Subscriber)**通过订阅频道或模式来接收消息。:无需额外组件,直接通过Redis服务实现:消息即时推送,无轮询延迟:一个消息可被多个订阅者同时接收:不存储历史消息,订阅者只能接收订阅后的消息。
2025-03-13 17:38:08
17020
原创 【redis】lua脚本
在分布式系统与高并发架构的战场中,开发者们始终在与两个永恒的命题博弈:**数据一致性**与**系统性能**。当我们试图用Redis构建高速缓存、实现分布式锁或设计秒杀系统时,往往会陷入这样的困境——如何在保证原子性的同时,避免网络往返带来的性能损耗?如何让复杂的多命令操作像单一指令般高效执行?这正是**Redis Lua脚本**闪耀的舞台。作为Redis的"核武器级"特性,Lua脚本不仅实现了**原子性、隔离性**的操作保障,更能将复杂的业务逻辑压缩成服务端的高性能执行单元。
2025-03-13 17:37:12
12059
原创 【redis】pipeline管道
Redis Pipeline(管道)是一种将多个命令批量发送到服务器的技术。与逐个发送命令的传统方式不同,Pipeline允许客户端一次性打包多条命令,通过完成批量操作。
2025-03-10 15:53:16
40864
原创 【redis】事务
简单地说,事务表示一组动作,要么全部执行,要么全部不执行。Redis事务是一组命令的集合,通过MULTIEXEC等命令实现批量操作的原子性执行。
2025-03-10 15:51:50
44330
原创 【redis】慢查询分析与优化
指在Redis中执行时间超过预设阈值的命令,其日志记录是排查性能瓶颈的核心工具。Redis采用单线程模型,任何耗时操作都可能阻塞后续请求,导致整体性能下降。
2025-03-09 12:29:54
39772
原创 【redis】数据类型之geo
Redis的GEO数据类型用于存储地理位置信息(如经纬度),并提供高效的地理位置查询功能(如计算两地距离、搜索附近地点等)。其底层基于Sorted Set(有序集合)实现,通过Geohash编码将经纬度转换为分数(score)进行存储。有关hyperloglog类型的命令可以通过help @geo命令来查看。有关命令的使用可以通过help 命令来查看,例如。
2025-03-09 12:28:53
18431
原创 【redis】布隆过滤器的Java实现
在Java中,要实现布隆过滤器(Bloom Filter)的方式有很多种,除了上一节中通过jedis包调用安装了布隆过滤器的redis外,还有以下几种常见的实现方式:手写布隆过滤器基于guava包实现通过redis的bitmaps实现基于redisson包实现。
2025-03-08 18:50:31
10811
原创 【redis】数据类型之布隆过滤器
布隆过滤器(Bloom Filter)的算法是由Burton Howard Bloom(伯顿·霍华德·布隆)在1970年提出的。它是一种空间效率很高的概率型数据结构,通常用于判断一个元素是否在集合中。这种数据结构的核心思想是通过一个很长的二进制向量(位数组)和一系列哈希函数来实现快速且近似的存在性查询。
2025-03-08 18:48:16
13944
原创 【python】PyMuPDF操作pdf
PyMuPDF,也被称为fitz(这是其导入时的常用别名),是一个功能强大的Python库,用于处理PDF和其他文档格式。与 PyPDF2相比,PyMuPDF提供了更多的功能和更好的性能,特别是在处理复杂的PDF文件时。
2025-02-28 09:36:14
14269
原创 【python】PyPDF2操作pdf
PyPDF2是一个用于处理PDF文件的Python库,可以读取、合并、拆分、裁剪和修改PDF文件。以下是一些使用PyPDF2的基本示例,包括如何安装该库以及执行一些常见的PDF操作。
2025-02-28 09:30:18
11528
原创 【redis】数据类型之hyperloglog
Redis的HyperLogLog(HLL)是一种高效的概率数据结构,也是一种基于字符串的数据结构,用于估计大数据集的唯一元素数量(基数统计)。它通过极低的内存占用(约 12KB)实现接近线性的时间复杂度,适用于海量数据去重计数场景(如统计独立访客数),但需容忍约0.81%的标准误差。有关hyperloglog类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help pfadd。
2025-02-25 16:10:46
9362
原创 【redis】数据类型之Bitfields
Redis的Bitfields(位域)与Bitmaps一样,在Redis中并不是一种独立的数据类型,而是一种基于字符串的数据结构,用于处理位级别的操作。允许用户将一个Redis字符串视作由一系列二进制位组成的数组,并对这些位进行高效的访问和操作。通过Bitfield,开发者可以将多个小的整数存储到一个较大的位图中,或者将一个庞大的键分割为多个较小的键进行存储,从而极大地提高了内存的使用效率。
2025-02-25 15:59:44
9453
原创 【redis】数据类型之bitmaps
Redis的Bitmaps是一种基于字符串的数据结构,用于处理位级别的操作。虽然Bitmaps在Redis中并不是一种独立的数据类型,而是基于字符串实现的,但它们提供了高效的位操作功能,适用于需要处理大量布尔值或二进制数据的场景。
2025-02-13 10:17:04
12842
原创 【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
8473
原创 【redis】数据类型之set
Redis中的SET数据类型是一种无序的集合,它允许你存储不重复的元素。SET类型提供了许多有用的操作,比如添加元素、删除元素、检查元素是否存在、计算集合的交集、并集和差集等。set(集合):其实就是数学中的集合,集合中元素要具备三个特性:确定性、无序性、互异性。确定性:一个元素要么属于集合,要么不属于集合。无序性:集合中每个元素的地位相当,没有顺序。互异性:集合中的元素都是不同,也就是一个元素在一个集合中只能出现一次。有关set类型的命令可以通过help @set命令来查看。
2025-02-08 15:08:32
10253
原创 【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
8685
原创 【redis】数据类型之list
Redis的List数据类型是一个双向链表,支持在链表的头部(left)和尾部(right)进行元素的插入(push)和弹出(pop)操作。这使得List既可以用作栈(stack),也可以用作队列(queue)。有关list类型的命令可以通过help @list命令来查看。有关命令的使用可以通过help 命令来查看,例如help lpush。
2025-02-06 16:08:52
19101
原创 【redis】数据类型之string
字符串类型是Redis最基础的数据结构。首先key都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习打下基础。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。有关string类型的命令可以通过命令来查看。有关命令的使用可以通过help 命令来查看,例如help set。
2025-02-06 16:06:37
10088
原创 【redis】redis-cli命令行工具的使用
redis-cli命令行工具是一个功能强大的Redis客户端,它允许用户与Redis数据库进行交互和管理。
2025-01-15 10:32:19
14827
原创 【redis】ubuntu18安装redis7
在Ubuntu 18下安装Redis7可以通过以下两种方法实现:手动编译安装和使用APT进行安装。
2025-01-10 15:54:48
27547
原创 【redis】centos7下安装redis7
在CentOS 7下安装Redis7可以通过以下两种方法实现:手动编译安装和使用YUM进行安装。
2025-01-10 15:49:27
34719
原创 【python】requests库发起HTTP请求
requests是Python中一个非常流行的用于发送HTTP请求的第三方库。它提供了简洁的API,使得发送各种HTTP请求(如GET、POST、PUT、DELETE等)变得非常容易。
2025-01-03 16:43:24
9923
原创 【python】json库处理JSON数据
Python的json库用于处理JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json库提供了函数来编码(将Python对象转换为JSON字符串)和解码(将JSON 字符串转换为Python对象)JSON数据。
2025-01-03 15:58:30
3744
原创 【python】命名空间与作用域
在Python中,命名空间和作用域是两个密切相关的概念,它们帮助Python解释器管理变量、函数和其他对象的可见性和生命周期。理解这些概念对于编写清晰、可维护的Python代码至关重要。
2024-12-31 10:48:03
10381
原创 【python】错误与异常
Python允许你定义自己的异常类,通过继承内置的BaseException类来实现。try:raise CustomException("这是一个自定义异常!")print(e)这是一个自定义异常!
2024-12-31 10:46:35
12901
原创 【python】面向对象
在Python中,类的定义是通过使用class关键字来实现的。类是一个模板,它定义了对象的属性和方法(即函数)。通过类,我们可以创建具有相同属性和方法的对象(实例)。class Dog:# 类属性(通常是静态的,不依赖于任何实例)# 初始化方法(构造器),在创建实例时自动调用self.name = name # 实例属性,每个实例都有自己的值self.age = age # 实例属性# 实例方法,可以访问实例属性和其他实例方法return f"
2024-12-30 10:24:08
11330
原创 【python】模块与包
你可以创建一个Python文件,并在其中定义函数、类和变量,然后将其作为一个模块导入到其他Python脚本中。在另一个新的.py文件中通过模块名访问上面自定义模块my_module.py包含的函数、类和变量。
2024-12-30 10:22:26
8540
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人