redis
文章平均质量分 67
redis
响彻天堂丶
那万一赢了呢?
展开
-
Redis 实战之多节点分布式锁【SpringBoot + RedLock】
1 Setnx+Lua缺陷在Redis主从+哨兵模式下,正常逻辑如下:如果用户1获取锁成功,但是master还没把数据同步到slave,master宕机了。哨兵将slave升级到master。假设用户1还没有执行完,用户2是可以在新master里获取到锁的。2 RedLockRedis也提供了Redlock算法,用来实现基于多个实例的分布式锁。锁变量由多个实例维护,即使有实例发生了故障,锁变量仍然是存在的,客户端还是可以完成锁操作。Redlock算法是实现高可靠分布式锁的一种有效解决方案,可以在原创 2021-11-18 17:07:43 · 4330 阅读 · 5 评论 -
SpringBoot+Redis+Lua 实现自定义分布式锁
1 分布式锁具备的条件(1) 独占性:在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行。(2) 高可用:不能因某一个节点挂了而出现获取锁和释放锁失败的情况。(3) 防死锁:要有超时机制或撤销操作兜底释放锁。(4)不乱抢:自己只能解自己上的锁,不能解其它线程上的锁。(5) 可重入:同一个节点的同一个线程如果获得锁之后可以再次获取锁。2 代码实现@Service@Slf4jpublic class RedisService { @Autowired pr原创 2021-11-17 23:31:10 · 2030 阅读 · 0 评论 -
Redis 缓存雪崩、缓存击穿、缓存穿透 解决方案
1 缓存雪崩1.1 发生原因(1) Redis主机挂了,Redis缓存全部失效。(2) 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。1.2 解决思路(1) Redis实现高可用。(2) 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。(3) 限流&降级。2 缓存击穿2.1 发生原因缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据原创 2021-11-17 16:18:32 · 2305 阅读 · 3 评论 -
Redis 到底是单线程还是多线程?
1 Redis单线程问题主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。这也是Redis对外提供键值存储服务的主要流程。但Redis的其他功能,比如持久化、异步删除、集群数据同步等等,其实是由额外的线程执行的。Redis工作线程是单线程的,但是,整个Redis来说,是多线程的。2 Redis单线程为什么快(1) 基于内存操原创 2021-11-16 21:31:20 · 5721 阅读 · 0 评论 -
redis springboot 实现验证码需求
1 工程概述1.1 pom<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE</version> <relativePath/> <!-原创 2021-05-07 14:26:05 · 159 阅读 · 1 评论