Redis
文章平均质量分 72
Redis
Java-Talk
这个作者很懒,什么都没留下…
展开
-
Redis 基于 Hessian 序列化和反序列化出现的问题
目录一 问题描述1.1 前提1.2 现象二 问题分析2.1 序列化和反序列化2.2现象分析2.3 问题根源三 问题解决一 问题描述1.1 前提 A、B 两个服务共享一套 Redis 集群,使用 Hessian 对数据进行序列化和反序列化操作。A、B 服务存在同一个 key,value 都是 User 对象。1.2 现象 ...原创 2019-09-01 11:23:35 · 1557 阅读 · 0 评论 -
Redis 的 key 和 value 应用最佳实践
目录一 key的使用二 value的使用2.1 避免出现大对象2.2 给 value 设置过期时间。2.3 value 数据冷热分离三 容量评估本文主要总结工作这些年来,一些使用 Redis 较好的实践经验,希望能给你一点点启发或者帮助。一 key的使用key 如何命名呢?从简洁性、易阅读性角度考虑,如:服务名 + 业务模块 + 业务数据key 多长合适呢?在完整描述业务的前提下,key 越短越好,为啥呢?key 长了不占内存么?内存也不是大风刮来的吧。.原创 2021-01-14 20:47:52 · 2196 阅读 · 3 评论 -
如何保证缓存与数据库的一致性?
目录先删缓存,再更新数据库解决方案延时双删先更新数据库,再删除缓存解决方案消息队列进阶版消息队列其他解决方案设置缓存过期时间为什么是删除,而不是更新缓存?总结对于缓存和数据库的操作,主要有以下两种方式。先删缓存,再更新数据库先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。解决方案 延时双删延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数转载 2020-12-26 16:54:04 · 4246 阅读 · 0 评论 -
跳跃表的原理和实现以及应用
目录1. 跳跃表的原理2. 跳跃表的实现步骤分析3. 代码实现1. 跳跃表的原理学过数据结构的都知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。 如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的...转载 2020-02-16 08:45:00 · 1373 阅读 · 0 评论 -
09-Redis IO 多路复用
目录一 Redis 是单线程还是多线程?二 为什么单线程的 Redis 性能很高?三 什么是 IO 多路复用技术?一 Redis 是单线程还是多线程?这个问题可以一分为二:Redis 是单线程,是因为 Redis 使用文件事件分派器来处理事件队列,且该文件事件分派器是单线程的,所以 Redis 才叫做单线程的模型。Redis 是多线程,是因为持久化、异步删除、集群数据同步等操作都是由数据读写线程之外其他线程执行的,所以 Redis 也可以叫做多线程模型。之所以大家都说是单线程原创 2021-04-18 22:42:35 · 2117 阅读 · 0 评论 -
08-BloomFilter 解决 Redis 缓存穿透问题
一 什么是 BloomFilter 布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。 布隆过滤器用于检索一个元素是在集合中的状态可以得到下面两种情况:1一定不在集合中;2可能存在集合中。二BloomFilter 原理 布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几个哈希函数。2.1 布隆过滤器添加元素 1 将要添加的元素通过 K 个散列函数进行映射,得到一个位数组中的 K 个点; ...原创 2020-07-05 13:28:35 · 1027 阅读 · 0 评论 -
05-Redis 的穿透、雪崩、击穿
Redis 穿透、雪崩、击穿学习和解决。原创 2020-07-08 22:59:14 · 392 阅读 · 0 评论 -
01-Redis 数据结构和特性
目录1.1 Redis 是什么?1.2 Redis 有哪些特性1.3 Redis 的使用场景1.1 Redis 是什么?Redis 是一种基于键值对(key-value)的NoSQL数据库,相比其他键值对数据库的优势是,Redis 的 value 值类型更加的丰富可以由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitma...原创 2019-07-10 08:46:47 · 603 阅读 · 0 评论 -
04-Redis 过期策略、内存淘汰机制和 LRU 算法的实现
一 Redis 过期策略Redis 过期策略是:定期删除 + 惰性删除。定期删除 定期删除,指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 Redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 Redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key,那样就是一场性能上...原创 2020-07-02 21:13:22 · 645 阅读 · 0 评论 -
03-Redis 数据分布
目录一 数据分布理论1.1 节点取余分区1.2 一致性Hash分区1.3 虚拟槽分区二 Redis数据分区一 数据分布理论 分布式数据库首先要解决整个数据集按照分区规则映射到多个节点的问题,也就是需要把数据集划分到多个节点上,每个节点负责整个数据的一个子集。如图所示: 常见的分区规则有哈希分区和顺...原创 2019-07-14 11:08:13 · 902 阅读 · 0 评论 -
07-Bitmap 原理和实现及其在 Redis 的应用
一 Bitmap原理 Bitmap 的基本原理就是用一个 bit 来标记某个元素对应的 Value,而 Key 即是该元素。由于采用一个bit 来存储一个数据,因此可以大大的节省空间。 比如我们需要将数据从 A 表迁移到 A1...A10 个表,我们可以使用Bitmap来表示 A 表中的数据标记数据迁移状态。现在我们将 2,7,12,15迁移到 A1...A10 表中,经过BitMaps 标记后如下图所示:二 Bitmap 代码实现public cla...原创 2020-07-04 20:16:47 · 2769 阅读 · 0 评论 -
06-Redis 实现分布式锁和解决锁续期问题
目录一 为什么需要分布式锁二 Redis 实现分布式锁2.1 加锁操作2.2 释放锁操作三 参考文档一 为什么需要分布式锁 在一些高并发的场景中,需要对共享变量进行互斥访问。也就是说在同一时间点有且只能有一个客户端能对共享资源进行访问。如电商系统中的秒杀系统等。二 Redis 实现分布式锁 为了保证分布式锁的可用性,我们要保证分布式锁的实...原创 2019-07-17 09:06:35 · 4617 阅读 · 1 评论 -
02-Redis 缓存设计
目录一 缓存的收益和成本二 缓存更新策略三 缓存粒度控制四 穿透优化五 雪崩优化六 击穿优化一 缓存的收益和成本1.1 收益加速读写:缓存都是全内存(Redis、Memcache),而存储层通常读写性能不够强悍(Mysql),通过缓存的使用可以有效地加速读写,优化用户体验。 降低后端负载:帮助后端减少访问量和复杂计算(很复杂的 SQL 语句),在很大程度降低了...原创 2019-07-11 08:44:10 · 496 阅读 · 0 评论