redis数据库

1.基本类型

5大基本类型
a、String  key-value(有点像map<key,value>)  一个键最大能存储512MB ---使用场景缓存/限流/秒杀
b、List 双向链表实现 栈有点像 -----栈/队列
c、Set java中hashset有点像-----抽奖/随机取值/差并集共同好友
d、Hash  name-(key-value)    有点像map<name,hashmap<key,value>>------对象
e、Zset java中treeset有点像 -----有序集合排行榜
特殊结构
f、Geo地理位置详解
g、Hyperloglong基数统计
h、Bitmap

2.持久化

1.RDB(默认)
创建一个fork子进程,按照一定的时间周期策略把内存数据快照到rdb文件
2.AOP
以日志的形式来记录每个写操作,每次命令都会追加到文件最后

3.场景

订阅发布(消息队列)

4.主从复制,哨兵模式(主写重读)

5.缓存穿透、缓存击穿、缓存雪崩(宕机)布隆过滤器 

1.缓存穿透(秒杀)布隆过滤器、将null变成一个值
2.缓存击穿(0.01微博服务器宕机60s)分布式锁、限流、缓存永远不过期
3.缓存雪崩(宕机)

6.更新db删除缓存

1.先删除缓存再更新DB

结论:产生脏数据的概率较大(若出现脏数据,则意味着再不更新的情况下,查询得到的数据均为旧的数据)

比如:两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。

2.先更新DB再删除缓存(使用场景多)

结论:产生脏数据的概率较小,但是会出现一致性的问题;若更新操作的时候,同时进行查询操作,若hit,则查询得到的数据是旧的数据。但是不会影响后面的查询。(代价较小)

7.分布式锁

1. 加锁(key自定义,value为uuid)
Boolean setNX(byte[] key, byte[] value);
2.finally中释放锁
3.如果加锁宕机(死锁):设置过期时间
4.如果加锁成功设置过期时间宕机没有原则性(死锁):api提供(加锁和超时时间同步)
5.如果业务时间超过超时时间就会锁失效(a释放了b的锁锁一直失效):开启新线程续命
 redisson(api解决)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值