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/
缓存预热 + 缓存雪崩 + 缓存击穿 + 缓存穿透缓存预热什么是预热?缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!解决方法使用 @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,则被查询变量很可能存在,为什么说是可能存在,而不是一定存在呢?那是因为映射函数本身就是散列函数,散
Redis的双写一致性问题你只要用缓存,就可能会涉及到redis缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,谈谈自己对双写一致性的理解!双写一致性的了解。如果redis中有数据----需要和数据库中的值相同如果redis中无数据----需要数据库中的值要是最新值,且准备回写redis缓存按照操作分,细分2种----只读缓存||读写缓存同步直写策略---写数据库后也同步写redis缓存,缓存和数据库中的数据一致;对于读写缓存来说,要想保证缓存和数据库中的数据一致,就要采用同步致谢策略。异步缓写策略---正常的业务运行中,mysql数据变动了,但是可以在业务上容许出现一定时间后才作用于redis,比如仓库,物流系统;异常情况出现了,不得不将失败的动作重新修补,有可能需要借助kafka或者RabbitMQ等消息中间件,实现重视重写。那么你如何解决一致性问题?双检加锁策略多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就
BigKey100w数据导入redis生产中不允许Key *生产上限制keys */flushdb/flushall等危险命令以防止误删误用?通过配置设置禁用这些命令,redis.conf在SECURITY这一项中可以用 scan命令-----Scan命令用于迭代数据库中的数据库键语法SACN cursor [MATCH pattern] [COUNT count]cursor-游标 pattern-匹配的模式 count-指定从数据表返回多少元素,默认值为10 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以O作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历不保证每次执行都返回某个给定数量的元素,支持模糊查询一次返回的数量不可控,只能是大概率符合count参数什么算大KeyString 是value 最大512MB但是≥10KB就是BigKeylsit、hash、set和zset,个数超过5000就是bigKey带来的危害内存不均,集群迁移困难超时删除,大Key删除作梗网络流量阻塞如何发现MEMORY USAGE 键如何删除---阿里巴巴开发手册渐
ZzRG
状态 统计 图床 • •