redis
文章平均质量分 83
悠哉iky
计算机科学与技术在读|Java后端学习者
展开
-
Redis事务、lua脚本
multi相当于开始事务,他不会立刻执行命令,而且将其加入队列,当你执行exec才会执行,我们看到第三条命令,c的值并不是一个值,是一个字符串,命令加入队列时并不会去检查。移动到链表头,不常访问的自然靠近链表尾,如果超过容量、个数限制,移除尾部的。如果访问了某个 key,则它就变成最新的。检查是否超过限额,是则删除最后一个节点,并断开它的链接。时间上,新的留下,老的淘汰。随机取样法,链表法占用内存较多,记录了它们的最近访问时间,在这。使用的是随机取样法,每次只抽。获取,没有新建节点,存入。原创 2022-10-24 16:31:20 · 803 阅读 · 0 评论 -
Redis缓存击穿、缓存雪崩、缓存穿透,缓存一致性问题
缓存击穿是指:某一热点key在缓存和数据库中都存在,它过期时,这时由于并发用户特别多,同时读缓存没读到,又同时去数据库去读,压垮数据库解决方法1.热点数据不过期2.对【查询缓存没有,查询数据库,结果放入缓存】这三步进行加锁,这时只有一个客户端能获得锁,其它客户端会被阻塞,等锁释放开,缓存已有了数据,其它客户端就不必访问数据库了。但会影响吞吐量(有损方案)原创 2022-10-24 00:20:02 · 180 阅读 · 0 评论 -
Redis持久化问题详解
子进程不会阻塞主进程,但创建子进程的期间,仍会阻塞,内存越大,阻塞时间越长。此时如果有新的命令执行,修改的是主进程内存,不会影响子进程内存,并且新命令会记录到。日志,只需要根据当前内存数据的状态,生成相应的命令,记入一个新的日志文件即可。创建子进程时会根据主进程生成内存快照,只需要对子进程的内存进行遍历,把每个。文件的内存缓冲区,每隔一秒将内存缓冲区数据刷入磁盘,最多丢一秒的数据。持久化期间如果有新数据写入,新的数据修改发生在主进程,子进程向。,同步写,日志写入磁盘再返回,可以做到基本不丢数据,性能不高。原创 2022-10-23 22:49:19 · 132 阅读 · 0 评论 -
keys命令问题、Redis 过期 key 的删除策略
1、keys 命令时间复杂度是O(n),n即总的key数量,n如果很大,性能非常低2、redis执行命令是单线程执行,一个命令执行太慢会阻塞其它命令,阻塞时间长甚至会让redis发生故障切换3、可以使用 scan命令替换keys命令1.虽然scan命令的时间复杂度仍是O(n),但它是通过游标分步执行,不会导致长时间阻塞2.可以用count参数提示返回key的个数3.返回值代表下次的起点(桶下标)4.scan能保证在rehash。原创 2022-10-23 22:39:12 · 275 阅读 · 0 评论 -
Redis数据类型底层详解、跳表查询
整个跳表是有序的,下图按照score排好序,如果score,再按其他数据排。level是层级,每个数据层级可能不一样,level里面有两个属性,forward是前向指针,span用于计算排名,记录两个节点之间的跨度。为例,虽然跳表是有序的,但是底层是链表结构,不能使用二分法。先从第四层开始,同层的右侧元素null,则下一层,第三层,和右侧元素37比,下一层,第二层>右侧元素,向右小于37,下一层就找到22。,但要执行有序操作,需要排序,带来额外时间空间复杂度。的编码、长度、实际数据,为了节省内存,原创 2022-10-23 22:30:56 · 198 阅读 · 0 评论