![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
缓存
文章平均质量分 92
缓存
辣香牛肉面
这个作者很懒,什么都没留下…
展开
-
RabbitMQ实用技巧
RabbitMQ是最受欢迎的开源消息中间件之一,在全球范围内被广泛应用。RabbitMQ是轻量级且易于部署的,能支持多种消息协议。RabbitMQ可以部署在分布式系统中,以满足大规模、高可用的要求。原创 2024-07-23 08:04:36 · 709 阅读 · 0 评论 -
Redis实现延迟队列的方案总结
实现思路:ZSet 是一种有序集合类型,它可以存储不重复的元素,并且给每个元素赋予一个 double 类型的排序权重值(score),所以可以将元素的过期时间作为分值,通过定时任务扫描的方式判断是否达到过期时间,从而实现延迟队列。Zset+定时任务的实现延迟任务的方式虽然比监听过期key方案合理一些,但是它还是存在一定的缺陷,如无重试机制、延迟时间固定化(依赖定时任务的执行时间)、不适用于大规模的延迟任务。下面介绍几种redis常见的实现延迟队列的方案。原创 2024-07-17 08:20:26 · 450 阅读 · 0 评论 -
Redis 运维面试题
如果你想返回用户及用户的分数,你需要这样执行:ZRANGE user_scores 0 10 WITHSCORES Agora Games 就是一个很好的例子,用 Ruby 实现的,它的排行榜就是使用 Redis 来存储数据的,你可以在这里看到。紧接着你需要抓一抓自己的脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得 set 指令有非常复杂的参数,这个应该是可以同时把 setnx 和expire 合成一条指令来用的!换句话说,Redis 的存储极限是系统中的可用内存值。原创 2024-07-08 08:08:09 · 720 阅读 · 0 评论 -
如何发现Redis热Key,有哪些解决方案?
如果一个 key 的访问次数比较多且明显多于其他 key 的话,那这个 key 就可以看作是hotkey(热 Key)。例如在 Redis 实例的每秒处理请求达到 5000 次,而其中某个 key 的每秒访问量就高达 2000 次,那这个 key 就可以看作是 hotkey。hotkey 出现的原因主要是某个热点数据访问量暴增,如重大的热搜事件、参与秒杀的商品。原创 2024-06-23 10:40:33 · 1288 阅读 · 3 评论 -
Redis大key有什么危害?如何排查和处理?
简单来说,如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。具体多大才算大呢?有一个不是特别精确的参考标准:String 类型的 value 超过 1MB复合类型(List、Hash、Set、Sorted Set 等)的 value 包含的元素超过 5000 个(不过,对于复合类型的 value 来说,不一定包含的元素越多,占用的内存就越多)。bigkey 判定标准。原创 2024-06-22 07:56:29 · 1667 阅读 · 0 评论 -
如何基于Redis实现分布式锁?
对于单机多线程来说,在 Java 中,我们通常使用类、关键字这类 JDK 自带的本地锁来控制一个 JVM 进程内的多个线程对本地共享资源的访问。下面是我对本地锁画的一张示意图。本地锁从图中可以看出,这些线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到本地锁访问共享资源。分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁就诞生了。原创 2024-06-22 07:53:03 · 1070 阅读 · 0 评论 -
什么是 Redis?
Redis[1] (REmoteDIctionaryServer)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库,支持持久化),因此读写速度非常快,被广泛应用于分布式缓存方向。并且,Redis 存储的是 KV 键值对数据。为了满足不同的业务场景,Redis 内置了多种数据类型实现(比如 String、Hash、Sorted Set、Bitmap、HyperLogLog、GEO)。原创 2024-06-21 08:19:02 · 1069 阅读 · 0 评论 -
如何实现缓存预热?
预热一般指缓存预热,一般用在高并发系统中,为了提升系统在高并发情况下的稳定性的一种手段。缓存预热是指在系统启动之前或系统达到高峰期之前,通过预先将常用数据加载到缓存中,以提高缓存命中率和系统性能的过程。缓存预热的目的是尽可能地避免缓存击穿和缓存雪崩,还可以减轻后端存储系统的负载,提高系统的响应速度和吞吐量。原创 2024-06-21 08:17:35 · 885 阅读 · 0 评论 -
Redis 5 种基础数据结构?
String 是 Redis 中最简单同时也是最常用的一个数据结构。String 是一种二进制安全的数据结构,可以用来存储任何类型的数据比如字符串、整数、浮点数、图片(图片的 base64 编码或者解码或者图片的路径)、序列化后的对象。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种简单动态字符串SDS。原创 2024-06-20 08:03:57 · 711 阅读 · 0 评论 -
Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案
缓存穿透说简单点就是大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力,可能直接就被这么多请求弄宕机了。缓存穿透举个例子:某个黑客故意制造一些非法的 key 发起大量请求,导致大量请求落到数据库,结果数据库上也没有查到对应的数据。也就是说这些请求最终都落到了数据库上,对数据库造成了巨大的压力。缓存击穿中,请求的 key 对应的是热点数据,该数据。原创 2024-06-20 08:06:44 · 1264 阅读 · 0 评论 -
宕机了,Redis 如何避免数据丢失?
Redis 可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis 主从结构,主要用来提高 Redis 性能),还可以将快照留在原地以便重启服务器的时候使用。快照持久化是 Redis 默认采用的持久化方式,在redis.confsave 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发bgsave命令创建快照。原创 2024-06-19 08:10:35 · 971 阅读 · 0 评论 -
Redis 如何使用批量操作提高效率?
一个 Redis 命令的执行可以简化为以下 4 步:发送命令命令排队命令执行返回结果其中,第 1 步和第 4 步耗费时间之和称为,也就是数据在网络上传输的时间。原创 2024-06-19 08:11:54 · 642 阅读 · 0 评论 -
本地缓存和分布式缓存有什么区别?如何选择?
Fred Brooks 在 1987 年所发表的一篇关于软件工程的经典论文《没有银弹:软件工程的本质性与附属性工作》。论文强调真正的银弹并不存在,而所谓的银弹则是指没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍。在技术领域中没有一种通用的解决方案可以解决所有问题。技术本质上是为了解决问题而存在的,每个问题都有其独特的环境和限制条件,没有一种通用的技术或工具可以完美地解决所有问题。缓存是把双刃剑。原创 2024-06-18 07:59:58 · 978 阅读 · 0 评论 -
Redis 除了缓存还能做什么?可以做消息队列吗?
不过,消息丢失(客户端断开连接或者 Redis 宕机都会导致消息丢失)、消息堆积(发布者发布消息的时候不会管消费者的具体消费能力如何)等问题依然没有一个比较好的解决办法。综上,和专业的消息队列相比,使用 Redis 来实现消息队列还是有很多欠缺的地方比如消息丢失和堆积问题不好解决。:通过 Redis 以及 Redis 扩展(比如 Redisson)提供的数据结构,我们可以很方便地完成很多复杂的业务场景比如通过 Bitmap 统计活跃用户、通过 Sorted Set 维护排行榜。原创 2024-06-18 07:59:32 · 670 阅读 · 0 评论 -
Redis 内存碎片是什么?如何清理?
你可以将内存碎片简单地理解为那些不可用的空闲内存。举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片。内存碎片Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。原创 2024-06-17 08:48:05 · 1648 阅读 · 0 评论