首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

redis-1:一次关于smember和smembers的使用优化

通过prometheus等监控发现是redis调用大增,看代码在循环里对smember有大量调用。...业务JVM线程上下文和软中断同时飙升原因: smember的时间复杂度是O(1),很快,jvm大量调用smember后,相关IO也会很快得到返回数据从而进入就绪状态,那么从就绪IO读取数据的线程会始终处于繁忙状态...用两个方法确认这个事情(但可惜最初我没信这个结果,坚持认为redissmember不会引发,因为速度很快嘛是O(1),但是忽略了IO): 方法一:top -H -p pid 看某个linux下的进程下有哪些线程以及这些线程占用的...再用thread -n 10查找cpu耗损前10的线程堆栈,这个我没有保存现场图,看到的和之前方法一是一样的堆栈,也是smember的堆栈。...(4).总结 1.循环里不要调用redis 但是像smember这类exist一定是封装在底层的,上层一层层调用很有可能放大,这个只能是在使用的时候注意,同时观察线上的zabbix监控,主要是cpu是否有异动

5.6K41
您找到你想要的搜索结果了吗?
是的
没有找到

使用Redis,你必须知道的21个注意要点

前言 最近在学习Redis相关知识,看了阿里的redis开发规范,以及Redis开发与运维这本书。...2、Redis 有坑的那些命令 2.1. 慎用O(n)复杂度命令,如hgetall、smember,lrange等 因为Redis是单线程执行命令的。...hgetall、smember等命令时间复杂度为O(n),当n持续增加时,会导致 Redis CPU 持续飙高,阻塞其他命令的执行。...❝hgetall、smember,lrange等这些命令不是一定不能使用,需要综合评估数据量,明确n的值,再去决定。比如hgetall,如果哈希元素n比较多的话,可以优先考虑使用「hscan」。...❞ 2.2 慎用Redis的monitor命令 Redis Monitor 命令用于实时打印出Redis服务器接收到的命令,如果我们想知道客户端对redis服务端做了哪些命令操作,就可以用Monitor

89440

redis in action》redis的5种数据类型

redis基础数据类型。redis提供的基础的数据类型包括string、list、set、hash、zset。其中我们在开发中可能比较常用的是string、list和set。...然后redis提供了一些操作这个string的命令,包括get、set、del等。 这里是做的一些测试,比如set成功之后就能返回一个ok等等,书中对详细的过程都注释了。...书中还对redis-client做了说明,也没啥重点。...---- 3.SET redis的set和list是不一样的,list能够保持序列,但是set则通过hash表的方式保障数据的独一无二性。...set是无序的,所以我们就不能像操作list那样push或者pop,事实上,我们添加或者移除元素使用的是sadd和srem命令,我们可以用sismember来查询一个元素是否在这个set里,当然也可以使用smember

28520

RedisRedis 集群

一、集群概念 业务发展过程中遇到的峰值瓶颈: redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到20万/秒 内存单机容量达到256G,当前业务需求内存容量1T 这个时候可以使用集群的方式可以快速解决上述问题...-6379.conf 由redis-6379.conf得到redis-6380.conf、redis-6381.conf、redis-6382.conf、redis-6383.conf、redis-6384....conf,分别作为3个master和3个slave的启动配置文件 启动所有的master和slave 这还是一个一个的节点,我们需要把他们连在一起,在src目录下有一个redis-trib.rb.../redis-trib.rb create --replicas n ip1:port1 ip2:port2 .......写6组ip:port,执行指令,生成3组1主1从 生成多组主从结构前,我们先看一下data目录(在redis-端口.conf中配置)下生成的节点的配置文件nodes-端口.conf 我们输入yes,

34930

RedisRedis 哨兵

哨兵(sentinel)  :是一个对主从结构中的每台服务器进行监控的分布式系统,当出现故障时通过投票机制选择新的master,并将所有slave连接到新的master;哨兵也是一台redis服务器,只是不提供数据服务...slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址 二、配置哨兵模式 配置一拖二的主从结构,配置三个哨兵(配置相同,端口不同),配置文件为Redis...根目录下的sentinel.conf 启动哨兵 redis-sentinel sentinel-端口号.conf 1....编写redis服务器的配置文件 查看redis服务器配置文件,6379为master,6380为slave 生成6381的slave 3. ...启动redis服务器以及哨兵 启动一主两从三个redis服务器 启动26379哨兵 通过客户端登录已启动的26379哨兵服务器 在哨兵服务器上不能执行数据操作,只能执行哨兵对应的一些指令,我们输入

27540

redis in action》redis快照

快照会被写入在配置文件中配置的文件中,并存储在dir目录中,在执行下一个快照前,如果redis或者硬件或者系统导致崩溃,那么数据会从最新的redis快照中进行恢复。...3.如果在redis中配置了保存行,比如save 60 10000,那么如果在上次成功保存之后60秒内发生10000次写入,那么 redis就会自动触发bgsave。...4.当redis接受shutdown命令或者收到term命令,redis将执行save命令,然后阻止客户端的命令执行。save执行完毕之后就关闭。...5.当redis服务连接到其他redis服务进行sync同步命令,进行复制。如果其中的命令还没有执行或者完成,那么redis将开始进行bgsave命令。...redis快照采用的fork的方式将内存进行拷贝,然后进行快照存储,因此如果缓存的数据很大,比如数十G,那么内存的压力就会很大,就会导致进程采用虚拟内存,这样会降低redis的性能,降低redis的响应时间

91220

RedisRedis 删除策略

一、过期数据 Redis中的数据特征:  Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态 XX : 具有时效性的数据 -1 : 永久有效的数据 -2 :...redis服务器有很多操作需要执行时,CPU的压力会很大,于是redis中的策略是,在内存还够的前提下,先不急着释放已删除的数据的内存空间,先执行客户端的指令 二、数据删除策略 redis中的数据删除策略包括定时删除...、惰性删除、定期删除 redis中用一个hash结构数据存放地址和过期时间,而删除策略就是基于这块hash数据结构 我们需要在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降...如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。...当对所有数据尝试完毕后,如果不能达到内存清理的要求,将会出现错误信息 影响数据逐出的相关配置 maxmemory:redis可使用内存占物理内存的最大比例,默认为0,表示不限制redis使用内存。

74330

redis in action》redis复制

redis中提供了复制的功能,注意这里的复制是为了保证数据夸机器存在的特性,也就是一台redis被核弹炸了,咋还有一台,而且这台redis中的数据就是通过从被炸的那台上过来的。...很简单 slaveof host port #host为要复制的redis服务器ip,port为redis的端口号 上述配置的意思就是说我这台redis启动的时候要通过host:port去连接另一台...redis,并将它的数据拿过来存储到我这里。...那么当redis进行复制的时候,主从节点的状态是怎么样的?我们看一下图: 大概得过程如上图所示,考虑到复制的网络带宽和网速不够快,或者主节点没有足够的内存去拷贝或者缓存新的待执行的命令。...Redis不支持主主复制。

37730
领券