![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 62
蜗牛你慢点Ⅷ
这个作者很懒,什么都没留下…
展开
-
Redis 删除数据后,为什么内存占用率还是很高
Redis删除数据后内存占用高Redis数据删除后,Redis释放的内存空间会有内存分配器管理,并不会立即返回给操作系统。所以操作系统看到的内存占用依然很高Redis释放的空间不连续,导致这些空间有可能处于一种限制的状态,导致有空闲空间但是Redis却不会存数据内存碎片形成原因操作系统的内存分配: 内存分配器一般是按固定大小来分配内存,而不是完全按照应用程序申请的内存空间大小给程序分配Redis的负载特征:大小不同的键值对,申请内存分配时,本身就会有大小不一样的空间需求判断内存碎片原创 2021-07-27 11:40:37 · 484 阅读 · 0 评论 -
波动的响应延迟:如何应对变慢的Redis?
Redis基线性能系统在低压力、无干扰下的基本性能,这个性能只由当前的软硬件配置决定redis-cli --intrinsic-latency 120 -h host -p 6379120秒统计基线性能,打印出的最大延迟就是基线性能如果Redis运行时的延迟是基线性能2倍以上,就可以认定为Redis慢了Redis变慢原因与应对Redis自身操作特性文件系统操作系统Redis自身操作特性慢查询命令过期key操作慢查询命令用其他命令代替 smembers替换为sscan需原创 2021-07-26 17:01:20 · 312 阅读 · 0 评论 -
Redis 异步机制:如何避免单线程模型的阻塞?
影响Redis性能的5大方面的潜在因素Redis内部的阻塞式操作CPU核和NUMA架构的影响Redis关键系统配置Redis内存碎片Redis缓冲区Redis实例有哪些阻塞点客户端:网络IO,键值对增删改查操作,数据库操作磁盘:生成RDB快照,记录AOF日志,AOF日志重写主从节点:主库生成、传输RDB文件,从库接收RDB文件,清空数据库,加载RDB文件切片集群实例:向其他实例传输哈希槽信息,数据迁移客户端操作阻塞点网络IO部分,redis使用IO多路复用机制,避免主线程一原创 2021-07-24 15:29:44 · 367 阅读 · 0 评论 -
有一亿个keys要统计,应该用哪种集合?
常用集合统计模式聚合统计排序统计二值状态统计基数统计聚合统计指统计多个集合元素的聚合结果统计多个集合的共有元素(交集统计)把两个集合相比,统计其中一个集合独有的元素(差集统计)统计多个集合的所有元素(并集统计)排序统计list或者sorted_set类型有序统计二值状态统计指集合元素的取值就只有 0 和 1 两种bitmap,用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型基数统计统计就是指统计一个集合中不重复的元素个数set集合类原创 2021-07-20 16:02:59 · 137 阅读 · 0 评论 -
切片集群:数据增多了,是该加内存还是加实例?
数据量大之后,redis响应时间变长使用 RDB 进行持久化时,Redis 会 fork 子进程来完成,fork 操作的用时和 Redis 的数据量是正相关的fork 在执行时会阻塞主线程。数据量越大,fork 操作造成的主线程阻塞的时间越长切片集群启动多个 Redis 实例组成一个集群,然后按照一定的规则,把收到的数据划分成多份,每一份用一个实例来保存redis数据量增多的两种方案纵向扩展 scale up: 升级单个 Redis 实例的资源配置,包括增加内存容量、增加磁盘容量、使用原创 2021-07-16 16:56:20 · 164 阅读 · 0 评论 -
哨兵集群:哨兵挂了,主从库还能切换吗?
哨兵集群组成和运行机制基于 pub/sub 机制的哨兵集群组成基于 pub/sub 机制的哨兵集群组成哨兵之间可以互相发现,使用了Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。哨兵只要和主库建立起连接,就可以在主库上发布消息,比如说发布自己的连接信息(IP 和端口)可以从主库上订阅消息,获得其他哨兵发布的连接信息。当多个哨兵实例都在主库上做了发布和订阅操作后,它们之间就能知道彼此的 IP 地址和端口只有订阅了同一个频道的应用,才能通过发布的消息进行信息交换哨兵订阅_原创 2021-07-16 15:45:34 · 190 阅读 · 0 评论 -
哨兵机制:主库挂了,如何不间断服务?
哨兵机制解决问题主库是不是真的挂了用哪个从库做为主库新主库怎么通知给其他从库哨兵机制流程哨兵就是一个运行在特殊模式下的Redis进程,主要负责:监控、选择主库和通知监控:哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行主管下线和客观下线主观下线:哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况,用来判断实例的状态。如果哨兵发现主库或从库对 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。检查从库使用主管下线原创 2021-07-16 14:33:44 · 152 阅读 · 0 评论 -
数据同步:主从库如何实现数据一致?
Redis高可靠性数据尽量少丢失服务尽量少中断Redis主从模式,读写分离读操作: 主库和从库都可以写操作:首先主库执行,然后主库将操作同步给读库通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系 replicaof 主库ip 主库端口全量复制,主从长链接,增量复制全量复制时,基于硬盘复制,和socker复制(无盘复制)Redis主从库的复制是异步的,主库收到命令操作后,在本地执行完成后,就会返回给客户端,并不会等到和从库同步完成后才返回原创 2021-07-15 17:38:14 · 309 阅读 · 1 评论 -
内存快照:宕机后,Redis如何实现快速恢复?
RDB内存快照Redis DataBase内存快照:内存中的数据在某一个时刻的状态记录,某一时刻的状态以文件的形式写到磁盘上,也就是快照恢复数据时可以把RDB文件直接读入内存,很快的完成恢复对哪些数据做快照全量数据生成RDB命令save:在主线程中执行,会导致阻塞bgsave: 创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置快照时数据能修改吗可以修改Redis 就会借助操作系统提供的写时复制技术(Copy-O原创 2021-07-15 17:37:45 · 202 阅读 · 0 评论 -
AOF日志:宕机了,Redis如何避免数据丢失?
Redis持久化机制AOF append on fileRDB 快照AOF实现原理写后日志先写内存数据,再记录日志命令执行后才记录日志,不会阻塞当前的写操作。记录内容AOF 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。以 “set testkey testvalue”命令后记录的日志为例,“*3”表示当前命令有三个部分,每部分都是由“$+数字”开头,后面紧跟着具体的命令、键或值。这里,“数字”表示这部分中的命令、键或值一共有多少字节。例如,“$3 set原创 2021-07-13 17:26:40 · 116 阅读 · 0 评论 -
高性能IO模型:为什么单线程Redis能那么快?
单线程 or 多线程?Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的为什么单线程?多线程编程模式面临的共享资源的并发访问控制问题。单线程不用解决数据共享问题单线程为什么快?Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因Redis 采用原创 2021-07-12 17:09:23 · 119 阅读 · 0 评论 -
数据结构:快速的Redis有哪些慢操作?
一、底层数据结构简单动态字符串双向链表压缩列表哈希表调表整数数组二、键和值用什么结构组织?Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。所以,我们常说,一个哈希表是由多个哈希桶组成的,每个哈希桶中保存了键值对数据,哈希桶中的元素元素保存的并不是值本身,而是指向具体值得指针哈希表的最大好处很明显,就是让我们可以用 O(1) 的时间复杂度来快速查找到键值对——我们只需要计算键的哈希值,就可以知道它所对应的哈希桶位置,然后就可以访原创 2021-07-10 16:43:04 · 116 阅读 · 1 评论 -
Redis事务与MySQL事务对比-简述
Redis事务一次可以执行多个命令批量操作在发送 EXEC 命令前被放入队列缓存收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行(语法错误会停止事务)事务执行过程中,不会有其他操作插入到事务的执行命令序列中单个redis命令的执行时原子性的,但是事务上没有维持原子性可以理解为打包执行,省去网络耗时,中间某条指令失败不会导致之前操作回滚,不会导致后续操作暂停redis通过watch来监测数据,在执行exec前,监测的数据被其他人更改会抛出错误,取消执行MyS原创 2021-04-25 18:47:09 · 237 阅读 · 0 评论 -
Redis 整理
Redis是什么Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库性能优秀,数据在内存中,读写速度非常快,支持并发 10W QPS。单进程单线程,是线程安全的,采用 IO 多路复用机制。丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。支原创 2021-04-01 09:40:40 · 102 阅读 · 0 评论 -
Redis缓存
缓存穿透:查询不存在的数据,缓存和数据库都查不到,就会一直穿过缓存查询数据库缓存空值,设置过期时间布隆过滤器,判断key是否存在缓存击穿:高并发场景,大量请求查询一个key,当这个key过期时,大量查询落到数据库中,导致数据库压力过大查询数据库加分布式锁,有一个请求落到数据库上,让后其余请求就可以读缓存了缓存雪崩:大量key失效,导致大量查询落到数据库上采用集群,降低服务宕机的概率(待学习)ehcache本地缓存 + Hystrix限流&降级(待学习)...原创 2021-03-31 17:34:04 · 73 阅读 · 0 评论 -
Python 操作Redis 转载篇
Python操作Redis数据库连接数据库StrictRedisfrom redis import StrictRedis# 使用默认方式连接到数据库redis = StrictRedis(host='localhost', port=6379, db=0)# 使用url方式连接到数据库redis = StrictRedis.from_url('redis://@local...原创 2018-11-23 10:50:00 · 145 阅读 · 0 评论