ZzRG的小站—一个全栈开发爱好者的博客,博客主要用来记录与分享技术、学习技术知识点。
Redlock算法和底层源码分析当前代码用v8.0的Redis分布式锁-Redlock红锁算法Distributed locks with Redis产生原因----- 单点故障:redis之父提出了Redlock算法解决这个问题Redis也提供了Redlock算法,用来实现基于多个实例的分布式锁。锁变量由多个实例维护,即使有实例发生了故障,锁变量仍然是存在的,客户端还是可以完成锁操作。Redlock算法是实现高可靠分布式锁的一种有效解决方案,可以在实际开发中使用。设计理念该方案为了解决数据不一致的问题,直接舍弃了异步复制只使用master节点,同时由于舍弃了slave,为了保证可用性,引入了N个节点,官方建议是5。演示用3台实例来做说明。客户端只有在满足下面的这两个条件时,才能认为是加锁成功。条件1:客户端从超过半数(大于等于N/2+1)的Redis实例上成功获取到了锁;条件2:客户端获取锁的总耗时没有超过锁的有效时间。redisson实现pom<!--redisson--> <dependency> <groupId>org.re
1、初始化版本简单添加2、nginx分布式微服务架构3、redis分布式锁 v3.04、宕机与过期+防止死锁 v4.05、防止误删除key的问题 v5.06、Lua保证原子性 v6.0InventoryControllerpackage com.zzrg.redislock.controller; import com.zzrg.redislock.service.InventoryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author ZzRG * @Date 2023/
面试题Redis除了拿来做缓存,你还见过基于Redis的什么用法?数据共享,分布式Session分布式锁全局ID计算器、点赞位统计购物车轻量级消息队列---list、stream抽奖点赞、签到、打卡差集交集并集,用户关注、可能认识的人,推荐模型热点新闻、热搜排行榜Redis 做分布式锁的时候有需要注意的问题?你们公司自己实现的分布式锁是否用的setnx命令实现(大厂一定不可以)?这个是最合适的吗?你如何考虑分布式锁的可重入问题?如果是Redis是单点部署的,会带来什么问题?Redis集群模式下,比如主从模式,CAP方面有没有什么问题呢?那你简单的介绍一下Redlock吧?你简历上写redisson,你谈谈Redis分布式锁如何续期?看门狗知道吗?锁的种类单机版同一个JVM虚拟机内,synchronized或者Lock接口分布式多个不同JⅣM虚拟机,单机的线程锁机制不再起作用,资源类在不同的服务器之间共享了。一个靠谱分布式锁需要具备的条件和刚需独占性----OnlyOne,任何时刻只能有且仅有一个线程持有高可用----若redis集群环境下,不能因为某一个节点挂了而出现获取锁和释放锁失败
缓存预热 + 缓存雪崩 + 缓存击穿 + 缓存穿透缓存预热什么是预热?缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!解决方法使用 @PostConstruct 初始化白名单数据缓存雪崩缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。发生redis 主机挂了, Redis全盘崩溃,偏硬件运维redis 中有大量key 同时过期大面积失效,偏软件开发如何预防redis中key设置为永久不过期or过期时间错开redis缓存集群实现高可用主从 + 哨兵Redis 集群开启Redis 持久化机制 aof / rdb,尽快恢复缓存集群多缓存结合预防雪崩ehcache 本地缓存 + redis缓存服务降级Hystrix或者阿里sentinel限流&降级缓存穿透缓存穿透 就是请求去查询一条数据,先查redis,redis里面没有,再查mysql,mysql里面无,都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增解决方案空对象缓存或者缺省值 ---但是还
布隆过滤器什么是布隆过滤器由一个初值为零的bit数组和多个哈希函数构成,用来快速判断集合中是否存在某个元素布隆过滤器是一种类似set的数据结构,只是统计结果在巨量数据下有点小瑕疵,不够完美特点高效地插入和查询,占用空间少,返回的结果是不确定性+不够完美。重点:一个元素如果判断结果:存在时,元素不一定存在(存在hash冲突),但是判断结果为不存在时,则一定不存在。布隆过滤器可以添加元素,但是不能删除元素,由于涉及hashcode判断依据,删除元素会导致误判率增加。底层原理添加key时使用多个hash函数对key进行hash运算得到一个整数索引值,对位数组长度进行取模运算得到一个位置,每个hash函数都会得到一个不同的位置,将这几个位置都置1就完成了add操作。查询key时只要有其中一位是0就表示这个key不存在,但如果都是1,则不一定存在对应的key。查询某个变量的时候我们只要看看这些点是不是都是1,就可以大概率知道集合中有没有它了如果这些点,有任何一个为零则被查询变量一定不在,如果都是1,则被查询变量很可能存在,为什么说是可能存在,而不是一定存在呢?那是因为映射函数本身就是散列函数,散
ZzRG
状态 统计 图床 • •