Redis快速回忆
核心数据结构
字符串
小于1M,成倍扩容,大于1M,就每次扩容1M,最大512M。
哈希
购物车
列表
集合
有序集合
位图 Bitmap
虽然基于String类型,但是可以直接操作位
一个字节8位表示一个用户是数据
使用的时候把握住偏移量即可
集成springboot
一般都会自定义,JDK的序列化方式存的数据不能直接查看
核心原理
持久化机制
持久化命令
bgsave 是异步的
save 是同步的
RDB
AOF
混合模式
快照的时候,增量的数据使用AOF的方式
分布式锁
演进过程
本地锁和分布式锁
减库存的时候多线程
无法释放锁的情况处理
出现异常的话,就无法释放锁
服务器断了,下面的锁还是无法释放
设置超时时间,但是不能不是原子性操作
合并为原子性操作,但是自己的锁可能被别人释放,因为别人的锁可能过期没了
自己的锁被别人删除怎么办
解决办法一:值相同的时候才可以删除掉
解决办法二:给锁续命,防止线程还在执行的时候锁就失效
redission
看门狗机制
看门狗作用:每隔十秒检测,如果锁还有说明没有手动释放,说明线程还没有执行完成,就给锁自动续命三十秒。
redission极端情况下的锁丢失
分布式锁的丢失:Redis 是一个AP模型,主从数据一定会有不一致的情况。主库崩了,从库的锁还没有同步的时候,这个时候锁就丢失了。
解决方案:ZK就是CP模型,创建一个锁的话一定是不会丢失的。