![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 83
拜了佛冷
这个作者很懒,什么都没留下…
展开
-
redis 分布式锁
如果执行完setnx加锁,正要执行expire设置过期时间时,进程crash或者要重启维护了,那么这个锁就“长生不老”了,「别的线程永远获取不到锁啦」。那线程a就把线程b的锁释放掉了,但是线程b临界区业务代码可能都还没执行完呢。如果锁过期的时候,并发多个客户端同时请求过来,都执行jedis.getSet(),最终只能有一个客户端加锁成功,但是该客户端锁的过期时间,可能被别的客户端覆盖。既然锁可能被别的线程误删,那我们给value值设置一个标记当前线程唯一的随机数,在删除的时候,校验一下,不就OK了嘛。原创 2024-08-14 16:54:45 · 576 阅读 · 0 评论 -
redis 缓存双写一致性
如果业务层要求必须读取一致性的数据,那么我们就需要在更新数据库时,先在Redis缓存客户端暂停并发读请求,等数据库更新完、缓存值删除后,再读取数据,从而保证数据一致性,这是理论可以达到的效果,但实际,不推荐,因为真实生产环境中,分布式下很难做到实时一致性,一般都是最终一致性。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存,达到一致性,切记,要以mysql的数据库写入库为准。给缓存设置过期时间,定期清理缓存并回写,是保证最终一致性的解决方案。原创 2024-08-13 22:40:49 · 630 阅读 · 0 评论 -
redis bigKey 场景
3、lazyfree-lazy-user-del no: 这个选项用于控制Redis服务器删除键时的行为,与lazyfree-lazy-server-del选项类似。当设置了lazyfree-lazy-user-del选项为no时,服务器会立即删除键,而不延迟删除操作。1、lazyfree-lazy-server-del no: 这个选项用于控制Redis服务器删除键时的行为。当设置lazyfree-lazy-server-del选项为no时,服务器会立即删除键,而不延迟删除操作。计算每个键值的字节数。原创 2024-08-13 22:18:44 · 332 阅读 · 0 评论 -
redis为什么用单线程
8.1 Redis自身出道就是优秀,基于内存操作、数据结构简单、多路复用和非阻塞 I/O、避免了不必要的线程上下文切换等特性,在单线程的环境下依然很快8.2 但对于大数据的key删除还是卡顿厉害,因此在Redis 4.0引入了多线程unlink key/flushall async等命令,主要用于Redis数据的异步删除8.3 Redis 6.0将网络数据读写、请求协议解析通过多个IO线程的来处理,而命令的执行依旧是由主线程串行执行的,因此在多线程下操作Redis不会出现线程安全的问题。原创 2024-08-13 22:09:52 · 642 阅读 · 0 评论 -
Redis 缓存预热、雪崩、穿透、击穿
缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。、定时任务、手动处理 提前将数据设置到缓存中。原创 2024-08-12 22:43:39 · 420 阅读 · 0 评论