redis1_简单回顾
文章平均质量分 80
redis_简单回顾
飘然渡沧海
这个作者很懒,什么都没留下…
展开
-
Redis 实现限流的三种方式
我们在使用Redis的分布式锁的时候,大家都知道是依靠了setnx的指令,在CAS(Compare and swap)的操作的时候,同时给指定的key设置了过期实践(expire),我们在限流的主要目的就是为了在单位时间内,有且仅有N数量的请求能够访问我的代码程序。所以依靠setnx可以很轻松的做到这方面的功能。比如我们需要在10秒内限定20个请求,那么我们在setnx的时候可以设置过期时间10,当请求的setnx数量达到20时候即达到了限流效果。代码比较简单就不做展示了。当然这种做法的弊端是很多的,比如原创 2022-07-01 14:08:43 · 124 阅读 · 0 评论 -
Redis 的过期数据如何处理,淘汰机制都有那些?
并不会立马删除。Redis 有两种删除过期数据的策略:从 Redis 版本 7.0.0 开始: 添加了选项:、和、 选项。key 过期信息是用 Unix 绝对时间戳表示的。为了让过期操作正常运行,机器之间的时间必须保证稳定同步,否则就会出现过期时间不准的情况。比如两台时钟严重不同步的机器发生 RDB 传输, slave 的时间设置为未来的 2000 秒,假如在 master 的一个 key 设置 1000 秒存活,当 Slave 加载 RDB 的时候 key 就会认为该 key 过期(因为 slave 机器原创 2022-06-29 17:08:42 · 1373 阅读 · 0 评论 -
Redis知识点&面试题总结
简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。分布式缓存的话,使用的比较多的主要是 Memcached 和 Redis。不过,现在基本没有看过还有项目使用 Memcach原创 2022-06-09 09:32:07 · 122 阅读 · 0 评论 -
redis-8.(击穿,穿透,雪崩)spring.data.redis、连接、序列化、high/low api
redis缓存击穿缓存一般收到内存大小限制,key 可能会被LRU LFU清掉,也有可能设置过期时间删除了,因为某些key不在redis里面了,大量并发来找这个key的时候,客户端直接去请求数据库,这就是缓存击穿解决办法设置key永远不过期,或者快过期时,通过另一个异步线程重新设置key当从缓存拿到的数据为null,重新从数据库加载数据的过程上锁这里其实还是会存在一个问题:如果第一个拿到锁的人挂了,别人也拿不到锁,这样就死锁了。可以设置锁的过期时间来避免这个问题。由于我设置了过期时原创 2022-02-26 15:50:00 · 465 阅读 · 0 评论 -
redis-7.redis的主从复制、CAP、PAXOS、cluster分片集群02
redis关于spring-redis的APIspring-api要学会看官方文档,在github上看readme都挺重要的解决单节点数据容量问题-sharding分片可以根据业务拆分按照算法+取模拆分,有弊端如果加机器去模不好计算使用random随机分配节点,适合做消息队列使用一致性哈希算法比较可靠,也可以叫映射算法千万别整到mysql,redis数据没了可以重新加载,作为缓存时数据时非必要的reids 链接对server端得成本很高,是对server端造成额原创 2022-02-25 18:56:59 · 487 阅读 · 0 评论 -
redis-6.redis的主从复制、CAP、PAXOS、cluster分片集群01
redisredis单机在redis 单机,单节点,单实例存在的问题单点故障(物理机挂了)容量有限压力很大解决方式AKF有XYZ三个轴,可以只发生一个,可以多个维度一起发生AKF 立方体也叫做scala cube,它在《The Art of Scalability》一书中被首次提出,旨在提供一个系统化的扩展思路。AKF 把系统扩展分为以下三个维度:X 轴:直接水平复制应用进程来扩展系统。Y 轴:将功能拆分出来扩展系统。Z 轴:基于用户信息扩展系统。其实无论事redis,mysq原创 2022-02-22 18:49:37 · 947 阅读 · 0 评论 -
redis-5.redis的RDB、fork、copyonwrite、AOF、RDB&AOF混合使用
reids缓存:数据可以丢 急速!数据库:数据绝对不能丢的 速度内存中的持久性是掉电易失!redis+mysql > 数据库 《 不太对存储层基本都有两个东西快照/副本日志文件假设我们8.00的时候启动快照,那么落入磁盘的数据是多久的呢阻塞状态这个时候redis无法提供服务非阻塞状态这个时候大家一看感觉非常好,因为也不会造成redis阻塞,用户这个时候也能写入,但是有个问题就是数据量比较大的时候,肯定不会1S内直接写完,比如说八点开始八点原创 2022-02-21 16:00:00 · 447 阅读 · 0 评论 -
redis-4.redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU
redispipeline啤酒理论,比如商店有24瓶啤酒,你总不能拿一瓶回家喝一瓶,你要找个箱子一起把啤酒搬回家buffer 机制也可以这样子理解,避免了来回调用一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。Redis很早就支持管道(pipelining原创 2022-02-18 19:34:26 · 390 阅读 · 0 评论 -
redis-3.redis的list、set、hash、sorted_set、skiplist
redislist首先看图,感知一波。list里面第一个压得是a 最后一个是 f 127.0.0.1:16379> LPUSH k1 a b c d e f(integer) 6127.0.0.1:16379> list里面第一个压得是f 最后一个是 a127.0.0.1:16379> RPush k2 a b c d e f(integer) 6127.0.0.1:16379> lpop k1"f"LPUSH,RPush,lpop,RPOPL原创 2022-02-17 19:13:46 · 463 阅读 · 0 评论 -
redis-1.安装redis-图文并茂
redis安装redis访问官网 https://redis.io/2. 可以复制该链接,也可以直接下载,我这里用的是直接复制链接3. yum install wgetLinux下载wget 命令4. wget https://download.redis.io/releases/redis-6.2.6.tar.gz5. 解压压缩包 tar xf redis…tar.gz,可以看到下载的redis 非常小解压之后进入redis…, 一般现在软件安装什么,可以直接看 rea原创 2022-02-14 17:13:19 · 567 阅读 · 0 评论 -
redis-2.redis的string类型&bitmap
redis原创 2022-02-16 12:36:31 · 634 阅读 · 0 评论 -
redis-0.redis介绍及NIO原理(杂谈)
reidsredis 介绍常识首先说个常识,计算机里面的数据是存入磁盘 ,这里面其实有两个维度指标1.寻址:ms 是毫秒级别的2.带宽:G/M 多少G多少M内存1.寻址:ns 纳秒级别2.带宽:很大秒>毫秒>微秒>纳秒。磁盘比内存慢了10W倍,在寻址上面I/O buffer:成本问题磁盘有磁道,扇区,一扇区 512Byte带来一个成本变大索引4K 操作系统默认,无论你读多少,都是最少4k从磁盘拿。所以文件变大速度就会变慢而数据库出现 data page 大原创 2022-02-15 15:49:16 · 1216 阅读 · 0 评论 -
redis设置完密码出现不生效问题
redis今天在写博客的时候,发现了个问题啊,不知道是不是bug,就是我在我的conf 配置文件上添加完密码,重启redis,使用auth 无法使用!我用了一下几种方式启动都不行service redis_16380 stopservice redis_13680 startredis-server /etc/redis/16380.conf 后面我直接在redis 客户端直接使用,可以了。我不知道这是什么bug 啊,重启之后也没问题 config set requirepa原创 2022-02-24 19:15:50 · 4312 阅读 · 3 评论 -
redis面试题-过亿数据中取出100万的数据
redis面试题-过亿数据中取出100万的数据假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来并且说明使用的方法的底层原理?使用scan ,但博主感觉效率比较低使用pipeline ,但是这样子就会占用一个client,造成阻塞使用bitmap布隆过滤器下面为scan写法...原创 2021-11-18 18:01:46 · 1629 阅读 · 0 评论 -
Redisson分布式锁源码-可重入锁的八大机制-下(3)
Redisson分布式锁源码-可重入锁的八大机制-下(3)尝试获取锁超时 可以看到前面的各种分析都是对:lock.lock() 的加锁方式进行分析的,在这种方式下如果获取锁失败,我们都是知道它会进入一个while的死循环中、间歇性的一直获取锁,相当于就阻塞住了。 如果说你想要指定个时间,在这个时间内获取锁都失败的话就直接退出、保证不阻塞,此时可以通过如下方式加锁: lock.tryLock(30, 10, TimeUnit.MILLISECONDS); 这里第一个参原创 2021-10-22 17:11:11 · 114 阅读 · 0 评论 -
Redisson分布式锁源码-可重入锁的八大机制-下(2)
Redisson分布式锁源码-可重入锁的八大机制-下(2)可重入锁释放锁的场景 (1)客户端宕机导致锁释放 这个比较好理解一点,如果Redisson客户端刚加锁成功,此时后台肯定就有一个后台watchdog的定时任务每隔10s检查key,key如果存在就为它 自动续期30s,当watchdog定时任务存在的情况下,如果不是主动释放锁,那么key将会一直的被watchdog这个定时任务维持加锁。 如果客户端宕机了,此时watchdog定时任务当然也就是没了,既然没有了定时任务定时的原创 2021-10-22 17:05:42 · 77 阅读 · 0 评论 -
Redisson分布式锁源码-可重入锁的八大机制-下(1)
Redis分布式锁源码-可重入锁的八大机制-下 1.相同客户端线程是如何实现可重入加锁的? 2.其他线程加锁失败时,底层是如何实现阻塞的? 3.客户端宕机了,锁是如何释放的? 4.客户端如何主动释放持有的锁? 5.客户端尝试获取锁超时的机制在底层是如何实现的? 6.客户端锁超时自动释放机制在底层又是如何实现的?Redis可重入锁的核心流程–可重入锁的加锁机制 (1)相同线程重复加锁-重入加锁 ,下执行加锁的脚本:记得第一次加锁时,key是不存在的,所以那时我们才能成功将当前线程的原创 2021-10-22 17:00:02 · 247 阅读 · 0 评论 -
Redisson分布式锁源码-可重入锁的八大机制-上(3)
分布式锁 Redisson 源码剖析先从Redis可重入锁最简单的Demo入手,一步一图分析Redis可重入锁底层的源码,在边看源码的过程中、边画出Redis可重入锁的核心流程图。通过这张核心的流程图,我们可以看到一个企业级的、基于Redis分布式锁的方案是怎样的形成的,在开始分享前, 大家先思考下如下常见的面试题: 1、客户端线程在底层是如何实现加锁的? 2、客户端线程是如何维持加锁的?分布式锁完整流程图加锁成功后如何维持加锁当我们成功加锁后,我们看到脚本这里返回的是nil,如下图所原创 2021-10-18 17:04:36 · 133 阅读 · 0 评论 -
Redisson分布式锁源码-可重入锁的八大机制-上(2)
分布式锁 Redisson 源码剖析先从Redis可重入锁最简单的Demo入手,一步一图分析Redis可重入锁底层的源码,在边看源码的过程中、边画出Redis可重入锁的核心流程图。通过这张核心的流程图,我们可以看到一个企业级的、基于Redis分布式锁的方案是怎样的形成的,在开始分享前, 大家先思考下如下常见的面试题: 1、客户端线程在底层是如何实现加锁的? 2、客户端线程是如何维持加锁的?分布式锁完整流程图客户端线程首次加锁加锁的逻辑,可以从上一篇博客发现 ,就是那堆lua脚本,如下原创 2021-10-18 16:54:39 · 113 阅读 · 0 评论 -
Redisson分布式锁源码-可重入锁的八大机制-上(1)
分布式锁 Redisson 源码剖析先从Redis可重入锁最简单的Demo入手,一步一图分析Redis可重入锁底层的源码,在边看源码的过程中、边画出Redis可重入锁的核心流程图。 通过这张核心的流程图,我们可以看到一个企业级的、基于Redis分布式锁的方案是怎样的形成的,在开始分享前,大家先思考下如下常见的面试题:...原创 2021-10-18 16:19:06 · 198 阅读 · 0 评论