redis

[Windows 下载](https://github.com/microsoftarchive/redis/releases) [文件含义](https://www.cnblogs.com/ningskyer/articles/5730611.html) # java 使用 redis ## pom ``` <!--redis 缓存--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> ``` ## main (开启redis服务端) ``` public static void main(String[] args) { Jedis jedis = new Jedis("localhost", 6379); // String jedis.set("tt","ttttt"); System.out.println(jedis.get("tt")); } ``` 参考 [Jedis Util](https://www.cnblogs.com/tengfly/p/9307373.html) # java redis 实现分布式锁 ## 入门级实现分布式锁 ![image.png](https://cos.easydoc.net/48081513/files/kg1pj213.png) ![image.png](https://cos.easydoc.net/48081513/files/kg1plig8.png) > 防止死锁 ![image.png](https://cos.easydoc.net/48081513/files/kg1wbxjf.png) > 加上失效时间 ![image.png](https://cos.easydoc.net/48081513/files/kg1wg7ea.png) >高并发情况下如果超时 会出现删除其他线程的锁,删除时进行一次判断是否是自己的锁。(t1 设置超时时间10s,t1执行完需要15s ,在第10s时 因为已经超时,所以要把这个锁删除。这时t2可以抢到锁,但是在第5s时 共15s , t1执行完毕 finally 再次执行删除锁。这时他将t2的锁删除。t3就可以抢到锁。) ![image.png](https://cos.easydoc.net/48081513/files/kg1wujjw) ## Redisson(和jedis类似,适用于分布式) 实现分布式锁 ![image.png](https://cos.easydoc.net/48081513/files/kg1zf8c0.png) ![image.png](https://cos.easydoc.net/48081513/files/kg1zjl06.png) ![image.png](https://cos.easydoc.net/48081513/files/kg1zk9nm.png) ![image.png](https://cos.easydoc.net/48081513/files/kg1zrkji.png) [springboot 实现](https://blog.csdn.net/qq_37892957/article/details/89337943?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight)参考 # redis概念(雪崩,穿透,击穿) ## 雪崩 同一时间大批量数据失效 缓存雪崩:大量缓存数据同时间失效,导致用户直接发起大量请求到数据库,产生瓶颈。 1、生成随机失效的缓存时间数据; 2、让缓存节点分布在不同的物理节点上; 3、生成不失效的缓存数据; 4、定时任务更新缓存数据; ## 穿透 非正常数据请求 缓存穿透:用户请求数据,例如ID为负数,不存在缓存里,也不存在数据库里,会造成缓存穿透。 1、无意义数据放入缓存,下一次相同请求就会命中缓存; 2、IP过滤; 3、参数校验; 4、布隆过滤器; ## 击穿 并发查询同一数据 缓存失效:由于缓存热点键到时失效导致用户请求直接访问数据库 1、用久缓存; 2、分布式锁 a.单体应用—>互斥锁—>zookeeper ,redis实现。 # redis持久化 ![image.png](https://cos.easydoc.net/31477061/files/ks5pjada.png) ## RDB ![image.png](https://cos.easydoc.net/31477061/files/ks5plm86.png) ![image.png](https://cos.easydoc.net/31477061/files/ks5pmi0p.png) ## AOF ![image.png](https://cos.easydoc.net/31477061/files/ks5pna7q.png) ![image.png](https://cos.easydoc.net/31477061/files/ks5pnkqr.png)