大厂Redis day2 自用笔记

聚划算 解决高并发下的缓存击穿

我做过我们公司的聚划算迷你版 有什么问题 删除和新加的时候总有人来查

(常用就是双端检索)(我们用双端加固来解决(两件防弹衣 主A缓存 从B缓存)(B存活20天A15天))
最后还可以业务上规避 到点了服务降级熔断 提示信息 但不好不见医用 占用了承诺用户的五分钟时间

分布式锁

单机版需要枷锁
Nginx 负载均衡和()下不同的jvm锁不住还是超卖
加入分布式锁 setIfAbSent(k,v)买完后删key 相当于多机器抢k 必须finally删掉有可能出异常
jar包挂了 没走到finally so k 需要过期时间 (设置锁和时间在一行 保持原子性)
又来了 张冠李戴 把别人抢到的锁删了 解决(只能自己删自己的)释放锁从数据库里捞出来看看个自己放进去的是不是同一个
又来了 判断和delete不是原子的鸭 (用脚本保持原子性)
又来了 Redis上面都是单机 几圈 AP 异步通知 主任说OK就可以 但主人刚OK就宕掉了 从机上位 表示我没有锁 cp银行 小组长都要确认通知到了—
所以我们自己写的不到位 需要Redisson 超简单 lua脚本也不用了
最后大招 锁 捞出来看看释放掉
可系 还未解决缓存续命 看门狗 解决加钟问题

必须多机 不然Redis突然宕机 over了

公司至少三台以上 官网推荐5台 Redis分布式解决不了分布式缓存问题ap

多主模式

主从模式主机宕掉 异步从机上位nonono(回顾下zk 主机宕掉了 所有都闭关选举 出新的了 出世)多个master (加锁类似可重入锁的condition)

缓存续命(看门狗)

检查持有锁的工作线程结束没 每隔着30/3=十秒检查下 每次重新续命为30秒
使用可简单了 api工程师lock 底层中间看门狗加三段lua脚本(首次新建 同线程可重入 根据返回时间确定锁还有多久过期)unlock 底层还是lua三段(判断是否同线程的锁 判断可重入锁>0刷新过期时间 小于0删K释放锁)

Redis 的三大删除策略

立刻删(时间换空间) 惰性删(空间换时间) 中和定期删(抽样有漏网之鱼)

过期淘汰策略 8种 不要使用默认 使用 Allkey-lru

Java一切皆对象 Redis 一切皆字典(k,v)键值对

C语言底层dictEntry(进行封装)=程序员RedisObjdect

同一个类型有三种编码格式(精确利用并节约内存)

在long取值范围内的数值int 超过embstr 长度超过44字节raw

sds 可伸缩字符串 (Redis把C语言字符串重新封装)

原来 去c字符串 char数组封装 时间O(n) Redis封装后O(1)直接拿了 缩短时采用惰性删除留着看看下次有没有用

只要对embstr进行更改一定会变成raw

int紧凑 embstr不分家 raw分家过(通过指针) # 就是为了极致压榨性能减少内存碎片

Redis里用的hash 底层ziplist(默认 最大不要512字节 单个最大64字节)+hashtable(数组加链表)

ziplist 一旦升级 hashtable 不能降级
课外(Hashmapjdk7存的是entry 8存的是 node 数组链表红黑树)
why ziplist明明有链表 因为前指针和后指针比某一个entry还要大去掉了通过len确定位置

list

底层是quicklist->底层ziplist+linkedlist在这里插入图片描述

set底层 intset (512)和hashtable

zset底层是ziplist 和skiplist(索引升级两两取首(二分))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值