Redis
文章平均质量分 60
Redis的学习总结
結城
渴望着美好结局,却没能成为自己。
展开
-
threadlocal的一些用法,以及如何解决可重入分布式redis锁
好的,经过我的思考,threadlocal是一个还不错的选择,因为是对线程内共享的,事实上threadlocal应该是为了解决一些在线程内传递状态所使用的手段,(要不然你还得疯狂传参,中间要是遇到封装的第三方库,你还改不了),好,这个状态其实说起来应该是叫上下文context比较合适,除了状态外,它也可以是用户身份,任务信息等。这里的话对于可重入分布式锁,就可以有一个Integer类型的threadlocal变量,重入就+1,释放就-1,直到0了,才真正释放锁就可以了。原创 2024-08-26 17:07:51 · 542 阅读 · 0 评论 -
redis的限流器都有哪些方式
redis限流是必须的,因为你服务器每秒能处理的请求数量是有限的,超过限制轻则服务变慢,重则直接服务崩溃。解决方式主要有三种,计数、漏桶(不讲)、令牌桶。原创 2024-02-26 14:41:53 · 542 阅读 · 0 评论 -
秒杀设计思路
秒杀环节会一瞬间涌入大量需求,主要思路就是削峰、限流、异步、补偿。异步这里可以用消息队列来实现。将,这样可以为mysql减压。抢可以用redis来做,毕竟它轻量级,一秒能写入10w,并且可以集群提高扩展能力。可以先将库存数量加载到redis,然后在redis里扣减,扣减成功的消息传给消息队列。最后mysql从消息队列取消息来做真正的订单生产。再说如何提升redis处理请求能力,假设我们预估一秒来的请求超过6w(毕竟要给redis留点余量,不能顶满),那可以考虑用多个redis分流。原创 2024-02-26 14:26:12 · 343 阅读 · 0 评论 -
Redis实现分布式锁
直接SETNX lock 1就行。但有个问题A设置完,假设A的业务流程卡了或者直接宕机了。其他业务无法获取到锁。原创 2024-02-23 15:42:15 · 377 阅读 · 0 评论 -
Redis做缓存的几种模式以及缓存雪崩、缓存击穿、缓存穿透分别是什么,怎么解决
缓存可以建立在客户端也可以建立在服务端(理论上来将每个服务端都应该给自己建立缓存,因为微服务要有一定的互不信任原则(请求先到你,你做过校验了,我不一定信)原创 2024-02-23 10:34:37 · 737 阅读 · 0 评论 -
Redis中的AOF重写到底是怎么一回事
首先我们知道AOF和RDB都是Redis持久化的方法。RDB是Redis DB,一种二进制数据格式,这样就是相当于全量保存数据快照了。AOF则是保存命令,然后恢复的时候重放命令。AOF随着时间推移,会越来越大,因为不断往里追加命令。所以需要重写。重写解决了什么呢?就是删去了一些没用的指令,比如有一条SET a 100,然后后面又有一条SET a 200,那前一条指令就是没用的,只保留后面的即可。重写就是重新生成AOF操作命令记录的过程,还会顺带缩短重放时间。原创 2024-02-22 16:27:35 · 751 阅读 · 0 评论 -
跳表是一种什么样的数据结构
正常链表是一个接着一个用指针连起来的,但这样查找效率低只有O(n),为了解决这个问题,提出了跳表,实际上就是增加了高级索引。朴素的跳表指针是单向的并且元素值不能重复,redis对其进行了修改,回退指针的作用是支持反向遍历。redis是内存中的,所以b+树这扁平特性没那么重要了,并且跳表实现起来简单,也不用考虑在中间位置插入后保持平衡的操作。插入的话,不会影响当前表中节点的层高,因为节点被创建时和层高就已经确定了(当然可能会修改插入位置前后结点的关联指针,这是链表必然的)。那么为啥redis不用b+树呢?原创 2024-02-21 10:09:51 · 526 阅读 · 0 评论 -
hashtable的结构和扩容机制
最外层封装了dictht,结构如下table指向了实际存储的hash结构dictEntry。size是哈希表大小,也就是说dictEntry有多少空间。sizemask是掩码,为固定值size-1,然后元素的index就应该是元素哈希值&sizemask。used代表dictEntry里面多少个坑位已经被用上了。假设index冲突了,用拉链法(头插,避免尾插法遍历到尾巴这一O(n)的时间开销)解决。原创 2024-02-20 20:33:43 · 1868 阅读 · 0 评论