redis
文章平均质量分 91
养歌
任何傻瓜都能写出计算机可以理解的代码,好的程序员能写出人能读懂的代码。
展开
-
Redis 主从复制原理分析,这篇就够了
前言在现有企业中 80%公司大部分使用的是 redis 单机服务,在实际的场景当中单一节点的 Redis 容易面临风险。由于无法做到故障转移,所以接下来的请求将会直接打到数据库,大量的查询使得数据库连接数达到峰值,且内部锁冲突严重,造成慢查询、连接超时等后果。所以这个时候,我们能不能把数据复制多个副本部署到其他节点上进行复制,当发生故障时,快速地手动切换连接的 Redis?当然可以的,Redis 就为我们提供了这个功能。主从模式能将 Master 节点的数据冗余到多台 Slave 上,配合哨兵模式能原创 2022-02-10 16:30:31 · 5455 阅读 · 2 评论 -
海量数据处理之 Bit-map 详细讲解
现在有这么一个问题:现存在 20 亿个数字,需要知道哪些数字没有出现在里面.这个问题你可能觉得一个 for 循环就能解决。但是有两个问题,第一个就是for循环效率的问题,第二个问题就是 20 亿个数字需要占据的内存空间,例如要存下 20 亿个数字需要多大空间呢?假设使用 int 存储,在 Java 中,int 占 4 字节,1 字节 = 8 位(1 byte = 8 bit,存放 20 亿个数字则需要:(2000000000*4/1024/1024/1024) ≈ 7.45G左右。面对上面的问题我们肯定不原创 2022-01-28 14:07:20 · 2721 阅读 · 1 评论 -
Redis 为什么这么快?
前言我们都知道 Redis 是使用内存来进行数据的存储,这也是为什么 Redis 的访问速度要远远快于 MySQL 的主要原因,因为是使用内存存储数据,可以避免频繁的进行写盘操作,大大降低响应时间,我们仅仅知道因为它是基于内存实现的,对于其它原因为什么快是一概不知。接下来就以为什么 Redis 会这么快的原因分成几部分来讲解。基于内存实现这点在上面就已经说过了,这里在简单说一下。Redis 是基于内存的数据库,不可避免的要和磁盘数据库做对比,比如 MySQL 数据库。MySQL 是关系型数据库,原创 2022-01-19 16:47:19 · 3449 阅读 · 0 评论 -
Redis 锁的过期时间小于业务的执行时间该如何续期?
前言假设我们给锁设置的过期时间太短,业务还没执行完成,锁就过期了,这块应该如何处理呢?是否可以给分布式锁续期?解决方案:先设置一个过期时间,然后我们开启一个守护线程,定时去检测这个锁的失效时间,如果锁快要过期了,操作共享资源还未完成,那么就自动对锁进行续期,重新设置过期时间。幸运的是有一个库把这些工作都帮我们封装好了,那就是 Redisson,Redisson 是 java 语言实现的 Redis SDK 客户端,它能给 Redis 分布式锁实现过期时间自动续期。当然,Redisson 不只是会做这原创 2022-01-15 17:41:25 · 5869 阅读 · 0 评论 -
使用 Redis 如何设计一个分布式锁
前言现在的业务应用通常都是微服务架构,如果一个应用部署多个进程,那这多个进程如果需要修改操作同一行记录时,为了避免操作乱序导致数据错误,此时,我们就需要引入分布式锁来解决这个问题了。而实现分布式锁,大多有以下三种方式实现:使用 MySQL 实现使用 Redis 等缓存系统实现使用 Zookeeper 实现下面我们以 Redis 来讲解如何实现分布式锁,以及分布式锁的各种安全性问题。想要实现分布式锁,关键是使用 SETNX 指令。SETNXSETNX key value这个命令执行原创 2022-01-14 18:24:00 · 629 阅读 · 0 评论 -
谈谈 Redis 的持久化---AOF 日志与 RDB 快照
前言对于 MySQL来说,数据都是持久化在磁盘上的。如果因为误操作删除数据,可以使用 Bin Log 进行恢复,要是突然宕机了,可以借助 Redo Log 进行崩溃恢复,更多的内存可以看我分享的这篇文章聊聊MySQL里面的undo Log、redo Log和bin Log日志的原子性和持久性已经复制和恢复数据实现过程而对于 Redis 来说,一般是把数据直接存储在内存中。如果不做任何持久化工作,在出现宕机后,内存中的全部数据就会丢失,很显然是不能容忍这样的情况发生的,这时 Redis 提供了一系列的持原创 2022-01-11 15:27:24 · 967 阅读 · 0 评论 -
Redis-排查Redis为什么变慢了
Redis为什么变慢了?常见延迟问题定位与分析Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右。但我们在使用 Redis 时,经常时不时会出现访问延迟很大的情况,如果你不知道 Redis 的内部实现原理,在排查问题时就会一头雾水。Redis出现访问延迟变大,都与我们的使用不当或运维不合理导致的。以下这篇文章我们就来分析一下 Redis 在使用过程中,经常会遇到的延迟问题以及如何定位和分析。文章目录链路追踪基准性能使用了复杂度过高的命令操作、存储大的bigkey大量数据集原创 2021-12-17 15:33:39 · 2310 阅读 · 0 评论 -
如何保证 Redis 缓存与数据库双写一致性?看这篇就够了
文章目录问题引入缓存提高性能缓存利用率缓存一致性先更新数据库,后更新缓存先更新缓存,后更新数据库并发引发的一致性问题删除缓存会保证一致性?先删除缓存,后更新数据库先更新数据库,后删除缓存异步重试订阅数据库变更日志,再操作缓存延迟双删只先删缓存只后删缓存普通双删延时双删极端情况总结问题面试当中总会被问题这么一个问题:如何保证 Redis 缓存和数据库一致性?但依旧有很多的疑问:到底是更新缓存还是删除缓存?到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库?对于上面的问题我们接下来一原创 2021-12-16 11:41:48 · 4680 阅读 · 0 评论 -
Redis-Sentinel(哨兵模式),看这篇就够了哦
简介Sentinel(哨兵) 是redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。然后由新的主服务器代替已下线的主服务器继续处理命令请求。例如下图所示:当Server1 掉线后:升级Server2 为新的主服务器:启动并初始化Sentinel启动一个Sentinel可以使用命令:redis-sentin原创 2021-12-15 13:37:05 · 9889 阅读 · 0 评论 -
Redis-为什么使用多线程?
一位同事面试腾讯时,面试问了这么一个问题:Redis为什么又采用多线程了,不是一直单线程的?,听到这个问题第一时间脑子有点懵,他一直没有注意这个问题,导致回答不上来。接下来我们就以这个问题展开讲解,Redis是目前使用非常广泛的一个内存数据库,在各个场景中都有着非常丰富的应用,Redis 6.0 之后的版本抛弃了单线程模型,原本使用单线程运行的 Redis 也开始选择性使用多线程模型,就算Redis的作者多牛,也逃不过“真香定律”!对于这个问题可以拆分成以下两个问题进行解答:为什么 Redis 一原创 2021-12-14 12:01:18 · 1972 阅读 · 0 评论 -
Redis-跳跃表(skip List)
什么是跳跃表(skip list)跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,跳跃表(skiplist)是一个用于有序元素序列快速搜索的随机化的数据结构,由美国计算机科学家William Pugh发明于1989年,论文《Skip lists: a probabilistic alternative to balanced trees》中提出。它的效率和红黑树以及 AVL 树不相上下,但实现起来比较容易。是一种可以于平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下原创 2021-12-13 17:24:12 · 9968 阅读 · 5 评论 -
Redis-五种基本数据结构
Redis 简介Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储Redis支持数据的备份,即master-slave模式的数据备份Redis 优势性能极高 – Redis能读原创 2021-12-13 11:30:18 · 5470 阅读 · 0 评论 -
Reids—HyperLogLog解决统计问题
HyperLogLog简介HyperLogLog 是最早由 Philippe Flajolet及其同事在 2007 年提出的一种 估算基数的近似最优算法,Redis在 2.8.9 版本才添加了 HyperLogLog,HyperLogLog算法是用于基数统计的算法,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。HyperLogLog适用于大数据量的统计,因为成本相对来说是更低的,最多也就占用12kb内存。HyperLogLog只能统计基数的大.原创 2021-12-11 14:04:45 · 407 阅读 · 0 评论 -
Redis-布隆过滤器(Bloom Filter)详解
什么是布隆过滤器布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,是一种非常节省空间的概率数据结构,运行速度快,占用内存小,但是有一定的误判率且无法删除元素。它实际上是一个很长的二进制向量和一系列随机映射函数组成,主要用于判断一个元素是否在一个集合中。通常我们都会遇到判断一个元素是否在某个集合中的业务场景,这个时候我们可能都是采用 HashMap的Put方法或者其他集合将数据保存起来,然后进行比较确定,但是如果元素很多的情况下,采用这种方式就会非常浪费空间,最终达到瓶颈,检索速度也会越原创 2021-12-09 16:30:30 · 39231 阅读 · 17 评论 -
缓存穿透、击穿、雪崩是怎么实现的,解决的办法有哪些
。缓存穿透、击穿、雪崩是怎样产生的呢?比如以下的案例缓存雪崩:假如某一个商品首页的缓存的数据Key失效时间都是10小时,中午10点刷新的,这时秒杀活动大量用户访问这个数据,假设当时每秒 10000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库还没有反应过来可能就直接挂掉了。如果没有解决分案的话,此时重启数据库的话立马又被新的流量给打挂了。这就是缓存雪崩缓存穿透:指缓存和数据库中都没有的数据,当用户不断发起原创 2021-03-23 17:13:44 · 139 阅读 · 0 评论