redis
快乐的码农一枚
这个作者很懒,什么都没留下…
展开
-
redis哨兵主从切换下数据丢失
slave为master,此时与之前master连接的client一直发送数据,当我们进行恢复将原master。当做新master的slave节点的时候,那么后来一直发送到原master内存的数据会丢失。毫无疑问会丢失延时的这段时间的数据当集群节点间网络或其他问题导致异步复制延时很高,当集群节点间网络或其他问题导致异步复制延时很高,如果此时master宕机了,如果此时master宕机了,毫无疑问会丢失延时的这段时间的数据。总的来看:遵从CAP理论的 CP,牺牲了A(可用性)原创 2023-05-05 14:22:59 · 601 阅读 · 0 评论 -
设计一个本地缓存考虑点
存储缓存的数据结构 可以使用hashMap、 压缩表、双向链表、hashtable等 缓存最大内存使用大小,过量后清除策略 LRU LFU 过期时间设置 过期时间存储在键值对象属性里面 怎么清除过期的缓存 定期删除和惰性删除 是否持久化 线程安全 ConcurrentHashMap SynchronizedCache 阻塞机...原创 2020-05-19 09:52:12 · 123 阅读 · 0 评论 -
双key解决 热点key失效问题
之前使用二级缓存来解决 热点key失效导致缓存击穿问题但是二级缓存缺点:redis内存使用率太低为了解决缓存使用率太低的问题,改成双key的方案将缓存值和缓存的时间分开存放,这样每次查询的时候,先查询缓存时间是否存在, 缓存时间不存在则里面更新一下缓存时间并且异步去更新缓存值 缓存时间存在则 直接使用缓存值返回 代码逻辑如下 public static boolean set(String key, String value, int seconds) { Jedis jed.原创 2020-07-12 14:21:53 · 648 阅读 · 0 评论 -
数据库和缓存一致性方案
redis存储缓存,mysql存储数据。缓存进行有效期设置。但是更新mysql,不会更新缓存。这样导致缓存和数据库的一致性问题比较长 mysql更新后,进行更新redis缓存。查询的时候先查询redis缓存,如果没有缓存,只查询数据库进行更新缓存;缓存和数据库不一致性的时间短 Cache Aside Pattern mysql更新后,通过mq消息消费,异步进行redis更新;这样可以减少连接过...原创 2020-01-30 11:14:35 · 171 阅读 · 0 评论 -
一致性Hash在缓存中的使用
一致性Hash与redis集群的区别 redis集群 有主从的划分,主挂了可以从抵上;从再挂则集群无法使用一致性Hash 挂一个或者两个都是无所谓 各redis之间是完全独立的 一致性Hash的实践 package home.spring.boot.hash;import java.util.HashMap;import java.u...转载 2020-04-28 14:00:00 · 140 阅读 · 0 评论 -
redis常见问题
Key寻址算法 超大Value redis的高可用性原创 2022-11-27 18:24:27 · 633 阅读 · 0 评论 -
redis缓存命中率
redis缓存命中率原创 2022-11-27 09:46:59 · 1695 阅读 · 0 评论 -
redis版本
Redis2.6 服务端支持Lua脚本 键的过期时间支持毫秒 从节点支持只读功能 ...原创 2022-05-01 23:32:09 · 1803 阅读 · 0 评论 -
redis主从同步下数据丢失的处理方案
数据丢失的场景:主从同步过程中,主节点的数据还未同步到从节点,但是主节点挂了,进行了主从切换;导致从的数据丢失了一部分 主挂了,从节点选取了新的主节点;但此时客户端还与老的主节点进行通讯,等客户端主从变换成功之后,从新的主节点获取数据,会导致数据丢失;因为老的新节点恢复后也以slave节点存在(自身的数据清空,从新的主节点获取数据)redis配置redis.confMin-slaves-to-write 1Min-slaves-max-lag 10 (一旦slave复制数据和ack延...原创 2020-07-04 16:40:05 · 2002 阅读 · 0 评论 -
zk 和 redis分布式区别
redis 获取锁的方法比较粗暴,获取不到,则是不断的重试; 不是强一致性的,会在极端的情况下出现问题(时间偏移、红锁半数以上的节点才可以成功,会出现某节点出现宕机。导致两个以上的客户端获取半数以上投票而获取分布式锁、主从节点模式下(主从不一致的情况会导致,两个以上客户端获取分布式锁)) redis的性能比zk高对于zk分布式锁而言:强一致性的特征; 获取不到锁的客户端只需要监听事件则可,无需不停的重试 客户端与zk节点出现网络问题的情况下,会出现锁自动失效的可能(同一局域网下,出现的几率几.原创 2020-06-29 10:08:30 · 3571 阅读 · 0 评论 -
redis多线程版本的步骤
主线程负责接收建立连接请求,获取 socket 放入全局等待读处理队列 主线程处理完读事件之后,通过 RR(Round Robin) 将这些连接分配给这些 IO 线程 主线程阻塞等待 IO 线程读取 socket 完毕 主线程通过单线程的方式执行请求命令,请求数据读取并解析完成,但并不执行 主线程阻塞等待 IO 线程将数据回写 socket 完毕 解除绑定,清空等待队列该设计有如下特点IO 线程要么同时在读 socket,要么同时在写,不会同时读或写 IO 线程只负责读写 socket 解原创 2020-06-28 14:52:53 · 413 阅读 · 0 评论 -
redis备份恢复
RDB AOF同时打开 RDB做冷备、AOF做数据恢复 RDB采用默认策略、AOF采用每秒落盘 定时任务定时备份RDB文件、防止数据被完全删除或者某一时间点恢复 备份按每小时备份、每天备份 恢复的时候,优先读取AOF文件,即使是空的AOF文件;也会读取,只是启动好redis服务后,redis里面的键值是空的 当关闭aof开关,把rdb文件放到备份目录后,重启redis;通过redis客户端:执行命令set appendonly yes 打开aof备份开关...原创 2020-06-13 17:57:52 · 145 阅读 · 0 评论 -
aof 持久化知识点
redis接受请求、处理请求、aof持久化是一个同步操作;并非异步操作(redis每次修改命令,会将持久化命令写到缓冲区里面;等达到落盘条件之后;从缓冲区进行落盘操作) 如果配置每次操作落盘,则会影响redis性能; aof的rewriteaof操作,则会在重写aof持久化文件;(命令的重复去重操作) redis4.0以后 aof持久化文件里面包含rdb的二进制流后面追踪的是aof操作 redis4.0以后的rewriteAof 是一个异步的操作(知识fork一个子进程是阻塞操作,但耗时很短)。先.原创 2020-06-13 12:31:37 · 649 阅读 · 0 评论 -
redis eval 实现限流
大致流程: 每次请求就写入有序集合里面,集合的sorce值是当前毫秒时间戳(防止秒出现重复),可以认为每一次请求就一个时间戳在里面。 从集合里面去掉10分钟以前所有的集合数据。然后计算出当前的集合里面数量 根据这个数量来与我们阈值做大小判断,如果超过就锁住,否则继续走下去 //将我们时间戳写入我们redis的有序集合里面 Redis::zadd('user:1:request:nums',1561456435,'1561456435.122');//设置key的过期时间为原创 2020-06-03 16:06:57 · 439 阅读 · 0 评论 -
redisCluster 缓存节点的扩展和收缩
在集群中任意节点执行 cluster meet 命令让新节点加入进来。假设新节点是 192.168.1.1 5002,老节点是 192.168.1.1 5003,那么运行以下命令将新节点加入到集群中。192.168.1.1 5003> cluster meet 192.168.1.1 5002这个是由老节点发起的,有点老成员欢迎新成员加入的意思。新节点刚刚建立没有建立槽对应的数据,也就是说没有缓存任何数据。如果这个节点是主节点,需要对其进行槽数据的扩容;如果这个节点是从节点,就需要同步主节原创 2020-06-03 14:13:29 · 387 阅读 · 0 评论 -
如果两个缓存节点正在做节点的数据迁移,此时客户端请求会如何处理
Redis 客户端向“缓存节点 1”发出请求,此时“缓存节点 1”正向“缓存节点 2”迁移数据,如果没有命中对应的 Slot,它会返回客户端一个 ASK 重定向请求并且告诉“缓存节点 2”的地址。客户端向“缓存节点 2”发送 Asking 命令,询问需要的数据是否在“缓存节点 2”上,“缓存节点 2”接到消息以后返回数据是否存在的结果...原创 2020-06-03 12:39:07 · 213 阅读 · 0 评论 -
redis优化的几个方面
合并请求 利用批量命令进行合并 pipline 命令缩小传送命令的次数 利用lua脚本,缩小传送的命令长度 减少或规避执行时间比较长的命令 优化存储的数据结构 redis服务器所需内存的监控,不能使用swap 虚拟内存 使用从服务器进行持久化动作,减少主服务器的压力 读写分离 和 cluster集群方案...原创 2020-03-23 18:32:47 · 173 阅读 · 0 评论 -
redis的性能
redis的性能问题有可能出现的地方redis一般情况是利用内存,但是系统会把硬盘作为虚拟内存使用。实际redis存储的数据会被存放到硬盘中。可以通过top命令查看是否存在swap redis性能一般会表现为网络延迟。客户端的业务服务器要与redis服务器放在同一局域网内,减少网络延迟 multi-key 类的指令来合并请求 或者 pipline命令合并请求 或者 transacti...原创 2020-03-11 10:52:08 · 591 阅读 · 0 评论 -
redis stream
消息可以新增,删除,获取长度,截取范围,设定最大长度(最小ID即被删除) XADD person * name tomEX desc is a milkXTRIM person MAXLEN 4 截取消息XADD person MAXLEN 5 * name tomEX333 desc is a milk 设置最大消息长度XRANGE person - +XRANGE pe...原创 2020-01-14 10:44:08 · 144 阅读 · 0 评论 -
分布式锁
加锁步骤 1)查看key是否存在2)如果不存在,则设置key 值为当前的threadId + 当前服务器的标识ID 和 锁次数 并设置超时时间3)已经存在,查询值是否是当前的线程Id,如果是只 增加锁次数2)已经存在,但是并非当前线程锁定的,则ppl查询其超时时间并返回剩余时间 if (redis.call('exists', KEYS[1])==0) ...原创 2020-01-13 10:18:04 · 107 阅读 · 0 评论 -
redis发布并订阅
订阅命令SUBSCRIBE c1 c2 c1 和 c2是通道名称 发布消息 publish c1 'i am is long!!!' publish c2'i am is long!!!'订阅的客户端就会收到两条不同通道发出来的消息当redis服务器重启之后 订阅的数据...原创 2020-01-08 14:25:39 · 94 阅读 · 0 评论