Redis
文章平均质量分 59
Redis 相关的知识
一切随缘~~~
最难不过坚持。
展开
-
谈谈 Redis 为什么高性能?
● 第三个也就是单线程执行,但大家都没理解单线程执行为啥快,那是因为单线程执行的话你就不需要加锁来控制了,我们要知道锁是一个很重很耗费资源的事情,实测我自己写的渐进式缓存 dict,单线程跑,写100w+读100w,单线程跑也只需要1000毫秒出头。● 第二个就是协议简单,所以序列化和反序列化很快(可能算是最简单的协议了,你自己实现一个都很轻松)谈谈 Redis 为什么高性能?● 第一个是内存存储这个不用说了。原创 2023-10-18 12:08:52 · 43 阅读 · 0 评论 -
谈谈 Redis 如何来实现分布式锁
但是还是存在分布式问题,比如说,一个客户端在Redis主节点上面加了锁,但是由于主从同步的延迟问题,Redis从节点还没有同步到这个锁数据,这时候其他的客户端就可以在这个Redis从节点上面加相同的锁了。但是 RedLock 只是减少出问题的概率,而且性能差,不推荐使用。这玩意儿就是一种理论设计,平时工作用 setnx+补偿就行了。基于 Hash 数据类型 + Lua脚本 可以实现可重入的分布式锁。基于 setnx 可以实现,但是不是可重入的。谈谈 Redis 如何来实现分布式锁。原创 2023-10-18 12:04:19 · 910 阅读 · 0 评论 -
Redis 除了做缓存,还能做什么?
防重提交:比如说一个后台系统的保存按钮,很可能出现双击啊等操作,这样就在数据库中新增了多条重复的数据。可以使用 Redis 来做一个防重提交的组件,控制一下提交的时间,比如说,多长时间内的提交,我都认为它是重复的提交。分布式锁:就是利用 setnx key value。如果 key 没有值,就可以设置成功;如果 key 有值了,就设置失败。分布式锁,防重提交,幂等,分布式限流,简易版的消息队列,延迟任务,session 共享。Redis 除了做缓存,还能做什么?原创 2023-10-18 12:01:08 · 102 阅读 · 0 评论 -
集群脑裂导致数据丢失怎么办?
集群脑裂导致数据丢失怎么办?原创 2023-10-18 12:00:21 · 214 阅读 · 0 评论 -
谈谈 Redis 分片集群模式
当 Redis 缓存数据量大到一台服务器无法缓存时,就需要使用 Redis 切片集群(Redis Cluster )方案,它将数据分布在不同的服务器上,以此来降低系统对单主节点的依赖,从而提高 Redis 服务的读写性能。● 手动分配: 可以使用 cluster meet 命令手动建立节点间的连接,组成集群,再使用 cluster addslots 命令,指定每个节点上的哈希槽个数。● 需要注意的是,在手动分配哈希槽时,需要把 16384 个槽都分配完,否则 Redis 集群无法正常工作。原创 2023-10-17 16:21:46 · 306 阅读 · 0 评论 -
谈谈 Redis 哨兵模式
● 可以在master 主节点挂掉后自动选举新的 master 主节点,实现主从节点故障转移。● master 主节点挂了,切换新的 master 节点会造成未来得及主从同步的数据丢失。● 单个 Redis 只能利用 CPU 的单个核心,应对海量数据捉襟见肘。● 大数据高并发,单个 master 节点内存仍存在上限。● 主从全量同步仍然要耗费大量时间。● Redis 分片集群方案。谈谈 Redis 哨兵模式。原创 2023-10-17 16:20:55 · 64 阅读 · 0 评论 -
谈谈 Redis 主从复制模式
接下来,我在具体介绍每一个阶段都做了什么。第一阶段:建立链接、协商同步执行了 replicaof 命令后,从服务器就会给主服务器发送 psync 命令,表示要进行数据同步。psync 命令包含两个参数,分别是主服务器的 runID 和复制进度 offset。● runID,每个 Redis 服务器在启动时都会自动生产一个随机的 ID 来唯一标识自己。当从服务器和主服务器第一次同步时,因为不知道主服务器的 run ID,所以将其设置为 “?原创 2023-10-17 16:19:48 · 687 阅读 · 0 评论 -
谈谈 Redis 大 Key 会有什么影响?
或者,定时检查 Redis 是否存在大 key ,如果该大 key 是可以删除的,不要使用 DEL 命令删除,因为该命令删除过程会阻塞主线程,而是用 unlink 命令(Redis 4.0+)删除大 key,因为该命令的删除过程是异步的,不会阻塞主线程。如果创建完子进程后,父进程对共享内存中的大 Key 进行了修改,那么内核就会发生写时复制,会把物理内存复制一份,由于大 Key 占用的物理内存是比较大的,那么在复制物理内存这一过程中,也是比较耗时的,于是父进程(主线程)就会发生阻塞。● 客户端超时阻塞。原创 2023-10-16 21:43:40 · 251 阅读 · 1 评论 -
谈谈 AOF
子进程重写完之后,发一个信号给主进程,告诉主进程我重写好了,主进程收到信号后,会将 AOF 重写缓冲区中的命令追加到新重写的 AOF 文件中(会阻塞主进程),然后将新的 AOF 文件改名,覆盖旧的 AOF 文件。因为如果先将写操作命令记录到 AOF 日志里,再执行该命令的话,如果当前的命令语法有问题,那么如果不进行命令语法检查,该错误的命令记录到 AOF 日志里后,Redis 在使用日志恢复数据时,就可能会出错。因为如果 AOF 重写过程中失败了,现有的 AOF 文件就会造成污染,可能无法用于恢复使用。原创 2023-10-16 21:42:31 · 111 阅读 · 0 评论 -
谈谈 RDB
执行 bgsave 命令的时候,会通过 fork() 创建子进程,此时子进程和父进程是共享同一片内存数据的,因为创建子进程的时候,会复制父进程的页表,但是页表指向的物理内存还是一个。但是这里就有一个问题了,在生成 RDB 文件的过程中,如果有新的写命令过来,那么最终生成的 RDB 文件中的数据就和 Redis 内存中的数据产生不一致了,怎么解决呢?【创建子进程的过程中,是会阻塞主线程的。这里提一点,Redis 的快照是全量快照,也就是说每次执行快照,都是把内存中的「所有数据」都记录到磁盘中。原创 2023-10-16 21:40:18 · 126 阅读 · 0 评论 -
谈谈 Redis 持久化机制,RDB、AOF
用 AOF 日志的方式来恢复数据其实是很慢的,因为 Redis 执行命令由单线程负责的,而 AOF 日志恢复数据的方式是顺序执行日志里的每一条命令,如果 AOF 日志很大,这个「重放」的过程就会很慢了。加载完 RDB 的内容后,才会加载后半部分的 AOF 内容,这里的内容是 Redis 后台子进程重写 AOF 期间,主线程处理的操作命令,可以使得数据更少的丢失。也就是说,使用了混合持久化,AOF 文件的前半部分是 RDB 格式的全量数据,后半部分是 AOF 格式的增量数据。AOF:存储的是具体的命令。原创 2023-10-16 21:38:30 · 197 阅读 · 0 评论 -
谈谈什么是缓存穿透,缓存击穿,缓存雪崩?怎么解决?
● 当你做完这些准备之后呢,你再去谈怎么单纯解决缓存击穿的问题,你可以完全忽略,永不过期这种方案,因为一个要去考虑缓存击穿的系统,绝对是高并发和海量数据的?当你最近的 100 次请求,平均 rt 都超过 5 s 了,系统报错率也在飙升,你不应该熔断对数据库的查询操作吗?● 你所有用缓存的场景,哪怕有一刻缓存是失效的,你也要保证数据库能扛得下来。● 第一,需要正确评估系统的容量,和业务中的慢查询,应该要做到什么呢?缓存击穿,缓存穿透,缓存雪崩,背后的本质,从一种更高的角度来看问题。可能造成短期的数据不一致。原创 2023-10-16 21:30:19 · 369 阅读 · 1 评论 -
谈谈 Redis 内存淘汰策略
前面说的过期删除策略,是删除已过期的 key,而当 Redis 的运行内存已经超过 Redis 设置的最大内存之后,则会使用内存淘汰策略删除符合条件的 key,以此来保障 Redis 高效的运行。原创 2023-09-27 22:37:40 · 179 阅读 · 0 评论 -
谈谈 Redis 过期删除策略
每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典(expires dict)中,也就是说「过期字典」保存了数据库中所有 key 的过期时间。字典实际上是哈希表,哈希表的最大好处就是让我们可以用 O(1) 的时间复杂度来快速查找。当我们查询一个 key 时,Redis 首先检查该 key 是否存在于过期字典中:● 如果不在,则正常读取键值;原创 2023-09-27 18:18:30 · 242 阅读 · 0 评论 -
谈谈 Redis 数据类型底层的数据结构?
如果不对平衡树进行一定的改造,这里的中序遍历并不容易实现。可以看到,listpack 没有压缩列表中记录前一个节点长度的字段了,listpack 只记录当前节点的长度,当我们向 listpack 加入一个新元素的时候,不会影响其他节点的长度字段的变化,从而避免了压缩列表的连锁更新问题。在前面讲压缩列表的时候,我也提到了压缩列表的不足,虽然压缩列表是通过紧凑型的内存布局节省了内存开销,但是因为它的结构设计,如果保存的元素数量增加,或者元素变大了,压缩列表会有「连锁更新」的风险,一旦发生,会造成性能下降。原创 2023-09-27 17:47:59 · 272 阅读 · 0 评论 -
Redis 数据类型底层原理
Redis 数据类型底层原理原创 2023-09-27 12:21:58 · 123 阅读 · 0 评论 -
Redis 支持哪些数据类型?以及使用场景?
相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据。基于基础数据类型实现的高级数据类型:BitMap,HyperLogLog,GEO,Stream。HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页。五种常用的基础数据类型:String,List,Set,ZSet,Hash。BitMap(2.2 版新增):二值状态统计的场景,比如。Set 类型:聚合计算(并集、交集、差集)场景,比如。信息的场景,比如滴滴叫车;原创 2023-09-26 16:51:16 · 148 阅读 · 0 评论 -
Redis 是什么?
Redis 单机 QPS 就可以达到 10 W +,避免大量的请求直接打到数据库上面。Redis 在高并发项目中,担任着非常重要的作用,的数据库,数据的读写都是在内存中完成的,因此。由于Redis处理命令的部分,是由。负责的,所以Redis每条命令都是。,消息队列,分布式锁等场景。Redis是一种基于。原创 2023-09-26 16:30:29 · 422 阅读 · 0 评论 -
RedisTemplate 两种序列化实现方案
RedisTemplate两种序列化实现方案原创 2022-11-06 21:45:37 · 398 阅读 · 0 评论 -
Redis 主从复制,哨兵模式,读写分离,集群
Redis主从复制,哨兵模式,读写分离,集群原创 2022-03-05 16:42:12 · 1847 阅读 · 27 评论 -
Redis 持久化机制
Redis持久化机制原创 2022-03-03 22:50:10 · 452 阅读 · 11 评论 -
初识 Redis
RedisNoSQLNoSQL(Not Only SQL ),意即不仅仅是SQL, 泛指非关系型的数据库。为什么出现了NoSQL随着互联网网站的兴起,传统的关系型数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等相关,使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这原创 2022-03-02 10:09:58 · 226 阅读 · 11 评论