![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
lixia0417mul2
避免成为那些从来没有接触过真正技术的所谓技术生涯
展开
-
Redis异步写失败后补数逻辑设计
redis容灾原创 2024-01-09 15:29:58 · 565 阅读 · 0 评论 -
redis容灾的方案设计
redis多机房容灾原创 2023-12-28 22:13:33 · 708 阅读 · 0 评论 -
网卡中断对cpu的不同绑定方式对Redis性能的影响
网卡中断使用的cpu 对redis性能的影响原创 2023-09-21 01:13:25 · 438 阅读 · 0 评论 -
jedis的minIdle和maxIdle参数
maxIdle 和 minIdle参数原创 2023-09-20 01:46:27 · 871 阅读 · 0 评论 -
Redis的softMinEvictableIdleTimeMillis和minEvictableIdleTimeMillis参数
softMinEvictableIdleTimeMillis,minEvictableIdleTimeMillis, minIdle 参数原创 2023-09-20 01:29:11 · 1064 阅读 · 0 评论 -
实现客户端pineline的思路
redis pineline实现思路原创 2023-09-16 01:22:59 · 123 阅读 · 0 评论 -
redis 设置expire=0和直接调用delete删除key的区别
redis expire策略 redis del vs expire策略原创 2023-07-15 15:32:51 · 1661 阅读 · 0 评论 -
clickhouse中使用extract抽取关键信息
clickhouse extract常见用法 extract抽取字符串中的ip地址信息原创 2023-07-09 02:03:17 · 1122 阅读 · 0 评论 -
从Redis主进程bgsave导致的应用超时说起
Redis进程阻塞 Redis RDB文件解析 rdb-tools工具查找Redis大key原创 2023-06-05 00:33:59 · 569 阅读 · 0 评论 -
Redis常用数据类型能支持的最大长度
redis数据结构能支持的最大长度 redis最大支持512MB字节长度原创 2023-05-30 23:18:00 · 1284 阅读 · 0 评论 -
java.net.SocketTimeoutException: null 和 java.net.SocketTimeoutException: connect timed out的区别
SocketTimeoutException: null SocketTimeoutException: connect timed out 连接超时原创 2023-05-11 22:42:35 · 3412 阅读 · 0 评论 -
Redis的慢查询会导致连接池耗尽和No more cluster attempts left.的告警
redis慢查询导致的连接池耗尽 redis慢查询导致的雪崩 redis慢查询导致快查询命令变慢原创 2023-05-08 01:39:40 · 1560 阅读 · 0 评论 -
Redis的BitMap使用注意事项
redis bitmap内存溢出 bitmap 和字符串存储关系 bitmap导致内存爆炸 bitmap结构和字符串结构互操作原创 2022-10-11 02:05:56 · 746 阅读 · 0 评论 -
Redis服务器主从域名切换需要重启JedisCluster客户端吗
redis主从切换 jedisCluster原理 redis集群数据迁移需要重启jedisCluster redis集群数据迁移 jediscluster域名解析原创 2022-09-23 02:12:50 · 710 阅读 · 1 评论 -
redis服务端的maxclient和最大连接空闲时间设置
1.redis服务器可以配置最大允许的客户端连接数,当大于设置的值时,连接被拒绝,可以通过cluster info clients查看拒绝连接数,占用最大输入缓冲区的客户端连接,占用最大输出缓冲区的客户端连接等2.和mysql服务器一样,redis服务器也可以设置空闲连接的最大时长,如果某个连接的空闲时长大于配置的值,那么redis服务端会直接关闭连接.所以为了保持连接的存活性,客户端设置的空闲连接检测时长要小于服务端的最大空闲连接配置。...原创 2021-09-11 01:37:49 · 2581 阅读 · 0 评论 -
redis数据结构小结
1.redis中所有的key都是字符串类型,只有value才有类型区分:比如字符串,列表,集合,有序集合,和hash结构2.redis中存储字符串和正常我们传输字符串流时对字符串进行编码的方式是一样的: 字符串==字节数组的长度+字节数组3.hash_tag的方式:key1{hash_tag},key2{hash_tag}…是对应到同一个slot中的,对于这些key,可以直接使用jedisCluster的mget方法,这为优化接口性能的提供多了一种实现途径...原创 2021-09-01 01:49:43 · 270 阅读 · 0 评论 -
redis集群内部的带宽消耗
1.redis集群内两两服务器之间都有网络连接,互相ping/pong消息,内部通信协议是gossip,由于两两之间通信互换消息,需要消耗大量的带宽,这就决定了一个集群的节点数量不能太大.原创 2021-08-31 02:07:20 · 1020 阅读 · 0 评论 -
redis哨兵模式
1.哨兵进程其实就是一个不存储数据的redis进程,作用是监控和故障转移2.客户端连接的是哨兵的地址,不是主节点的地址3.客户端会订阅switch-master队列的消息,当哨兵进行故障转移之后,会通过这个队列告知客户端,客户端再进行相应的处理...原创 2021-08-31 02:01:47 · 80 阅读 · 0 评论 -
redis cluster迁移相关
1.可以通过redis-trib.rb create命令创建一套redis集群,比如包括三个主节点和三个从节点;这个脚本会帮助完成节点准备,节点握手,分配槽三个步骤,让某个节点成为某个主节点的从节点需要执行cluster replication命令2.集群扩容时,是通过迁移槽的方式完成的,也就是执行cluster migrate命令迁移槽数据到另外的节点.迁移的过程中,是不会影响单条读写命令的执行的,不过会影响pineline命令的执行,原因就是pineline操作统同一个slot时,有部分slot的ke原创 2021-08-31 01:56:59 · 283 阅读 · 0 评论 -
redis主线程阻塞的情形
1.redis使用fork创建子进程就行rdb或aof重写操作时,fork子进程的过程会阻塞主进程,阻塞时间取决于主进程的内存大小–这里你是否觉得有疑问:fork子进程的时候主进程和子进程是采用共享内存的方式进行内存共享的啊,fork阻塞的时间长短怎么会和主进程的内存大小相关呢?原因是因为主进程fork子进程的时候,子进程需要创建内存页表,一般是几十M左右,主进程的内存越大,内存页表页就越多,所以fork子进程就会越慢。2.aof设置为每秒同步数据到磁盘时,此时有两个线程:一个是处理redis命令的主线原创 2021-08-26 01:34:58 · 741 阅读 · 3 评论 -
redis内存知识点
1.什么样的情况下redis服务器的内存使用量会大于max_memory配置?这种情况明显是内存发生了抖动,最可能的原因和输入缓冲区以及输出缓冲区大小相关,在redis服务器端的实现中,每个redis客户端都占有一定的内存空间,用于存放客户端发送过来的命令,如果有大量bigkey,那么有可能造成输入缓冲区内存暴涨,同理,redis服务器也会为每个redis客户端分配一定数量的输出缓冲区,用于保存redis服务端发往客户端的结果,如果类似monitor这样输出大量结果的命令,那么有可能导致内存暴涨以上问原创 2021-08-24 02:02:48 · 121 阅读 · 0 评论 -
jediscluster的maxAttempts的理解
1.我们知道进行redis配置的时候可以配置maxAttempts参数,那么这个参数的含义是什么呢?` return execute(connection);} catch (JedisNoReachableClusterNodeException jnrcne) { throw jnrcne;} catch (JedisConnectionException jce) { // release current connection before recursion releas原创 2020-10-12 01:49:41 · 7152 阅读 · 0 评论 -
实现redis集群的批量pineline操作
1.我们知道单个redis实例是可以支持mget命令的,所以自然单点的redis是不需要考虑批量的问题的,直接使用mget命令即可。2.redis集群是不支持mget命令的(这里的不包括恰巧所有的key都对应到一个slot的特殊情况),那我们怎么可以加快多个key的获取时间呢?3.多个key在没有批量的情况下的时间计算为每个key的时间的叠加: key1的网络发送时间+key1的服务器处理时间+value1的网络返回时间4.多个key在使用批量情况下的时间大约为: (key1,key2)的网络发送时间原创 2020-09-19 13:33:57 · 315 阅读 · 0 评论 -
jedis连接池的maxIdle和maxtotal参数
1.我们一般连接redis都需要用到连接池,最常用的就是jedis连接池,连接池中有两个参数的设置对高性能有较大影响:maxIdle和maxTotal2.maxIdle的意思是连接池中空闲连接的最大数量,maxTotal是连接池中总连接的最大数量3.之前我一般设置这两者的时候是没有设置成相等的值的,也就是比如设置maxIdle=10,然后maxTotal=30这样,但是基础架构的压测报告发现在高并发的情况下这样设置的后果竟然会产生大量的短连接,这样的结果令人非常意外,这些这么多的短链接是怎么产生的?4原创 2020-07-11 01:37:08 · 18830 阅读 · 1 评论 -
对Redis单线程的一些看法
1.先说说redis单线程的优点:单线程的模型除了减少一些线程上下文切换之外并无其他优点,事实性其实单线程的redis指的只是说处理cmd的流程是单线程的,也就是只有epoll接收到cmd之后,继续单线程串行处理这些命令,其实处理主从同步之类的是fork另外进程的方式去进行的2.单线程redis最大的缺点:a.当某个cmd比如key等命令比较耗时时,会导致整个redis卡顿,这按正常理解完全不能接受,但是确实真实地存在于当前的redis实现中所以redis的多线程实现实在是百利而无一害,类似nett原创 2020-07-05 02:55:45 · 122 阅读 · 0 评论 -
Redis的hotkey和bigkey的一些拆解方式
1.redis的hotkey是指对某个key的访问qps极高,比如达到百万级别,其实仅仅是hotkey的话解决方法也很简单。其实就是拆分成多个key去分担负担,这多个key的内容和初始hotkey的内容是一模一样的,这样应用访问的时候可以随机访问任意一个,把qps分散到多个key中2.redis的bigkey我这里只拿hash结构来分析,比如某个redis的hash结构中存在数百万的field,这里拆分的方式只能根据业务去考虑了,目的是分解成多个hash结构,比如hash1,hash2…, 每个hash结原创 2020-07-02 01:21:05 · 950 阅读 · 0 评论 -
java堆外内存为何比java堆更适合用来进行网络IO操作
java执行socket.write对java堆内的数组数据进行网络IO操作时,其实分两步进行:1.把java堆的数据拷贝到C堆内存中(对Java来说就是堆外内存,只是这个内存不归java管理)2.把C内存中的数据发送到内核内存中,进行网络IO操作疑问: 为何jvm不直接把数据从java堆发送到内核内存中进行网络IO操作,而要先把数据拷贝到C堆内存中答案是:进行网络IO操作时其实底层调用的是c的函数write,该函数对应的字节数组的地址不能够变化,如果使用的java堆内的地址的话,由于gc的影响,有原创 2020-06-30 01:11:59 · 512 阅读 · 0 评论 -
浅谈各种连接池中连接数量的设置
连接池中连接数量的配置我们日常开发中经常会用到各种连接池,比如httpclient和jediscluster以及druid等数据库连接池,当使用这些连接池的时候我们总是很疑惑到底要怎么配置连接池中连接数的数量:我觉得最简单的一个确定方法如下:比如拿httpclient连接池作为示例,假设每次http调用需要的平均时间是100ms,那么一条http连接一秒钟内可以处理10个请求,如果你http调用的qps要想达到比如1k,那么至少需要100连接才能满足要求.其他redis连接池和db连接池同理..原创 2020-06-26 02:36:14 · 1121 阅读 · 0 评论 -
redisTemplate的hscan方法中为何不需要指定游标开始地址的原因
为何spring的redistemplate客户端中不提供该起始游标的参数? RedisTemplate rt; rt.opsForHash().scan("key", ScanOptions.scanOptions().count(100).match("*").build());ScanOptions该方法只有两个参数:publi原创 2020-06-25 12:46:06 · 2865 阅读 · 1 评论